Simplified pseudocode including LRu and CTR skipping, which illustrates
clearly that SVP64 Scalar Branches (VL=1) are **not** identical to
-v3.0B Scalar Branches. The key areas where differences occur are in
+v3.0B Scalar Branches. The key areas where differences occur are
+the inclusion of predication (which can still be used when VL=1), in
when and why CTR is decremented (CTRtest Mode) and whether LR is
updated (which is unconditional in v3.0B when LK=1, and conditional
in SVP64 when LRu=1).
else M <- 32
ctr_ok <- BO[2] | ((CTR[M:63] != 0) ^ BO[3])
cond_ok <- BO[0] | ¬(CR[BI+32] ^ BO[1])
-if ¬predicate_bit then cond_ok = SVRMmode.SNZ
-ctrdec = ¬BO[2]
-if CTRtest & (cond_ok ^ CTi) then
- if ¬predicate_bit & ¬SVRMmode.sz then stop
- ctrdec = 0b0
+if ¬predicate_bit then cond_ok = ctr_ok = SVRMmode.SNZ
+if ¬predicate_bit & ¬SVRMmode.sz & ¬BO[2] & CTRtest & ¬CTI then
+ CTR = CTR - 1
+ stop # instruction finishes here
+ctrdec = ¬BO[2] & ¬(CTRtest & (cond_ok ^ CTi))
if ctrdec then CTR <- CTR - 1
lr_ok <- SVRMmode.LRu
if ctr_ok & cond_ok then