From: lkcl Date: Sat, 9 Jul 2022 12:45:01 +0000 (+0100) Subject: (no commit message) X-Git-Tag: opf_rfc_ls005_v1~1228 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b2e3d7b25ac904855e33d3f076bd58c4a0bfa5e5;p=libreriscv.git --- diff --git a/openpower/sv/remap.mdwn b/openpower/sv/remap.mdwn index a50538d93..a40fadad2 100644 --- a/openpower/sv/remap.mdwn +++ b/openpower/sv/remap.mdwn @@ -349,7 +349,8 @@ When `mm=1`: * bits 0-2 of `rmm` indicate an index selecting mi0-mo1 * bits 3-4 of `rmm` indicate which SVSHAPE 0-3 shall be updated * only the selected SVSHAPE is overwritten -* only the relevant bits in the REMAP SPR are updated +* only the relevant bits in the REMAP area of SVSTATE are updated +* REMAP persistence bit is set. Example 1: if `rmm`=0b10011 then mo0 is selected and SVSHAPE2 to be updated. REMAP.SVme[3] will be set high and REMAP.mo0 @@ -359,6 +360,15 @@ Example 2: if `rmm`=0b11100 then mo1 is selected and SVSHAPE3 to be updated. REMAP.SVme[4] will be set high and REMAP.mo1 set to 3 (SVSHAPE3). +Rough algorithmic form: + + marray = [mi0, mi1, mi2, mo0, mo1] + bit = rmm[0:2] + idx = rmm[3:4] + setup(SVSHAPE[idx]) + SVSTATE{marray[bit]} = idx + SVSTATE.pst = 1 + In essence, `mm=0` is intended for use to set as much of the REMAP State SPRs as practical with a single instruction, whilst `mm=1` is intended to be a little more refined.