GPR(_RT) <- [0]*57 || step
else
VLimm <- SVi + 1
- if vs = 0 then
- VL <- SVSTATE[7:13]
- else if _RA != 0 then
- VL <- (RA)[57:63]
- else if _RT != 0 then
- VL <- CTR
- else
- VL <- VLimm[0:6]
- if ms = 1 then
- MVL <- VLimm[0:6]
- else
- MVL <- SVSTATE[0:6]
+ # set or get MVL
+ if ms = 1 then MVL <- VLimm[0:6]
+ 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 _RT = 0 then VL <- VLimm[0:6]
+ else if CTR >u 0b1111111 then VL = 0b1111111
+ else VL <- CTR[57:63]
+ # limit VL to within MVL
if VL >u MVL then
VL <- MVL
SVSTATE[0:6] <- MVL