(no commit message)
authorlkcl <lkcl@web>
Mon, 18 Apr 2022 02:10:32 +0000 (03:10 +0100)
committerIkiWiki <ikiwiki.info>
Mon, 18 Apr 2022 02:10:32 +0000 (03:10 +0100)
openpower/sv/bitmanip/appendix.mdwn

index d589f070eeb3df0ee0ea555dd47e0f15c0d2ac4b..59dc6f5f5b63a9c6c829be5af9437ee9e2716ae3 100644 (file)
@@ -146,9 +146,9 @@ in order to carry on the algorithm.
 **weirdaddx RT, RA, RB** (RS=RB+VL for SVP64, RS=RB+1 for scalar)
 
     cat[0:127] = (RS) || (RB)
-    sum[0:127] = cat + EXTZ(RA) + [1]*128
+    sum[0:127] = cat + EXTZ(RA) - 1
     rhi[0:63] = sum[0:63]
-    if (RA) <= 1 then rhi = rhi + ([0]*63 || 1)
+    if (RA) <= 1 then rhi = rhi + 1
     RA = rhi
     RT = sum[64:127]
 
@@ -168,24 +168,6 @@ As a result, a big-integer subtract and multiply may be carried out
 in only 3 instructions, one of which is setting a scalar integer to
 zero.
 
-## 2nd experiment
-
-```
-        uint32_t carry = 0, carry2 = 0;
-        uint64_t products[];
-        for(int j = d_bytes / sizeof(d[0]) - 1; j >= 0; j--) {
-            products[j] = (uint64_t)q[i] * d[j];
-        }
-        for(int j = d_bytes / sizeof(d[0]) - 1; j >= 0; j--) {
-            uint64_t v = products[j] + carry;
-            carry = v >> 32;
-            v = (uint32_t)v;
-            v = n[i + j] - v + carry2;
-            carry2 = v >> 32; // either ~0 or 0
-            n[i + j] = v;
-        }
-```
-
 ## EXT004 Opcode map
 
 See Power ISA v3.1, Book III, Appendix D, Table 13 (sheet 7 of 8), p1357.