diff options
-rw-r--r-- | riscv/insns/amoadd_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoand_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amocas_b.h | 4 | ||||
-rw-r--r-- | riscv/insns/amomax_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amomaxu_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amomin_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amominu_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoor_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoswap_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoxor_b.h | 3 |
10 files changed, 31 insertions, 0 deletions
diff --git a/riscv/insns/amoadd_b.h b/riscv/insns/amoadd_b.h new file mode 100644 index 0000000..2138104 --- /dev/null +++ b/riscv/insns/amoadd_b.h @@ -0,0 +1,3 @@ +require_extension('A'); +require_extension(EXT_ZABHA); +WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs + RS2; }))); diff --git a/riscv/insns/amoand_b.h b/riscv/insns/amoand_b.h new file mode 100644 index 0000000..f461c29 --- /dev/null +++ b/riscv/insns/amoand_b.h @@ -0,0 +1,3 @@ +require_extension('A'); +require_extension(EXT_ZABHA); +WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs & RS2; }))); diff --git a/riscv/insns/amocas_b.h b/riscv/insns/amocas_b.h new file mode 100644 index 0000000..ca609c7 --- /dev/null +++ b/riscv/insns/amocas_b.h @@ -0,0 +1,4 @@ +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))); diff --git a/riscv/insns/amomax_b.h b/riscv/insns/amomax_b.h new file mode 100644 index 0000000..8187a3c --- /dev/null +++ b/riscv/insns/amomax_b.h @@ -0,0 +1,3 @@ +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)); }))); diff --git a/riscv/insns/amomaxu_b.h b/riscv/insns/amomaxu_b.h new file mode 100644 index 0000000..534b3ca --- /dev/null +++ b/riscv/insns/amomaxu_b.h @@ -0,0 +1,3 @@ +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)); }))); diff --git a/riscv/insns/amomin_b.h b/riscv/insns/amomin_b.h new file mode 100644 index 0000000..c5e8cf9 --- /dev/null +++ b/riscv/insns/amomin_b.h @@ -0,0 +1,3 @@ +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)); }))); diff --git a/riscv/insns/amominu_b.h b/riscv/insns/amominu_b.h new file mode 100644 index 0000000..9bce0e7 --- /dev/null +++ b/riscv/insns/amominu_b.h @@ -0,0 +1,3 @@ +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)); }))); diff --git a/riscv/insns/amoor_b.h b/riscv/insns/amoor_b.h new file mode 100644 index 0000000..f96ff54 --- /dev/null +++ b/riscv/insns/amoor_b.h @@ -0,0 +1,3 @@ +require_extension('A'); +require_extension(EXT_ZABHA); +WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs | RS2; }))); diff --git a/riscv/insns/amoswap_b.h b/riscv/insns/amoswap_b.h new file mode 100644 index 0000000..5ecbd26 --- /dev/null +++ b/riscv/insns/amoswap_b.h @@ -0,0 +1,3 @@ +require_extension('A'); +require_extension(EXT_ZABHA); +WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t UNUSED lhs) { return RS2; }))); diff --git a/riscv/insns/amoxor_b.h b/riscv/insns/amoxor_b.h new file mode 100644 index 0000000..1966bd4 --- /dev/null +++ b/riscv/insns/amoxor_b.h @@ -0,0 +1,3 @@ +require_extension('A'); +require_extension(EXT_ZABHA); +WRITE_RD((sreg_t)(int8_t)(MMU.amo<uint8_t>(RS1, [&](uint8_t lhs) { return lhs ^ RS2; }))); |