(no commit message)
authorlkcl <lkcl@web>
Tue, 19 Apr 2022 18:34:46 +0000 (19:34 +0100)
committerIkiWiki <ikiwiki.info>
Tue, 19 Apr 2022 18:34:46 +0000 (19:34 +0100)
openpower/sv/biginteger.mdwn

index ac271714bd20ac526932842f5eab9e12c2ac7ece..27d6981e81063b276bc80ec579a0ff7c0e0201e2 100644 (file)
@@ -103,6 +103,27 @@ that, just as with repeated chained application of `addeo`, macro-op
 fusion may be internally applied to a sequence of these strange multiply
 operations. Such a trick works equally as well in Scalar-only.
 
+**Application of SVP64**
+
+SVP64 has the means to re-target in-out registers that would normally
+be forced to be an overwrite.  Examples include `ldu` which, ordinarily,
+in Scalar v3.0B, has RA overwritten.  `sv.ldu` on the other hand permits
+limited range re-targetting, by applying one EXTRA bit to RA-as-a-source
+and a *separate* bit to RA-as-a-destination.
+
+If applied to this new 3-in 2-out mul-and-add operation it not only
+becomes possible to set RC as either scalar or vector, it becomes
+possible to stop RC from being overwritten.
+
+    product = RA*RB+RC      # RC sourced as Vector
+    RT = lowerhalf(product) # Vector destination
+    RC = upperhalf(product) # Vector destination
+
+Where previously this instruction had limited specialist applicability
+for big-integer multiply, because RC could only be utilised as a
+64-bit Carry, the possibility for RC to be a Vector greatly
+expands its potential.
+
 ## Divide
 
 The simplest implementation of big-int divide is the standard schoolbook