diff options
Diffstat (limited to 'riscv')
-rw-r--r-- | riscv/insns/wrs_nto.h | 6 | ||||
-rw-r--r-- | riscv/insns/wrs_sto.h | 1 | ||||
-rw-r--r-- | riscv/isa_parser.h | 1 | ||||
-rw-r--r-- | riscv/riscv.mk.in | 5 |
4 files changed, 13 insertions, 0 deletions
diff --git a/riscv/insns/wrs_nto.h b/riscv/insns/wrs_nto.h new file mode 100644 index 0000000..710e670 --- /dev/null +++ b/riscv/insns/wrs_nto.h @@ -0,0 +1,6 @@ +if (get_field(STATE.mstatus->read(), MSTATUS_TW)) { + require_privilege(PRV_M); +} else if (STATE.v) { + if (get_field(STATE.hstatus->read(), HSTATUS_VTW)) + require_novirt(); +} diff --git a/riscv/insns/wrs_sto.h b/riscv/insns/wrs_sto.h new file mode 100644 index 0000000..4e71aa0 --- /dev/null +++ b/riscv/insns/wrs_sto.h @@ -0,0 +1 @@ +// WRS.STO stalls for a short duration diff --git a/riscv/isa_parser.h b/riscv/isa_parser.h index 4bd9d4b..65c34fd 100644 --- a/riscv/isa_parser.h +++ b/riscv/isa_parser.h @@ -68,6 +68,7 @@ typedef enum { EXT_ZALRSC, EXT_ZACAS, EXT_ZABHA, + EXT_ZAWRS, EXT_INTERNAL_ZFH_MOVE, EXT_SMCSRIND, EXT_SSCSRIND, diff --git a/riscv/riscv.mk.in b/riscv/riscv.mk.in index 6db6fa9..469c48d 100644 --- a/riscv/riscv.mk.in +++ b/riscv/riscv.mk.in @@ -987,6 +987,10 @@ riscv_insn_ext_zabha = \ amoxor_h \ amocas_h \ +riscv_insn_ext_zawrs = \ + wrs_sto \ + wrs_nto \ + riscv_insn_ext_zalasr = \ lb_aq \ lh_aq \ @@ -1099,6 +1103,7 @@ riscv_insn_list = \ $(riscv_insn_ext_q_zfa) \ $(riscv_insn_ext_zacas) \ $(riscv_insn_ext_zabha) \ + $(riscv_insn_ext_zawrs) \ $(riscv_insn_ext_zalasr) \ $(riscv_insn_ext_zce) \ $(riscv_insn_ext_zfh) \ |