aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/fsriw.h
blob: 31983c9a43fddadcf3bf0066222c5a1b54fba5d5 (plain)
1
2
3
4
5
6
7
8
9
10
require_rv64;
require_extension('B');
int shamt = SHAMT & 63;
reg_t a = RS1, b = RS3;
if (shamt >= 32) {
	a = RS3, b = RS1;
	shamt -= 32;
}
int rshamt = -shamt & 31;
WRITE_RD(sext32(shamt ? (b << rshamt) | (zext32(a) >> shamt) : a));