fix minmax pseudo-code -- CR0 must not have lt/gt swapped
authorJacob Lifshay <programmerjake@gmail.com>
Tue, 25 Apr 2023 06:40:35 +0000 (23:40 -0700)
committerJacob Lifshay <programmerjake@gmail.com>
Tue, 25 Apr 2023 06:40:35 +0000 (23:40 -0700)
openpower/sv/rfc/ls013.mdwn

index 218bb78b327139d3de61735c2f751e1da7573b80..38d4b4168bd8a90a4c6390fd56ae837231d24b7a 100644 (file)
@@ -245,6 +245,14 @@ semantics therefore Saturated variants of these instructions need not be propose
         # do signed comparison of the original inputs
         a[0] <- ¬a[0]
         b[0] <- ¬b[0]
+    # if Rc = 1 then store the result of comparing a and b to CR0
+    if Rc = 1 then
+        if a <u b then
+            CR0 <- 0b100 || XER.SO
+        if a = b then
+            CR0 <- 0b001 || XER.SO
+        if a >u b then
+            CR0 <- 0b010 || XER.SO
     if MMM[2] then  # max mode
         # swap a and b to make the less than comparison do
         # greater than comparison of the original inputs
@@ -253,15 +261,8 @@ semantics therefore Saturated variants of these instructions need not be propose
         b <- t
     # store the entire selected source (even in word mode)
     # if Rc = 1 then store the result of comparing a and b to CR0
-    if a <u b then
-        RT <- (RA|0)
-        if Rc = 1 then CR0 <- 0b100 || XER.SO
-    if a = b then
-        RT <- (RB)
-        if Rc = 1 then CR0 <- 0b001 || XER.SO
-    if a >u b then
-        RT <- (RB)
-        if Rc = 1 then CR0 <- 0b010 || XER.SO
+    if a <u b then RT <- (RA|0)
+    else RT <- (RB)
 ```
 
 Compute the integer minimum/maximum according to `MMM` of `(RA|0)` and `(RB)`