diff options
author | Ved Shanbhogue <ved@rivosinc.com> | 2023-10-30 17:21:54 -0500 |
---|---|---|
committer | Ved Shanbhogue <ved@rivosinc.com> | 2023-11-02 14:19:13 -0500 |
commit | 8dda7a208d290fd8e035aabd5ae6d42ff0e39a8f (patch) | |
tree | f093e1d1efc1fa684a73dd45e76f848085470fe9 | |
parent | 08bad17b04320631f2e60af8ea07e04e2af613ac (diff) | |
download | riscv-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.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoadd_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amoand_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoand_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amocas_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amocas_h.h | 3 | ||||
-rw-r--r-- | riscv/insns/amomax_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amomax_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amomaxu_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amomaxu_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amomin_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amomin_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amominu_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amominu_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amoor_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoor_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amoswap_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoswap_h.h | 2 | ||||
-rw-r--r-- | riscv/insns/amoxor_b.h | 3 | ||||
-rw-r--r-- | riscv/insns/amoxor_h.h | 2 |
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; }))); |