(no commit message)
authorlkcl <lkcl@web>
Thu, 7 Apr 2022 14:59:27 +0000 (15:59 +0100)
committerIkiWiki <ikiwiki.info>
Thu, 7 Apr 2022 14:59:27 +0000 (15:59 +0100)
openpower/sv/branches.mdwn

index f3802e1d9efb74cc467a6ae83b0fe55042315ee8..8fe3f69d2a419f09849e7f1af7593cdd516d52a2 100644 (file)
@@ -192,6 +192,7 @@ Brief description of fields:
   VL is truncated to *exclude* the current element, otherwise it is
   included. SVSTATE.MVL is not altered: only VL.
 * **LRu**: Link Register Update, used in conjunction with LK=1.
+  When LRu=1,LK=0, Link Register is updated unconditionally.
   When LRu=1,LK=1, Link Register will
   only be updated if the Branch Condition succeeds.
   When LRu=0,LK=1, Link Register will only be updated if
@@ -545,7 +546,7 @@ if ctr_ok & cond_ok then
   if AA then NIA <-iea EXTS(BD || 0b00)
   else       NIA <-iea CIA + EXTS(BD || 0b00)
   lr_ok <- ¬lr_ok
-if LK & lr_ok then LR <-iea CIA + 4
+if (LK & lr_ok) | (¬LK & lr_ok) then LR <-iea CIA + 4
 ```
 
 Below is the pseudocode for SVP64 Branches, which is a little less
@@ -605,7 +606,7 @@ if cond_ok then
     if AA then NIA <-iea EXTS(BD || 0b00)
     else       NIA <-iea CIA + EXTS(BD || 0b00)
     lr_ok <- ¬lr_ok
-if LK & lr_ok then LR <-iea CIA + 4
+if (LK & lr_ok) | (¬LK & lr_ok) then LR <-iea CIA + 4
 ```
 
 Pseudocode for Vertical-First Mode:
@@ -729,7 +730,7 @@ for i in 0 to VL-1:
     if ctr_ok & cond_ok then
        NIA <-iea LR[0:61] || 0b00
        lr_ok = ¬lr_ok
-    if LK & lr_ok then LR <-iea CIA + 4
+    if (LK & lr_ok) | (¬LK & lr_ok) then LR <-iea CIA + 4
 ```
 
 The reason why should be clear from this being a Vector loop: