aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVed Shanbhogue <ved@rivosinc.com>2023-10-30 17:21:54 -0500
committerVed Shanbhogue <ved@rivosinc.com>2023-11-02 14:19:13 -0500
commit8dda7a208d290fd8e035aabd5ae6d42ff0e39a8f (patch)
treef093e1d1efc1fa684a73dd45e76f848085470fe9
parent08bad17b04320631f2e60af8ea07e04e2af613ac (diff)
downloadriscv-isa-sim-8dda7a208d290fd8e035aabd5ae6d42ff0e39a8f.zip
riscv-isa-sim-8dda7a208d290fd8e035aabd5ae6d42ff0e39a8f.tar.gz
riscv-isa-sim-8dda7a208d290fd8e035aabd5ae6d42ff0e39a8f.tar.bz2
add halfword width amo instructions
-rw-r--r--riscv/insns/amoadd_b.h3
-rw-r--r--riscv/insns/amoadd_h.h2
-rw-r--r--riscv/insns/amoand_b.h3
-rw-r--r--riscv/insns/amoand_h.h2
-rw-r--r--riscv/insns/amocas_b.h3
-rw-r--r--riscv/insns/amocas_h.h3
-rw-r--r--riscv/insns/amomax_b.h3
-rw-r--r--riscv/insns/amomax_h.h2
-rw-r--r--riscv/insns/amomaxu_b.h3
-rw-r--r--riscv/insns/amomaxu_h.h2
-rw-r--r--riscv/insns/amomin_b.h3
-rw-r--r--riscv/insns/amomin_h.h2
-rw-r--r--riscv/insns/amominu_b.h3
-rw-r--r--riscv/insns/amominu_h.h2
-rw-r--r--riscv/insns/amoor_b.h3
-rw-r--r--riscv/insns/amoor_h.h2
-rw-r--r--riscv/insns/amoswap_b.h3
-rw-r--r--riscv/insns/amoswap_h.h2
-rw-r--r--riscv/insns/amoxor_b.h3
-rw-r--r--riscv/insns/amoxor_h.h2
20 files changed, 31 insertions, 20 deletions
diff --git a/riscv/insns/amoadd_b.h b/riscv/insns/amoadd_b.h
index 2138104..ce67488 100644
--- a/riscv/insns/amoadd_b.h
+++ b/riscv/insns/amoadd_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs + RS2; })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t lhs) { return lhs + RS2; })));
diff --git a/riscv/insns/amoadd_h.h b/riscv/insns/amoadd_h.h
new file mode 100644
index 0000000..93d2209
--- /dev/null
+++ b/riscv/insns/amoadd_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t lhs) { return lhs + RS2; })));
diff --git a/riscv/insns/amoand_b.h b/riscv/insns/amoand_b.h
index f461c29..f103888 100644
--- a/riscv/insns/amoand_b.h
+++ b/riscv/insns/amoand_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs & RS2; })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t lhs) { return lhs & RS2; })));
diff --git a/riscv/insns/amoand_h.h b/riscv/insns/amoand_h.h
new file mode 100644
index 0000000..7034118
--- /dev/null
+++ b/riscv/insns/amoand_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t lhs) { return lhs & RS2; })));
diff --git a/riscv/insns/amocas_b.h b/riscv/insns/amocas_b.h
index ca609c7..54ba824 100644
--- a/riscv/insns/amocas_b.h
+++ b/riscv/insns/amocas_b.h
@@ -1,4 +1,3 @@
-require_extension('A');
require_extension(EXT_ZACAS);
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo_compare_and_swap<uint8_t>(RS1, RD, RS2)));
+WRITE_RD(sreg_t(MMU.amo_compare_and_swap<int8_t>(RS1, RD, RS2)));
diff --git a/riscv/insns/amocas_h.h b/riscv/insns/amocas_h.h
new file mode 100644
index 0000000..064d041
--- /dev/null
+++ b/riscv/insns/amocas_h.h
@@ -0,0 +1,3 @@
+require_extension(EXT_ZACAS);
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo_compare_and_swap<int16_t>(RS1, RD, RS2)));
diff --git a/riscv/insns/amomax_b.h b/riscv/insns/amomax_b.h
index 8187a3c..84df51a 100644
--- a/riscv/insns/amomax_b.h
+++ b/riscv/insns/amomax_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](int8_t lhs) { return std::max(lhs, int8_t(RS2)); })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t lhs) { return std::max(lhs, int8_t(RS2)); })));
diff --git a/riscv/insns/amomax_h.h b/riscv/insns/amomax_h.h
new file mode 100644
index 0000000..d91fe19
--- /dev/null
+++ b/riscv/insns/amomax_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t lhs) { return std::max(lhs, int16_t(RS2)); })));
diff --git a/riscv/insns/amomaxu_b.h b/riscv/insns/amomaxu_b.h
index 534b3ca..d56b98e 100644
--- a/riscv/insns/amomaxu_b.h
+++ b/riscv/insns/amomaxu_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return std::max(lhs, uint8_t(RS2)); })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](uint8_t lhs) { return std::max(lhs, uint8_t(RS2)); })));
diff --git a/riscv/insns/amomaxu_h.h b/riscv/insns/amomaxu_h.h
new file mode 100644
index 0000000..76cfa77
--- /dev/null
+++ b/riscv/insns/amomaxu_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](uint16_t lhs) { return std::max(lhs, uint16_t(RS2)); })));
diff --git a/riscv/insns/amomin_b.h b/riscv/insns/amomin_b.h
index c5e8cf9..9b781e4 100644
--- a/riscv/insns/amomin_b.h
+++ b/riscv/insns/amomin_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](int8_t lhs) { return std::min(lhs, int8_t(RS2)); })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t lhs) { return std::min(lhs, int8_t(RS2)); })));
diff --git a/riscv/insns/amomin_h.h b/riscv/insns/amomin_h.h
new file mode 100644
index 0000000..4405ac3
--- /dev/null
+++ b/riscv/insns/amomin_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t lhs) { return std::min(lhs, int16_t(RS2)); })));
diff --git a/riscv/insns/amominu_b.h b/riscv/insns/amominu_b.h
index 9bce0e7..7e12bf3 100644
--- a/riscv/insns/amominu_b.h
+++ b/riscv/insns/amominu_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return std::min(lhs, uint8_t(RS2)); })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](uint8_t lhs) { return std::min(lhs, uint8_t(RS2)); })));
diff --git a/riscv/insns/amominu_h.h b/riscv/insns/amominu_h.h
new file mode 100644
index 0000000..60226fb
--- /dev/null
+++ b/riscv/insns/amominu_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](uint16_t lhs) { return std::min(lhs, uint16_t(RS2)); })));
diff --git a/riscv/insns/amoor_b.h b/riscv/insns/amoor_b.h
index f96ff54..3048ee9 100644
--- a/riscv/insns/amoor_b.h
+++ b/riscv/insns/amoor_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs | RS2; })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t lhs) { return lhs | RS2; })));
diff --git a/riscv/insns/amoor_h.h b/riscv/insns/amoor_h.h
new file mode 100644
index 0000000..1e71a51
--- /dev/null
+++ b/riscv/insns/amoor_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t lhs) { return lhs | RS2; })));
diff --git a/riscv/insns/amoswap_b.h b/riscv/insns/amoswap_b.h
index 5ecbd26..54c9e6e 100644
--- a/riscv/insns/amoswap_b.h
+++ b/riscv/insns/amoswap_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t UNUSED lhs) { return RS2; })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t UNUSED lhs) { return RS2; })));
diff --git a/riscv/insns/amoswap_h.h b/riscv/insns/amoswap_h.h
new file mode 100644
index 0000000..0c1a8ff
--- /dev/null
+++ b/riscv/insns/amoswap_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t UNUSED lhs) { return RS2; })));
diff --git a/riscv/insns/amoxor_b.h b/riscv/insns/amoxor_b.h
index 1966bd4..dbaf591 100644
--- a/riscv/insns/amoxor_b.h
+++ b/riscv/insns/amoxor_b.h
@@ -1,3 +1,2 @@
-require_extension('A');
require_extension(EXT_ZABHA);
-WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs ^ RS2; })));
+WRITE_RD(sreg_t(MMU.amo<int8_t>(RS1, [&](int8_t lhs) { return lhs ^ RS2; })));
diff --git a/riscv/insns/amoxor_h.h b/riscv/insns/amoxor_h.h
new file mode 100644
index 0000000..110acf7
--- /dev/null
+++ b/riscv/insns/amoxor_h.h
@@ -0,0 +1,2 @@
+require_extension(EXT_ZABHA);
+WRITE_RD(sreg_t(MMU.amo<int16_t>(RS1, [&](int16_t lhs) { return lhs ^ RS2; })));