From: lkcl Date: Sat, 2 Apr 2022 11:43:13 +0000 (+0100) Subject: (no commit message) X-Git-Tag: opf_rfc_ls005_v1~2932 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8a7ac8fdb223faa60c88c49615b75fb708799135;p=libreriscv.git --- diff --git a/openpower/sv/branches.mdwn b/openpower/sv/branches.mdwn index b670c76e9..b5411a95b 100644 --- a/openpower/sv/branches.mdwn +++ b/openpower/sv/branches.mdwn @@ -473,7 +473,10 @@ if LK then LR <-iea CIA + 4 Simplified pseudocode including LRu and CTR skipping, which illustrates clearly that SVP64 Scalar Branches (VL=1) are **not** identical to -v3.0B Scalar Branches. +v3.0B Scalar Branches. The key areas where differences occur are 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). ``` if (mode_is_64bit) then M <- 0 @@ -492,6 +495,10 @@ if ctr_ok & cond_ok then if LK & lr_ok then LR <-iea CIA + 4 ``` +Below is the pseudocode for SVP64 Branches, which is a little less +obvious but identical to the above. The lack of obviousness is down +to the early-exit opportunities. + Pseudocode for Horizontal-First Mode: ```