commit cdec7e6b1b3d89ee484103b9dbc07dcd25f8b0af
parent 2814d79dbfacf3cb4de7b933e5f328ac07763b97
Author: Jared Tobin <jared@jtobin.io>
Date: Fri, 24 Jan 2025 14:52:33 +0400
lib: do more work in fill functions
Diffstat:
1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/lib/Data/Word/Extended.hs b/lib/Data/Word/Extended.hs
@@ -605,16 +605,14 @@ quotrem_gen
quotrem_gen u@(Word576 u0 u1 u2 u3 u4 u5 u6 u7 u8) d@(Word256 d0 d1 d2 d3) =
let !dlen = setlen_256 d
!shift = B.countLeadingZeros d3
- !dn_pre = fill256 (dlen - 1) shift
- !dn = set256 dn_pre 0 (d0 .<<. shift)
+ !dn = fill256 (dlen - 1) shift
!ulen = setlen_576 u
in if ulen < dlen
then Word832 zero576 (Word256 u0 u1 u2 u3)
else
let !u_ulen = sel576 u (ulen - 1)
!un_pre0 = set576 zero576 ulen (u_ulen .>>. (64 - shift))
- !un_pre1 = fill576 (ulen - 1) un_pre0 shift
- !un = set576 un_pre1 0 (u0 .<<. shift)
+ !un = fill576 (ulen - 1) un_pre0 shift
in if dlen == 1
then
let !dn_0 = sel256 dn 0
@@ -645,7 +643,7 @@ quotrem_gen u@(Word576 u0 u1 u2 u3 u4 u5 u6 u7 u8) d@(Word256 d0 d1 d2 d3) =
fill576
!start
- !tar@(Word576 tar0 _ tar2 tar3 tar4 tar5 tar6 tar7 tar8)
+ (Word576 _ tar1 tar2 tar3 tar4 tar5 tar6 tar7 tar8)
!s =
let v8 = (u8 .<<. s) .|. (u7 .>>. (64 - s))
v7 = (u7 .<<. s) .|. (u6 .>>. (64 - s))
@@ -656,15 +654,15 @@ quotrem_gen u@(Word576 u0 u1 u2 u3 u4 u5 u6 u7 u8) d@(Word256 d0 d1 d2 d3) =
v2 = (u2 .<<. s) .|. (u1 .>>. (64 - s))
v1 = (u1 .<<. s) .|. (u0 .>>. (64 - s))
in case start of
- 8 -> Word576 tar0 v1 v2 v3 v4 v5 v6 v7 v8
- 7 -> Word576 tar0 v1 v2 v3 v4 v5 v6 v7 tar8
- 6 -> Word576 tar0 v1 v2 v3 v4 v5 v6 tar7 tar8
- 5 -> Word576 tar0 v1 v2 v3 v4 v5 tar6 tar7 tar8
- 4 -> Word576 tar0 v1 v2 v3 v4 tar5 tar6 tar7 tar8
- 3 -> Word576 tar0 v1 v2 v3 tar4 tar5 tar6 tar7 tar8
- 2 -> Word576 tar0 v1 v2 tar3 tar4 tar5 tar6 tar7 tar8
- 1 -> Word576 tar0 v1 tar2 tar3 tar4 tar5 tar6 tar7 tar8
- 0 -> tar
+ 8 -> Word576 (u0 .<<. s) v1 v2 v3 v4 v5 v6 v7 v8
+ 7 -> Word576 (u0 .<<. s) v1 v2 v3 v4 v5 v6 v7 tar8
+ 6 -> Word576 (u0 .<<. s) v1 v2 v3 v4 v5 v6 tar7 tar8
+ 5 -> Word576 (u0 .<<. s) v1 v2 v3 v4 v5 tar6 tar7 tar8
+ 4 -> Word576 (u0 .<<. s) v1 v2 v3 v4 tar5 tar6 tar7 tar8
+ 3 -> Word576 (u0 .<<. s) v1 v2 v3 tar4 tar5 tar6 tar7 tar8
+ 2 -> Word576 (u0 .<<. s) v1 v2 tar3 tar4 tar5 tar6 tar7 tar8
+ 1 -> Word576 (u0 .<<. s) v1 tar2 tar3 tar4 tar5 tar6 tar7 tar8
+ 0 -> Word576 (u0 .<<. s) tar1 tar2 tar3 tar4 tar5 tar6 tar7 tar8
_ -> error "ppad-fixed (fill576): bad index"
fill256 !start !s =
@@ -672,10 +670,10 @@ quotrem_gen u@(Word576 u0 u1 u2 u3 u4 u5 u6 u7 u8) d@(Word256 d0 d1 d2 d3) =
v2 = (d2 .<<. s) .|. (d1 .>>. (64 - s))
v1 = (d1 .<<. s) .|. (d0 .>>. (64 - s))
in case start of
- 3 -> Word256 0 v1 v2 v3
- 2 -> Word256 0 v1 v2 0
- 1 -> Word256 0 v1 0 0
- 0 -> zero
+ 3 -> Word256 (d0 .<<. s) v1 v2 v3
+ 2 -> Word256 (d0 .<<. s) v1 v2 0
+ 1 -> Word256 (d0 .<<. s) v1 0 0
+ 0 -> Word256 (d0 .<<. s) 0 0 0
_ -> error "ppad-fixed (fill576): bad index"
setlen_256 :: Word256 -> Int