step <- SVSTATE_NEXT(SVi, 0b0)
if _RT != 0 then
GPR(_RT) <- [0]*57 || step
+ if Rc = 1 then
+ if step = 0 then c <- 0b001
+ else c <- 0b010
+ CR[32:35] <- c || XER[SO]
else
VLimm <- SVi + 1
# set or get MVL
else MVL <- SVSTATE[0:6]
# set or get VL
if vs = 0 then VL <- SVSTATE[7:13]
- else if _RA != 0 then VL <- (RA)[57:63]
+ else if _RA != 0 then
+ if (RA) >u 0b1111111 then VL <- 0b1111111
+ else VL <- (RA)[57:63]
else if _RT = 0 then VL <- VLimm[0:6]
else if CTR >u 0b1111111 then VL <- 0b1111111
else VL <- CTR[57:63]
# set requested Vertical-First mode, clear persist
SVSTATE[63] <- vf
SVSTATE[62] <- 0b0
+ if Rc = 1 then
+ if VL = 0 then c <- 0b001
+ else c <- 0b010
+ CR[32:35] <- c || XER[SO]
Special Registers Altered:
if not self.is_svp64_mode or not pred_dst_zero:
if hasattr(self.dec2.e.do, "rc"):
rc_en = yield self.dec2.e.do.rc.rc
- if rc_en and ins_name not in ['svstep']:
+ if rc_en and ins_name not in ['svstep', 'setvl']:
regnum, is_vec = yield from get_pdecode_cr_out(self.dec2, "CR0")
self.handle_comparison(results, regnum)