fix setvl CTR mode
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 2 Jul 2022 16:59:34 +0000 (17:59 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 2 Jul 2022 16:59:34 +0000 (17:59 +0100)
openpower/isa/simplev.mdwn

index a933fcd9dfb9d6c10da1b88bae6852197a6ae2c2..3b185c9a2a428b2aa1a9b670a29322558613df8f 100644 (file)
@@ -32,18 +32,16 @@ Pseudo-code:
            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