aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/shfli.h
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2019-12-05 16:37:08 -0800
committerAndrew Waterman <andrew@sifive.com>2020-10-22 17:00:11 -0700
commit672c50ca1605949aaa82992746ba7011f571aa89 (patch)
tree7773d9bc757a52aaef0a76cf6753e66807bc2331 /riscv/insns/shfli.h
parent147aef1628dca043e4b3de8a3b586f07ab46ae46 (diff)
downloadspike-672c50ca1605949aaa82992746ba7011f571aa89.zip
spike-672c50ca1605949aaa82992746ba7011f571aa89.tar.gz
spike-672c50ca1605949aaa82992746ba7011f571aa89.tar.bz2
[riscv-bitmanip] Bugfixes in RV32B impl of CRC, SRO, [UN]SHFL
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'riscv/insns/shfli.h')
-rw-r--r--riscv/insns/shfli.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/riscv/insns/shfli.h b/riscv/insns/shfli.h
index 964638e..59fbcff 100644
--- a/riscv/insns/shfli.h
+++ b/riscv/insns/shfli.h
@@ -1,7 +1,7 @@
require_extension('B');
require(SHAMT < (xlen/2));
reg_t x = RS1;
-int shamt = SHAMT & (xlen-1);
+int shamt = SHAMT & ((xlen-1) >> 1);
if (shamt & 16) x = (x & 0xFFFF00000000FFFFLL) | ((x & 0x0000FFFF00000000LL) >> 16) | ((x & 0x00000000FFFF0000LL) << 16);
if (shamt & 8) x = (x & 0xFF0000FFFF0000FFLL) | ((x & 0x00FF000000FF0000LL) >> 8) | ((x & 0x0000FF000000FF00LL) << 8);
if (shamt & 4) x = (x & 0xF00FF00FF00FF00FLL) | ((x & 0x0F000F000F000F00LL) >> 4) | ((x & 0x00F000F000F000F0LL) << 4);