aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/bfpw.h
blob: 42479e72f445794a8462e40dc4a7a1f3b8d6e728 (plain)
1
2
3
4
5
6
7
8
9
require_rv64;
require_extension(EXT_XZBF);
reg_t cfg = RS2 >> 16;
int len = (cfg >> 8) & 15;
int off = cfg & 31;
len = len ? len : 16;
reg_t mask = ~(~reg_t(0) << len) << off;
reg_t data = RS2 << off;
WRITE_RD(sext32((data & mask) | (RS1 & ~mask)));