Skip to content

Commit 1c60d31

Browse files
committed
Fix RVC compression constrants
- c.jr and c.jalr were missing imm_eq_zero - c.srli, c.srai, c.andi were missing imm_5 - c.li and c.addiw need simm_6 instead of imm_6 - c.beqz and c.bnez need simm_9 instead of imm_9 - c.addi16sp needs simm_10 instead of imm_10 - c.addi needs nz_imm - c.j needs simm_12 instead of imm_12 - Fix unsigned compression constraint clauses
1 parent 4db9c72 commit 1c60d31

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

compression

+13-13
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,31 @@ c.fsd fsd imm_8 imm_x8 rs1_b3 rs2_b3
1414
c.sw sw imm_7 imm_x4 rs1_b3 rs2_b3
1515
c.fsw fsw imm_7 imm_x4 rs1_b3 rs2_b3
1616
c.nop addi rd_eq_x0 rs1_eq_x0 rs2_eq_x0
17-
c.addi addi simm_6 rd_ne_x0 rd_eq_rs1
17+
c.addi addi simm_6 imm_nz rd_ne_x0 rd_eq_rs1
1818
c.jal jal imm_12 imm_x2 rd_eq_ra
19-
c.li addi imm_6 rd_ne_x0 rs1_eq_x0
19+
c.li addi simm_6 rd_ne_x0 rs1_eq_x0
2020
c.lui lui imm_18 imm_nz rd_ne_x0_x2
21-
c.addi16sp addi imm_10 imm_x4 imm_nz rd_eq_sp rs1_eq_sp
22-
c.srli srli imm_nz rd_eq_rs1 rd_b3 rs1_b3
23-
c.srai srai imm_nz rd_eq_rs1 rd_b3 rs1_b3
24-
c.andi andi imm_nz rd_eq_rs1 rd_b3 rs1_b3
21+
c.addi16sp addi simm_10 imm_x4 imm_nz rd_eq_sp rs1_eq_sp
22+
c.srli srli imm_5 imm_nz rd_eq_rs1 rd_b3 rs1_b3
23+
c.srai srai imm_5 imm_nz rd_eq_rs1 rd_b3 rs1_b3
24+
c.andi andi imm_5 imm_nz rd_eq_rs1 rd_b3 rs1_b3
2525
c.sub sub rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
2626
c.xor xor rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
2727
c.or or rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
2828
c.and and rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
2929
c.subw subw rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
3030
c.addw addw rd_eq_rs1 rd_b3 rs1_b3 rs2_b3
31-
c.j jal imm_12 imm_x2 rd_eq_x0
32-
c.beqz beq imm_9 imm_x2 rs1_b3 rs2_eq_x0
33-
c.bnez bne imm_9 imm_x2 rs1_b3 rs2_eq_x0
34-
c.slli slli imm_nz rd_ne_x0 rd_eq_rs1
31+
c.j jal simm_12 imm_x2 rd_eq_x0
32+
c.beqz beq simm_9 imm_x2 rs1_b3 rs2_eq_x0
33+
c.bnez bne simm_9 imm_x2 rs1_b3 rs2_eq_x0
34+
c.slli slli imm_5 imm_nz rd_ne_x0 rd_eq_rs1
3535
c.fldsp fld imm_9 imm_x8 rs1_eq_sp
3636
c.lwsp lw imm_8 imm_x4 rd_ne_x0 rs1_eq_sp
3737
c.flwsp flw imm_8 imm_x4 rs1_eq_sp
38-
c.jr jalr rd_eq_x0 rs1_ne_x0
38+
c.jr jalr imm_eq_zero rd_eq_x0 rs1_ne_x0
3939
c.mv addi imm_eq_zero rd_ne_x0
4040
c.ebreak ebreak
41-
c.jalr jalr rd_eq_ra rs1_ne_x0
41+
c.jalr jalr imm_eq_zero rd_eq_ra rs1_ne_x0
4242
c.add add rd_eq_rs1 rd_ne_x0 rs2_ne_x0
4343
c.fsdsp fsd imm_9 imm_x8 rs1_eq_sp
4444
c.swsp sw imm_8 imm_x4 rs1_eq_sp
@@ -47,7 +47,7 @@ c.ld ld imm_8 imm_x8 rd_b3 rs1_b3
4747
c.sd sd imm_8 imm_x8 rs1_b3 rs2_b3
4848
c.lq lq imm_9 imm_x16
4949
c.sq sq imm_9 imm_x16
50-
c.addiw addiw imm_6 rd_ne_x0 rd_eq_rs1
50+
c.addiw addiw simm_6 rd_ne_x0 rd_eq_rs1
5151
c.ldsp ld imm_9 imm_x8 rd_ne_x0 rs1_eq_sp
5252
c.sdsp sd imm_9 imm_x8 rs1_eq_sp
5353
c.lqsp lq imm_10 imm_x16 rs1_eq_sp

constraints

+11-7
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22
# <constraint name> <constraint expression> <hint>
33

44
simm_6 "imm >= -32 && imm < 32"
5-
imm_6 "imm <= 0b111111"
6-
imm_7 "imm <= 0b1111111"
7-
imm_8 "imm <= 0b11111111"
8-
imm_9 "imm <= 0b111111111"
9-
imm_10 "imm <= 0b1111111111"
10-
imm_12 "imm <= 0b111111111111"
11-
imm_18 "imm <= 0b111111111111111111"
5+
simm_9 "imm >= -256 && imm < 256"
6+
simm_10 "imm >= -512 && imm < 512"
7+
simm_12 "imm >= -2048 && imm < 2048"
8+
imm_5 "imm >= 0 && imm <= 0b11111"
9+
imm_6 "imm >= 0 && imm <= 0b111111"
10+
imm_7 "imm >= 0 && imm <= 0b1111111"
11+
imm_8 "imm >= 0 && imm <= 0b11111111"
12+
imm_9 "imm >= 0 && imm <= 0b111111111"
13+
imm_10 "imm >= 0 && imm <= 0b1111111111"
14+
imm_12 "imm >= 0 && imm <= 0b111111111111"
15+
imm_18 "imm >= 0 && imm <= 0b111111111111111111"
1216
imm_nz "imm != 0"
1317
imm_x2 "(imm & 0b1) == 0"
1418
imm_x4 "(imm & 0b11) == 0"

0 commit comments

Comments
 (0)