aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
Diffstat (limited to 'riscv')
-rw-r--r--riscv/insns/wrs_nto.h6
-rw-r--r--riscv/insns/wrs_sto.h1
-rw-r--r--riscv/isa_parser.h1
-rw-r--r--riscv/riscv.mk.in5
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) \