Browse Source

Remove Xbitmanip from instructions that belong to multiple extensions

pull/1384/head
Andrew Waterman 3 years ago
parent
commit
b043cc1d74
  1. 2
      riscv/insns/cmix.h
  2. 3
      riscv/insns/fsr.h
  3. 3
      riscv/insns/fsri.h
  4. 2
      riscv/insns/fsrw.h
  5. 3
      riscv/insns/gorci.h
  6. 3
      riscv/insns/grevi.h
  7. 6
      riscv/insns/pack.h
  8. 5
      riscv/insns/packh.h
  9. 4
      riscv/insns/packu.h
  10. 5
      riscv/insns/packw.h
  11. 3
      riscv/insns/shfli.h
  12. 3
      riscv/insns/unshfli.h
  13. 2
      riscv/insns/xperm4.h
  14. 2
      riscv/insns/xperm8.h

2
riscv/insns/cmix.h

@ -1,2 +1,2 @@
require_either_extension(EXT_ZBPBO, EXT_XZBT);
require_extension(EXT_ZBPBO);
WRITE_RD((RS1 & RS2) | (RS3 & ~RS2));

3
riscv/insns/fsr.h

@ -1,4 +1,5 @@
require_either_extension(xlen == 32 ? EXT_ZBPBO : EXT_XZBT, EXT_XZBT);
require_rv32;
require_extension(EXT_ZBPBO);
int shamt = RS2 & (2*xlen-1);
reg_t a = RS1, b = RS3;
if (shamt >= xlen) {

3
riscv/insns/fsri.h

@ -1,4 +1,5 @@
require_either_extension(xlen == 32 ? EXT_ZBPBO : EXT_XZBT, EXT_XZBT);
require_rv32;
require_extension(EXT_ZBPBO);
int shamt = SHAMT & (2*xlen-1);
reg_t a = RS1, b = RS3;
if (shamt >= xlen) {

2
riscv/insns/fsrw.h

@ -1,5 +1,5 @@
require_rv64;
require_either_extension(EXT_ZBPBO, EXT_XZBT);
require_extension(EXT_ZBPBO);
int shamt = RS2 & 63;
reg_t a = RS1, b = RS3;
if (shamt >= 32) {

3
riscv/insns/gorci.h

@ -1,6 +1,5 @@
// Zbb contains orc.b but not general gorci
require(((SHAMT == 7) && p->extension_enabled(EXT_ZBB))
|| p->extension_enabled(EXT_XZBP));
require(((SHAMT == 7) && p->extension_enabled(EXT_ZBB)));
require(SHAMT < xlen);
reg_t x = RS1;
int shamt = SHAMT;

3
riscv/insns/grevi.h

@ -4,8 +4,7 @@ int shamt = SHAMT;
require(((shamt == xlen - 8) && (p->extension_enabled(EXT_ZBB) || p->extension_enabled(EXT_ZBKB))) //rev8
|| ((shamt == 7) && p->extension_enabled(EXT_ZBKB)) // rev8.b
|| ((shamt == 8) && p->extension_enabled(EXT_ZPN)) // rev8.h
|| ((shamt == xlen - 1) && p->extension_enabled(EXT_ZPN)) // rev
|| p->extension_enabled(EXT_XZBP));
|| ((shamt == xlen - 1) && p->extension_enabled(EXT_ZPN)));
require(shamt < xlen);
reg_t x = RS1;
if (shamt & 1) x = ((x & 0x5555555555555555LL) << 1) | ((x & 0xAAAAAAAAAAAAAAAALL) >> 1);

6
riscv/insns/pack.h

@ -1,11 +1,7 @@
// RV32Zbb contains zext.h but not general pack
require(((xlen == 32) && (insn.rs2() == 0) && p->extension_enabled(EXT_ZBB))
|| p->extension_enabled(EXT_ZPN)
|| p->extension_enabled(EXT_ZBKB)
|| p->extension_enabled(EXT_XZBP)
|| p->extension_enabled(EXT_XZBE)
|| p->extension_enabled(EXT_XZBF)
|| ((xlen == 64) && p->extension_enabled(EXT_XZBM)));
|| p->extension_enabled(EXT_ZBKB));
reg_t lo = zext_xlen(RS1 << (xlen/2)) >> (xlen/2);
reg_t hi = zext_xlen(RS2 << (xlen/2));
WRITE_RD(sext_xlen(lo | hi));

5
riscv/insns/packh.h

@ -1,7 +1,4 @@
require(p->extension_enabled(EXT_ZBKB) ||
p->extension_enabled(EXT_XZBP) ||
p->extension_enabled(EXT_XZBE) ||
p->extension_enabled(EXT_XZBF));
require_extension(EXT_ZBKB);
reg_t lo = zext_xlen(RS1 << (xlen-8)) >> (xlen-8);
reg_t hi = zext_xlen(RS2 << (xlen-8)) >> (xlen-16);
WRITE_RD(sext_xlen(lo | hi));

4
riscv/insns/packu.h

@ -1,6 +1,4 @@
require(p->extension_enabled(EXT_ZPN) ||
p->extension_enabled(EXT_XZBP) ||
((xlen == 64) && p->extension_enabled(EXT_XZBM)));
require_extension(EXT_ZPN);
reg_t lo = zext_xlen(RS1) >> (xlen/2);
reg_t hi = zext_xlen(RS2) >> (xlen/2) << (xlen/2);
WRITE_RD(sext_xlen(lo | hi));

5
riscv/insns/packw.h

@ -1,9 +1,6 @@
// RV64Zbb contains zext.h but not general packw
require(((insn.rs2() == 0) && p->extension_enabled(EXT_ZBB))
|| p->extension_enabled(EXT_ZBKB)
|| p->extension_enabled(EXT_XZBP)
|| p->extension_enabled(EXT_XZBE)
|| p->extension_enabled(EXT_XZBF));
|| p->extension_enabled(EXT_ZBKB));
require_rv64;
reg_t lo = zext32(RS1 << 16) >> 16;
reg_t hi = zext32(RS2 << 16);

3
riscv/insns/shfli.h

@ -1,6 +1,5 @@
// Zbkb contains zip but not general shfli
require(((insn.rs2() == (xlen / 2 - 1)) && p->extension_enabled(EXT_ZBKB))
|| p->extension_enabled(EXT_XZBP));
require(((insn.rs2() == (xlen / 2 - 1)) && p->extension_enabled(EXT_ZBKB)));
require(SHAMT < (xlen/2));
reg_t x = RS1;
int shamt = SHAMT & ((xlen-1) >> 1);

3
riscv/insns/unshfli.h

@ -1,6 +1,5 @@
// Zbkb contains unzip but not general unshfli
require(((insn.rs2() == (xlen / 2 - 1)) && p->extension_enabled(EXT_ZBKB))
|| p->extension_enabled(EXT_XZBP));
require(((insn.rs2() == (xlen / 2 - 1)) && p->extension_enabled(EXT_ZBKB)));
require(SHAMT < (xlen/2));
reg_t x = RS1;
int shamt = SHAMT & ((xlen-1) >> 1);

2
riscv/insns/xperm4.h

@ -1,2 +1,2 @@
require_either_extension(EXT_ZBKX, EXT_XZBP);
require_extension(EXT_ZBKX);
WRITE_RD(sext_xlen(xperm(RS1, RS2, 2, xlen)));

2
riscv/insns/xperm8.h

@ -1,2 +1,2 @@
require_either_extension(EXT_ZBKX, EXT_XZBP);
require_extension(EXT_ZBKX);
WRITE_RD(sext_xlen(xperm(RS1, RS2, 3, xlen)));

Loading…
Cancel
Save