aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/kslraw_u.h
blob: ebecb615536dc18a8bbf559da22bc0e1d7a8ae27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
require_vector_vs;
require_extension(EXT_ZPN);
sreg_t rs1 = sext32(RS1);
sreg_t sa = int64_t(RS2) << (64 - 6) >> (64 - 6);

if (sa < 0) {
  sa = -sa;
  sa = (sa == 32) ? 31 : sa;
  WRITE_RD(sext32(((rs1 >> (sa - 1)) + 1)) >> 1);
} else {
  auto res = rs1 << sa;
  P_SAT(res, 32);
  WRITE_RD(sext32(res));
}