marcfedorow
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with
34 additions and
36 deletions
-
riscv/insns/andn.h
-
riscv/insns/clmul.h
-
riscv/insns/clmulh.h
-
riscv/insns/gorci.h
-
riscv/insns/grevi.h
-
riscv/insns/orn.h
-
riscv/insns/pack.h
-
riscv/insns/packh.h
-
riscv/insns/packw.h
-
riscv/insns/rol.h
-
riscv/insns/rolw.h
-
riscv/insns/ror.h
-
riscv/insns/rori.h
-
riscv/insns/roriw.h
-
riscv/insns/rorw.h
-
riscv/insns/shfli.h
-
riscv/insns/unshfli.h
-
riscv/insns/xnor.h
-
riscv/insns/xperm_b.h
-
riscv/insns/xperm_n.h
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
WRITE_RD(RS1 & ~RS2); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension(EXT_ZBC); |
|
|
|
require_either_extension(EXT_ZBC, EXT_ZBKC); |
|
|
|
reg_t a = zext_xlen(RS1), b = zext_xlen(RS2), x = 0; |
|
|
|
for (int i = 0; i < xlen; i++) |
|
|
|
if ((b >> i) & 1) |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension(EXT_ZBC); |
|
|
|
require_either_extension(EXT_ZBC, EXT_ZBKC); |
|
|
|
reg_t a = zext_xlen(RS1), b = zext_xlen(RS2), x = 0; |
|
|
|
for (int i = 1; i < xlen; i++) |
|
|
|
if ((b >> i) & 1) |
|
|
|
|
|
|
|
@ -1,9 +1,6 @@ |
|
|
|
// Zbb contains orc.b but not general gorci
|
|
|
|
if (SHAMT == 7) |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
else |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
|
|
|
|
require(((SHAMT == 7) && p->extension_enabled(EXT_ZBB)) |
|
|
|
|| p->extension_enabled(EXT_XBITMANIP)); |
|
|
|
require(SHAMT < xlen); |
|
|
|
reg_t x = RS1; |
|
|
|
int shamt = SHAMT; |
|
|
|
|
|
|
|
@ -1,9 +1,8 @@ |
|
|
|
// Zbb contains rev8 but not general grevi
|
|
|
|
if (SHAMT == xlen - 8) |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
else |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
|
|
|
|
// Zbkb contains rev8 and brev8 (a.k.a. rev.b) but not general grevi
|
|
|
|
require(((SHAMT == xlen - 8) && (p->extension_enabled(EXT_ZBB) || p->extension_enabled(EXT_ZBKB))) |
|
|
|
|| ((SHAMT == 8) && p->extension_enabled(EXT_ZBKB)) |
|
|
|
|| p->extension_enabled(EXT_XBITMANIP)); |
|
|
|
require(SHAMT < xlen); |
|
|
|
reg_t x = RS1; |
|
|
|
int shamt = SHAMT; |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
WRITE_RD(RS1 | ~RS2); |
|
|
|
|
|
|
|
@ -1,9 +1,8 @@ |
|
|
|
// RV32Zbb contains zext.h but not general pack
|
|
|
|
if (insn.rs2() == 0 && xlen == 32) |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
else |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
|
|
|
|
require(((xlen == 32) && (insn.rs2() == 0) && p->extension_enabled(EXT_ZBB)) |
|
|
|
|| p->extension_enabled(EXT_ZBKB) |
|
|
|
|| p->extension_enabled(EXT_XBITMANIP)); |
|
|
|
require(SHAMT < (xlen/2)); |
|
|
|
reg_t lo = zext_xlen(RS1 << (xlen/2)) >> (xlen/2); |
|
|
|
reg_t hi = zext_xlen(RS2 << (xlen/2)); |
|
|
|
WRITE_RD(sext_xlen(lo | hi)); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
require_either_extension(EXT_ZBKB, EXT_XBITMANIP); |
|
|
|
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)); |
|
|
|
|
|
|
|
@ -1,9 +1,8 @@ |
|
|
|
// RV64Zbb contains zext.h but not general packw
|
|
|
|
if (insn.rs2() == 0) |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
else |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
|
|
|
|
require(((insn.rs2() == 0) && p->extension_enabled(EXT_ZBB)) |
|
|
|
|| p->extension_enabled(EXT_ZBKB) |
|
|
|
|| p->extension_enabled(EXT_XBITMANIP)); |
|
|
|
require(SHAMT < (xlen/2)); |
|
|
|
require_rv64; |
|
|
|
reg_t lo = zext32(RS1 << 16) >> 16; |
|
|
|
reg_t hi = zext32(RS2 << 16); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
int shamt = RS2 & (xlen-1); |
|
|
|
int rshamt = -shamt & (xlen-1); |
|
|
|
WRITE_RD(sext_xlen((RS1 << shamt) | (zext_xlen(RS1) >> rshamt))); |
|
|
|
|
|
|
|
@ -1,5 +1,5 @@ |
|
|
|
require_rv64; |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
int shamt = RS2 & 31; |
|
|
|
int rshamt = -shamt & 31; |
|
|
|
WRITE_RD(sext32((RS1 << shamt) | (zext32(RS1) >> rshamt))); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
int shamt = RS2 & (xlen-1); |
|
|
|
int rshamt = -shamt & (xlen-1); |
|
|
|
WRITE_RD(sext_xlen((RS1 << rshamt) | (zext_xlen(RS1) >> shamt))); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
require(SHAMT < xlen); |
|
|
|
int shamt = SHAMT & (xlen-1); |
|
|
|
int rshamt = -shamt & (xlen-1); |
|
|
|
|
|
|
|
@ -1,5 +1,5 @@ |
|
|
|
require_rv64; |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
require(SHAMT < 32); |
|
|
|
int shamt = SHAMT & 31; |
|
|
|
int rshamt = -shamt & 31; |
|
|
|
|
|
|
|
@ -1,5 +1,5 @@ |
|
|
|
require_rv64; |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
int shamt = RS2 & 31; |
|
|
|
int rshamt = -shamt & 31; |
|
|
|
WRITE_RD(sext32((RS1 << rshamt) | (zext32(RS1) >> shamt))); |
|
|
|
|
|
|
|
@ -1,4 +1,6 @@ |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
// Zbkb contains zip but not general packw
|
|
|
|
require(((insn.rs2() == (xlen / 2 - 1)) && p->extension_enabled(EXT_ZBKB)) |
|
|
|
|| p->extension_enabled(EXT_XBITMANIP)); |
|
|
|
require(SHAMT < (xlen/2)); |
|
|
|
reg_t x = RS1; |
|
|
|
int shamt = SHAMT & ((xlen-1) >> 1); |
|
|
|
|
|
|
|
@ -1,4 +1,6 @@ |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
// Zbkb contains unzip but not general packw
|
|
|
|
require(((insn.rs2() == (xlen / 2 - 1)) && p->extension_enabled(EXT_ZBKB)) |
|
|
|
|| p->extension_enabled(EXT_XBITMANIP)); |
|
|
|
require(SHAMT < (xlen/2)); |
|
|
|
reg_t x = RS1; |
|
|
|
int shamt = SHAMT & ((xlen-1) >> 1); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension(EXT_ZBB); |
|
|
|
require_either_extension(EXT_ZBB, EXT_ZBKB); |
|
|
|
WRITE_RD(RS1 ^ ~RS2); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
require_either_extension(EXT_ZBKX, EXT_XBITMANIP); |
|
|
|
WRITE_RD(sext_xlen(xperm(RS1, RS2, 3, xlen))); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension(EXT_XBITMANIP); |
|
|
|
require_either_extension(EXT_ZBKX, EXT_XBITMANIP); |
|
|
|
WRITE_RD(sext_xlen(xperm(RS1, RS2, 2, xlen))); |
|
|
|
|