Skip to content

Commit 60586e0

Browse files
committed
fix: Correct a few compressed load/store assembly
Assembly for load/store instructions need a base register in the form: ``` instruction destination,offset(base) ``` Within that set, stack-based instructions need to explicitly specify the stack pointer (even though it is ignored in encoding).
1 parent 733accf commit 60586e0

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

model/riscv_insts_zca.sail

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ function clause execute (C_LWSP(uimm, rd)) = {
418418
}
419419

420420
mapping clause assembly = C_LWSP(uimm, rd)
421-
<-> "c.lwsp" ^ spc() ^ reg_name(rd) ^ sep() ^ hex_bits_6(uimm)
421+
<-> "c.lwsp" ^ spc() ^ reg_name(rd) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
422422
when rd != zreg
423423

424424
/* ****************************************************************** */
@@ -434,7 +434,7 @@ function clause execute (C_LDSP(uimm, rd)) = {
434434
}
435435

436436
mapping clause assembly = C_LDSP(uimm, rd)
437-
<-> "c.ldsp" ^ spc() ^ reg_name(rd) ^ sep() ^ hex_bits_6(uimm)
437+
<-> "c.ldsp" ^ spc() ^ reg_name(rd) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
438438
when rd != zreg & xlen == 64
439439

440440
/* ****************************************************************** */
@@ -450,7 +450,7 @@ function clause execute (C_SWSP(uimm, rs2)) = {
450450
}
451451

452452
mapping clause assembly = C_SWSP(uimm, rs2)
453-
<-> "c.swsp" ^ spc() ^ reg_name(rs2) ^ sep() ^ hex_bits_6(uimm)
453+
<-> "c.swsp" ^ spc() ^ reg_name(rs2) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
454454

455455
/* ****************************************************************** */
456456
union clause ast = C_SDSP : (bits(6), regidx)
@@ -465,7 +465,7 @@ function clause execute (C_SDSP(uimm, rs2)) = {
465465
}
466466

467467
mapping clause assembly = C_SDSP(uimm, rs2)
468-
<-> "c.sdsp" ^ spc() ^ reg_name(rs2) ^ sep() ^ hex_bits_6(uimm)
468+
<-> "c.sdsp" ^ spc() ^ reg_name(rs2) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
469469
when xlen == 64
470470

471471
/* ****************************************************************** */

model/riscv_insts_zcd.sail

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function clause execute (C_FLDSP(uimm, rd)) = {
2121

2222
mapping clause assembly = C_FLDSP(uimm, rd)
2323
if (xlen == 32 | xlen == 64)
24-
<-> "c.fldsp" ^ spc() ^ freg_name(rd) ^ sep() ^ hex_bits_6(uimm)
24+
<-> "c.fldsp" ^ spc() ^ freg_name(rd) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
2525
if (xlen == 32 | xlen == 64)
2626

2727
/* ****************************************************************** */
@@ -38,7 +38,7 @@ function clause execute (C_FSDSP(uimm, rs2)) = {
3838

3939
mapping clause assembly = C_FSDSP(uimm, rs2)
4040
if (xlen == 32 | xlen == 64)
41-
<-> "c.fsdsp" ^ spc() ^ freg_name(rs2) ^ sep() ^ hex_bits_6(uimm)
41+
<-> "c.fsdsp" ^ spc() ^ freg_name(rs2) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
4242
if (xlen == 32 | xlen == 64)
4343

4444
/* ****************************************************************** */
@@ -57,7 +57,7 @@ function clause execute (C_FLD(uimm, rsc, rdc)) = {
5757

5858
mapping clause assembly = C_FLD(uimm, rsc, rdc)
5959
if (xlen == 32 | xlen == 64)
60-
<-> "c.fld" ^ spc() ^ creg_name(rdc) ^ sep() ^ creg_name(rsc) ^ sep() ^ hex_bits_8(uimm @ 0b000)
60+
<-> "c.fld" ^ spc() ^ creg_name(rdc) ^ sep() ^ hex_bits_8(uimm @ 0b000) ^ "(" ^ creg_name(rsc) ^ ")"
6161
if (xlen == 32 | xlen == 64)
6262

6363
/* ****************************************************************** */
@@ -76,5 +76,5 @@ function clause execute (C_FSD(uimm, rsc1, rsc2)) = {
7676

7777
mapping clause assembly = C_FSD(uimm, rsc1, rsc2)
7878
if (xlen == 32 | xlen == 64)
79-
<-> "c.fsd" ^ spc() ^ creg_name(rsc1) ^ sep() ^ creg_name(rsc2) ^ sep() ^ hex_bits_8(uimm @ 0b000)
79+
<-> "c.fsd" ^ spc() ^ creg_name(rsc1) ^ sep() ^ hex_bits_8(uimm @ 0b000) ^ "(" ^ creg_name(rsc2) ^ ")"
8080
if (xlen == 32 | xlen == 64)

model/riscv_insts_zcf.sail

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function clause execute (C_FLWSP(imm, rd)) = {
2020
}
2121

2222
mapping clause assembly = C_FLWSP(imm, rd)
23-
<-> "c.flwsp" ^ spc() ^ freg_name(rd) ^ sep() ^ hex_bits_6(imm)
23+
<-> "c.flwsp" ^ spc() ^ freg_name(rd) ^ sep() ^ hex_bits_6(imm) ^ "(" ^ reg_name(2) ^ ")"
2424
when xlen == 32
2525

2626
/* ****************************************************************** */
@@ -36,7 +36,7 @@ function clause execute (C_FSWSP(uimm, rs2)) = {
3636
}
3737

3838
mapping clause assembly = C_FSWSP(uimm, rs2)
39-
<-> "c.fswsp" ^ spc() ^ freg_name(rs2) ^ sep() ^ hex_bits_6(uimm)
39+
<-> "c.fswsp" ^ spc() ^ freg_name(rs2) ^ sep() ^ hex_bits_6(uimm) ^ "(" ^ reg_name(2) ^ ")"
4040
when xlen == 32
4141

4242
/* ****************************************************************** */
@@ -54,7 +54,7 @@ function clause execute (C_FLW(uimm, rsc, rdc)) = {
5454
}
5555

5656
mapping clause assembly = C_FLW(uimm, rsc, rdc)
57-
<-> "c.flw" ^ spc() ^ creg_name(rdc) ^ sep() ^ creg_name(rsc) ^ sep() ^ hex_bits_7(uimm @ 0b00)
57+
<-> "c.flw" ^ spc() ^ creg_name(rdc) ^ sep() ^ hex_bits_7(uimm @ 0b00) ^ "(" ^ creg_name(rsc) ^ ")"
5858
when xlen == 32
5959

6060
/* ****************************************************************** */
@@ -72,5 +72,5 @@ function clause execute (C_FSW(uimm, rsc1, rsc2)) = {
7272
}
7373

7474
mapping clause assembly = C_FSW(uimm, rsc1, rsc2)
75-
<-> "c.fsw" ^ spc() ^ creg_name(rsc1) ^ sep() ^ creg_name(rsc2) ^ sep() ^ hex_bits_7(uimm @ 0b00)
75+
<-> "c.fsw" ^ spc() ^ creg_name(rsc1) ^ sep() ^ hex_bits_7(uimm @ 0b00) ^ "(" ^ creg_name(rsc2) ^ ")"
7676
when xlen == 32

0 commit comments

Comments
 (0)