(no commit message)
authorlkcl <lkcl@web>
Sat, 4 Jun 2022 18:13:58 +0000 (19:13 +0100)
committerIkiWiki <ikiwiki.info>
Sat, 4 Jun 2022 18:13:58 +0000 (19:13 +0100)
openpower/sv/shape_table_format.mdwn

index 364dcb5ed357549da468b393139756f4ee9d7185..6e54cacffd52d527af55087b986426b4a866bb07 100644 (file)
@@ -110,7 +110,7 @@ In its simplest form (without elwidth overrides or other modes):
 
 ```
 def index_remap(i):
-    return GPR((SVSHAPE.SVGPR<<1)+i)
+    return GPR((SVSHAPE.SVGPR<<1)+i+SVSHAPE.offset)
 
 for i in 0..VL-1:
     GPR(RT + indexed_remap(i) + SVSHAPE.offset) = ....
@@ -119,4 +119,21 @@ for i in 0..VL-1:
 Matrix-style reordering still applies to the indices, except limited
 to up to 2 Dimensions (X,Y). Ordering is therefore limited to (X,Y) or
 (Y,X). Only one dimension may optionally be skipped. Inversion of either
-X or Y or both is possible.
+X or Y or both is possible. Pseudocode for Indexed Mode (without elwidth
+overrides) may be written in terms of Matrix Mode:
+
+```
+def index_remap(ISHAPE, i):
+    MSHAPE.skip   = 0b0 || ISHAPE.skip
+    MSHAPE.invxyz = 0b0 || ISHAPE.invxy
+    MSHAPE.xdimsz = ISHAPE.xdimsz
+    MSHAPE.ydimsz = ISHAPE.ydimsz
+    MSHAPE.zdimsz = 0
+    if ISHAPE.permute = 0b110 # 0,1
+       MSHAPE.permute = 0b000 # 0,1,2
+    if ISHAPE.permute = 0b111 # 1,0
+       MSHAPE.permute = 0b010 # 1,0,2
+    el_idx = remap_matrix(MSHAPE, i)
+    return GPR((ISHAPE.SVGPR<<1)+el_idx+ISHAPE.offset)
+```
+