(no commit message)
authorlkcl <lkcl@web>
Sun, 12 Jun 2022 16:41:19 +0000 (17:41 +0100)
committerIkiWiki <ikiwiki.info>
Sun, 12 Jun 2022 16:41:19 +0000 (17:41 +0100)
openpower/sv/mv.swizzle.mdwn

index b54ceac5a5e5c88ab5e5c617d2e69ecdabf3f218..bc7a90fe3f455f094bec4cc0b2aa8d8fac31dab2 100644 (file)
@@ -145,11 +145,42 @@ permitted
 to be serviced. Out-of-Order Micro-architectures may of course cancel
 the in-flight instruction as usual if the Interrupt requires fast servicing.
 
+Determining the source and destination subvector lengths is tricky
+because of the built-in static predicate mask.
 Swizzle Pseudocode (when SRC_SUBVL=SUBVL):
 
 ```
+    swiz[0] = imm[0:3]   # X
+    swiz[1] = imm[3:6]   # Y
+    swiz[2] = imm[6:9]   # Z
+    swiz[3] = imm[9:12]  # W
+    # determine implied subvector length from Swizzle
+    for i in range(4):
+        if swiz[i] != 0b000: subvlen = i
+    source_subvl = subvlen
+    dest_subvl = SUBVL
 ```
 
+What is going on here is that the option is provided to have different
+source and destination subvector lengths, by exploiting redundancy in
+the Swizzle Immediate.
+
+Example 1:
+
+A SUBVL of 2 with a Swizzle "ZW00" (or anything
+in the top 2 swizzle positions) allows for copying any two elements
+from a vec4 into a vec2.
+
+Example 2:
+
+A SUBVL of 2 with a Swizzle "XX0." allows for copying from a vec3
+to a vec2
+
+Example 3:
+
+A SUBVL of 3 with a Swizzle "YX.." allows a vec2 to be copied to a vec3
+
+Example 4:
 
 # RM Mode Concept: