Browse Source

add halfword width amo instructions

pull/1491/head
Ved Shanbhogue 3 years ago
parent
commit
8dda7a208d
  1. 3
      riscv/insns/amoadd_b.h
  2. 2
      riscv/insns/amoadd_h.h
  3. 3
      riscv/insns/amoand_b.h
  4. 2
      riscv/insns/amoand_h.h
  5. 3
      riscv/insns/amocas_b.h
  6. 3
      riscv/insns/amocas_h.h
  7. 3
      riscv/insns/amomax_b.h
  8. 2
      riscv/insns/amomax_h.h
  9. 3
      riscv/insns/amomaxu_b.h
  10. 2
      riscv/insns/amomaxu_h.h
  11. 3
      riscv/insns/amomin_b.h
  12. 2
      riscv/insns/amomin_h.h
  13. 3
      riscv/insns/amominu_b.h
  14. 2
      riscv/insns/amominu_h.h
  15. 3
      riscv/insns/amoor_b.h
  16. 2
      riscv/insns/amoor_h.h
  17. 3
      riscv/insns/amoswap_b.h
  18. 2
      riscv/insns/amoswap_h.h
  19. 3
      riscv/insns/amoxor_b.h
  20. 2
      riscv/insns/amoxor_h.h

3
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; })));

2
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; })));

3
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; })));

2
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; })));

3
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)));

3
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)));

3
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)); })));

2
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)); })));

3
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)); })));

2
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)); })));

3
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)); })));

2
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)); })));

3
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)); })));

2
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)); })));

3
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; })));

2
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; })));

3
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; })));

2
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; })));

3
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; })));

2
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; })));
Loading…
Cancel
Save