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

index f8ab73aaf17133106c95af7aca7e6f0c0427e99d..d589f070eeb3df0ee0ea555dd47e0f15c0d2ac4b 100644 (file)
@@ -168,6 +168,24 @@ 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.