(no commit message)
authorlkcl <lkcl@web>
Mon, 23 May 2022 14:59:51 +0000 (15:59 +0100)
committerIkiWiki <ikiwiki.info>
Mon, 23 May 2022 14:59:51 +0000 (15:59 +0100)
openpower/sv/biginteger.mdwn

index 5a054070f5039f88d9976436582a5ae5137e4bef..0da7909c2bbe77bf3755cc00320719ddf4e94400 100644 (file)
@@ -57,10 +57,7 @@ The pseudocode for `madded RT, RA, RB, RC` is:
     RT <- sum[64:127]
     RS <- sum[0:63] # RS implicit register, see below
 
-* In Scalar (non-SVP64) usage: `RS=RT+1`
-* For SVP64: RS may be either RC or RT+MAXVL
-
-RC is zero-extended (not shifted), the 128-bit product added
+RC is zero-extended (not shifted, not sign-extended), the 128-bit product added
 to it; the lower half of that result stored in RT and the upper half
 in RS.
 
@@ -118,7 +115,13 @@ RB, the divisor, remains 64 bit.  The instruction is therefore a 128/64
 division, producing a (pair) of 64 bit result(s).  Overflow conditions
 are detected in exactly the same fashion as `divdeu`, except that rather
 than have `UNDEFINED` behaviour, RT is set to all ones and RS set to all
-zeros.
+zeros on overflow.
+
+*Programmer's note: there are no Rc variants of any of these VA-Form
+instructions. `cmpi` will need to be used to detect overflow conditions:
+the saving in instruction count is that both RT and RS will have already
+been set to useful values needed as part of implementing Knuth's
+Algorithm D*
 
 For SVP64, given that this instruction is also 3-in 2-out 64-bit registers,
 the exact same EXTRA format and setting of RS is used as for `sv.madded`.
@@ -133,13 +136,10 @@ Pseudo-code:
         modulo <- dividend % divisor
         RT <- result[XLEN:(XLEN*2)-1]
         RS <- modulo[XLEN:(XLEN*2)-1]
-        overflow <- 0
     else
-        overflow <- 1
         RT <- [1]*XLEN
         RS <- [0]*XLEN
 
-
 # [DRAFT] EXT04 Proposed Map
 
 For the Opcode map (XO Field)