--- /dev/null
+# Compare Immediate
+
+cmpi BF,L,RA,SI
+
+ if L = 0 then a <- EXTS((RA)[32:63])
+ else a <- (RA)
+ if a < EXTS(SI) then c <- 0b100
+ else if a > EXTS(SI) then c <- 0b010
+ else c <- 0b001
+ CR[4*BF+32:4*BF+35] <- c || XER[SO]
+
+# Compare
+
+cmp BF,L,RA,RB
+
+ if L = 0 then a <- EXTS((RA)[32:63] )
+ b <- EXTS((RB)[32:63])
+ else a <- (RA)
+ b <- (RB)
+ if a < b then c <- 0b100
+ else if a > b then c <- 0b010
+ else c <- 0b001
+ CR[4*BF+32:4*BF+35] <- c || XER[SO]
+
+# Compare Logical Immediate
+
+cmpli BF,L,RA,UI
+
+ if L = 0 then a <- [0]*32 || (RA)[32:63]
+ else a <- (RA)
+ if a <u ( [0]*48 || UI) then c <- 0b100
+ else if a >u ( [0]*48 || UI) then c <- 0b010
+ else c <- 0b001
+ CR[4*BF+32:4*BF+35] <- c || XER[SO]
+
+# Compare Logical
+
+cmpl BF,L,RA,RB
+
+ if L = 0 then a <- [0]*32 || (RA)[32:63]
+ b <- [0]*32 || (RB)[32:63]
+ else a <- (RA)
+ b <- (RB)
+ if a <u b then c <- 0b100
+ else if a >u b then c <- 0b010
+ else c <- 0b001
+ CR[4*BF+32:4*BF+35] <- c || XER[SO]
+
+# Compare Ranged Byte X-form
+
+cmprb BF,L,RA,RB
+
+ src1 <- EXTZ((RA)[56:63])
+
+ src21hi <- EXTZ((RB)[32:39])
+ src21lo <- EXTZ((RB)[40:47])
+ src22hi <- EXTZ((RB)[48:55])
+ src22lo <- EXTZ((RB)[56:63])
+
+ if L=0 then
+ in_range <- (src22lo <= src1) & (src1 <= src22hi)
+ else
+ in_range <- ((src21lo <= src1) & (src1 <= src21hi)) |
+ in_range <- ((src22lo <= src1) & (src1 <= src22hi))
+
+ CR[4×BF+32] <- 0b0
+ CR[4×BF+33] <- in_range
+ CR[4×BF+34] <- 0b0
+ CR[4×BF+35] <- 0b0
+
+# Compare Equal Byte X-form
+
+cmpeqb BF,RA,RB
+
+ src1 <- GPR[RA].bit[56:63]
+
+ match <- (src1 = (RB)[00:07]) |
+ match <- (src1 = (RB)[08:15]) |
+ match <- (src1 = (RB)[16:23]) |
+ match <- (src1 = (RB)[24:31]) |
+ match <- (src1 = (RB)[32:39]) |
+ match <- (src1 = (RB)[40:47]) |
+ match <- (src1 = (RB)[48:55]) |
+ match <- (src1 = (RB)[56:63])
+
+ CR[4×BF+32] <- 0b0
+ CR[4×BF+33] <- match
+ CR[4×BF+34] <- 0b0
+ CR[4×BF+35] <- 0b0
+