{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
module HaskellWorks.Data.BalancedParens.Internal.Broadword.FindUnmatchedCloseFar.Word64
( findUnmatchedCloseFar
) where
import Data.Int
import Data.Word
import HaskellWorks.Data.Bits.BitWise
import HaskellWorks.Data.Bits.Broadword.Word64
muk1 :: Word64
muk1 :: Word64
muk1 = Word64
0x3333333333333333
{-# INLINE muk1 #-}
muk2 :: Word64
muk2 :: Word64
muk2 = Word64
0x0f0f0f0f0f0f0f0f
{-# INLINE muk2 #-}
muk3 :: Word64
muk3 :: Word64
muk3 = Word64
0x00ff00ff00ff00ff
{-# INLINE muk3 #-}
muk4 :: Word64
muk4 :: Word64
muk4 = Word64
0x0000ffff0000ffff
{-# INLINE muk4 #-}
muk5 :: Word64
muk5 :: Word64
muk5 = Word64
0x00000000ffffffff
{-# INLINE muk5 #-}
findUnmatchedCloseFar :: Word64 -> Word64 -> Word64 -> Word64
findUnmatchedCloseFar :: Word64 -> Word64 -> Word64 -> Word64
findUnmatchedCloseFar Word64
c Word64
p Word64
w =
let x :: Word64
x = Word64
w forall a. Shift a => a -> Word64 -> a
.>. Word64
p in
let wsz :: Int64
wsz = Int64
64 :: Int64 in
let k1 :: Word64
k1 = Word64
1 in
let k2 :: Word64
k2 = Word64
2 in
let k3 :: Word64
k3 = Word64
3 in
let k4 :: Word64
k4 = Word64
4 in
let k5 :: Word64
k5 = Word64
5 in
let k6 :: Word64
k6 = Word64
6 in
let mask1 :: Word64
mask1 = (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mask2 :: Word64
mask2 = (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k2)) forall a. Num a => a -> a -> a
- Word64
1 in
let mask3 :: Word64
mask3 = (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k3)) forall a. Num a => a -> a -> a
- Word64
1 in
let mask4 :: Word64
mask4 = (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k4)) forall a. Num a => a -> a -> a
- Word64
1 in
let mask5 :: Word64
mask5 = (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k5)) forall a. Num a => a -> a -> a
- Word64
1 in
let mask6 :: Word64
mask6 = (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. (Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k6)) forall a. Num a => a -> a -> a
- Word64
1 in
let t64k1 :: Word64
t64k1 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k1 :: Word64 in
let t64k2 :: Word64
t64k2 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k2 :: Word64 in
let t64k3 :: Word64
t64k3 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k3 :: Word64 in
let t64k4 :: Word64
t64k4 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k4 :: Word64 in
let t64k5 :: Word64
t64k5 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k5 :: Word64 in
let t8k1 :: Word64
t8k1 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k1 :: Word64 in
let t8k2 :: Word64
t8k2 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k2 :: Word64 in
let t8k3 :: Word64
t8k3 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k3 :: Word64 in
let t8k4 :: Word64
t8k4 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k4 :: Word64 in
let t8k5 :: Word64
t8k5 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k5 :: Word64 in
let t8k6 :: Word64
t8k6 = Word64
1 forall a. Shift a => a -> Word64 -> a
.<. Word64
k6 :: Word64 in
let b0 :: Word64
b0 = Word64
x forall a. BitWise a => a -> a -> a
.&. Word64
0x5555555555555555 in
let b1 :: Word64
b1 = ( Word64
x forall a. BitWise a => a -> a -> a
.&. Word64
0xaaaaaaaaaaaaaaaa) forall a. Shift a => a -> Word64 -> a
.>. Word64
1 in
let ll :: Word64
ll = (Word64
b0 forall a. BitWise a => a -> a -> a
.^. Word64
b1 ) forall a. BitWise a => a -> a -> a
.&. Word64
b1 in
let ok1 :: Word64
ok1 = ( (Word64
b0 forall a. BitWise a => a -> a -> a
.&. Word64
b1 ) forall a. Shift a => a -> Word64 -> a
.<. Word64
1) forall a. BitWise a => a -> a -> a
.|. Word64
ll in
let ck1 :: Word64
ck1 = (((Word64
b0 forall a. BitWise a => a -> a -> a
.|. Word64
b1 ) forall a. BitWise a => a -> a -> a
.^. Word64
0x5555555555555555) forall a. Shift a => a -> Word64 -> a
.<. Word64
1) forall a. BitWise a => a -> a -> a
.|. Word64
ll in
let eok1 :: Word64
eok1 = Word64
ok1 forall a. BitWise a => a -> a -> a
.&. Word64
muk1 in
let eck1 :: Word64
eck1 = (Word64
ck1 forall a. BitWise a => a -> a -> a
.&. (Word64
muk1 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k1)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k1 in
let ok2L :: Word64
ok2L = (Word64
ok1 forall a. BitWise a => a -> a -> a
.&. (Word64
muk1 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k1)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k1 in
let ok2R :: Word64
ok2R = Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
4 Word64
eok1 Word64
eck1 in
let ok2 :: Word64
ok2 = Word64
ok2L forall a. Num a => a -> a -> a
+ Word64
ok2R in
let ck2 :: Word64
ck2 = (Word64
ck1 forall a. BitWise a => a -> a -> a
.&. Word64
muk1) forall a. Num a => a -> a -> a
+ Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
4 Word64
eck1 Word64
eok1 in
let eok2 :: Word64
eok2 = Word64
ok2 forall a. BitWise a => a -> a -> a
.&. Word64
muk2 in
let eck2 :: Word64
eck2 = (Word64
ck2 forall a. BitWise a => a -> a -> a
.&. (Word64
muk2 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k2)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k2 in
let ok3L :: Word64
ok3L = (Word64
ok2 forall a. BitWise a => a -> a -> a
.&. (Word64
muk2 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k2)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k2 in
let ok3R :: Word64
ok3R = Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
8 Word64
eok2 Word64
eck2 in
let ok3 :: Word64
ok3 = Word64
ok3L forall a. Num a => a -> a -> a
+ Word64
ok3R in
let ck3 :: Word64
ck3 = (Word64
ck2 forall a. BitWise a => a -> a -> a
.&. Word64
muk2) forall a. Num a => a -> a -> a
+ Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
8 Word64
eck2 Word64
eok2 in
let eok3 :: Word64
eok3 = Word64
ok3 forall a. BitWise a => a -> a -> a
.&. Word64
muk3 in
let eck3 :: Word64
eck3 = (Word64
ck3 forall a. BitWise a => a -> a -> a
.&. (Word64
muk3 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k3)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k3 in
let ok4L :: Word64
ok4L = (Word64
ok3 forall a. BitWise a => a -> a -> a
.&. (Word64
muk3 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k3)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k3 in
let ok4R :: Word64
ok4R = Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
16 Word64
eok3 Word64
eck3 in
let ok4 :: Word64
ok4 = Word64
ok4L forall a. Num a => a -> a -> a
+ Word64
ok4R in
let ck4 :: Word64
ck4 = (Word64
ck3 forall a. BitWise a => a -> a -> a
.&. Word64
muk3) forall a. Num a => a -> a -> a
+ Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
16 Word64
eck3 Word64
eok3 in
let eok4 :: Word64
eok4 = Word64
ok4 forall a. BitWise a => a -> a -> a
.&. Word64
muk4 in
let eck4 :: Word64
eck4 = (Word64
ck4 forall a. BitWise a => a -> a -> a
.&. (Word64
muk4 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k4)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k4 in
let ok5L :: Word64
ok5L = (Word64
ok4 forall a. BitWise a => a -> a -> a
.&. (Word64
muk4 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k4)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k4 in
let ok5R :: Word64
ok5R = Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
32 Word64
eok4 Word64
eck4 in
let ok5 :: Word64
ok5 = Word64
ok5L forall a. Num a => a -> a -> a
+ Word64
ok5R in
let ck5 :: Word64
ck5 = (Word64
ck4 forall a. BitWise a => a -> a -> a
.&. Word64
muk4) forall a. Num a => a -> a -> a
+ Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
32 Word64
eck4 Word64
eok4 in
let eok5 :: Word64
eok5 = Word64
ok5 forall a. BitWise a => a -> a -> a
.&. Word64
muk5 in
let eck5 :: Word64
eck5 = (Word64
ck5 forall a. BitWise a => a -> a -> a
.&. (Word64
muk5 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k5)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k5 in
let ok6L :: Word64
ok6L = (Word64
ok5 forall a. BitWise a => a -> a -> a
.&. (Word64
muk5 forall a. Shift a => a -> Word64 -> a
.<. Word64
t64k5)) forall a. Shift a => a -> Word64 -> a
.>. Word64
t64k5 in
let ok6R :: Word64
ok6R = Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
32 Word64
eok5 Word64
eck5 in
let ok6 :: Word64
ok6 = Word64
ok6L forall a. Num a => a -> a -> a
+ Word64
ok6R in
let ck6 :: Word64
ck6 = (Word64
ck5 forall a. BitWise a => a -> a -> a
.&. Word64
muk5) forall a. Num a => a -> a -> a
+ Int -> Word64 -> Word64 -> Word64
kBitDiffPos Int
32 Word64
eck5 Word64
eok5 in
let qak6 :: Word64
qak6 = Word64
c in
let sak6 :: Word64
sak6 = Word64
0 in
let hk6 :: Word64
hk6 = Word64
0x0000004000000040 forall a. BitWise a => a -> a -> a
.&. forall a. BitWise a => a -> a
comp (Word64
0xffffffffffffffff forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak6) in
let fk6 :: Word64
fk6 = ((Word64
ck6 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak6) forall a. BitWise a => a -> a -> a
.|. Word64
hk6) forall a. BitWise a => a -> a -> a
.&. Word64
mask6 in
let bk6 :: Word64
bk6 = ((Word64
qak6 forall a. Num a => a -> a -> a
- Word64
fk6) forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int64
wsz forall a. Num a => a -> a -> a
- Int64
1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mk6 :: Word64
mk6 = Word64
bk6 forall a. BitWise a => a -> a -> a
.&. Word64
mask6 in
let pbk6 :: Word64
pbk6 = Word64
qak6 forall a. Num a => a -> a -> a
- ((Word64
ck6 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak6) forall a. BitWise a => a -> a -> a
.&. Word64
mk6) in
let pck6 :: Word64
pck6 = Word64
pbk6 forall a. Num a => a -> a -> a
+ ((Word64
ok6 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak6) forall a. BitWise a => a -> a -> a
.&. Word64
mk6) in
let sbk6 :: Word64
sbk6 = Word64
sak6 forall a. Num a => a -> a -> a
+ (Word64
t8k6 forall a. BitWise a => a -> a -> a
.&. Word64
bk6) in
let qak5 :: Word64
qak5 = Word64
pck6 in
let sak5 :: Word64
sak5 = Word64
sbk6 in
let hk5 :: Word64
hk5 = Word64
0x0000002000000020 forall a. BitWise a => a -> a -> a
.&. forall a. BitWise a => a -> a
comp (Word64
0xffffffffffffffff forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak5) in
let fk5 :: Word64
fk5 = ((Word64
ck5 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak5) forall a. BitWise a => a -> a -> a
.|. Word64
hk5) forall a. BitWise a => a -> a -> a
.&. Word64
mask5 in
let bk5 :: Word64
bk5 = ((Word64
qak5 forall a. Num a => a -> a -> a
- Word64
fk5) forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int64
wsz forall a. Num a => a -> a -> a
- Int64
1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mk5 :: Word64
mk5 = Word64
bk5 forall a. BitWise a => a -> a -> a
.&. Word64
mask5 in
let pbk5 :: Word64
pbk5 = Word64
qak5 forall a. Num a => a -> a -> a
- (((Word64
ck5 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak5) forall a. BitWise a => a -> a -> a
.|. Word64
hk5) forall a. BitWise a => a -> a -> a
.&. Word64
mk5) in
let pck5 :: Word64
pck5 = Word64
pbk5 forall a. Num a => a -> a -> a
+ ( (Word64
ok5 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak5) forall a. BitWise a => a -> a -> a
.&. Word64
mk5) in
let sbk5 :: Word64
sbk5 = Word64
sak5 forall a. Num a => a -> a -> a
+ (Word64
t8k5 forall a. BitWise a => a -> a -> a
.&. Word64
bk5) in
let qak4 :: Word64
qak4 = Word64
pck5 in
let sak4 :: Word64
sak4 = Word64
sbk5 in
let hk4 :: Word64
hk4 = Word64
0x0010001000100010 forall a. BitWise a => a -> a -> a
.&. forall a. BitWise a => a -> a
comp (Word64
0xffffffffffffffff forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak4) in
let fk4 :: Word64
fk4 = ((Word64
ck4 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak4) forall a. BitWise a => a -> a -> a
.|. Word64
hk4) forall a. BitWise a => a -> a -> a
.&. Word64
mask4 in
let bk4 :: Word64
bk4 = ((Word64
qak4 forall a. Num a => a -> a -> a
- Word64
fk4) forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int64
wsz forall a. Num a => a -> a -> a
- Int64
1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mk4 :: Word64
mk4 = Word64
bk4 forall a. BitWise a => a -> a -> a
.&. Word64
mask4 in
let pbk4 :: Word64
pbk4 = Word64
qak4 forall a. Num a => a -> a -> a
- (((Word64
ck4 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak4) forall a. BitWise a => a -> a -> a
.|. Word64
hk4) forall a. BitWise a => a -> a -> a
.&. Word64
mk4) in
let pck4 :: Word64
pck4 = Word64
pbk4 forall a. Num a => a -> a -> a
+ ( (Word64
ok4 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak4) forall a. BitWise a => a -> a -> a
.&. Word64
mk4) in
let sbk4 :: Word64
sbk4 = Word64
sak4 forall a. Num a => a -> a -> a
+ (Word64
t8k4 forall a. BitWise a => a -> a -> a
.&. Word64
bk4) in
let qak3 :: Word64
qak3 = Word64
pck4 in
let sak3 :: Word64
sak3 = Word64
sbk4 in
let hk3 :: Word64
hk3 = Word64
0x0808080808080808 forall a. BitWise a => a -> a -> a
.&. forall a. BitWise a => a -> a
comp (Word64
0xffffffffffffffff forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak3) in
let fk3 :: Word64
fk3 = ((Word64
ck3 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak3) forall a. BitWise a => a -> a -> a
.|. Word64
hk3) forall a. BitWise a => a -> a -> a
.&. Word64
mask3 in
let bk3 :: Word64
bk3 = ((Word64
qak3 forall a. Num a => a -> a -> a
- Word64
fk3) forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int64
wsz forall a. Num a => a -> a -> a
- Int64
1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mk3 :: Word64
mk3 = Word64
bk3 forall a. BitWise a => a -> a -> a
.&. Word64
mask3 in
let pbk3 :: Word64
pbk3 = Word64
qak3 forall a. Num a => a -> a -> a
- (((Word64
ck3 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak3) forall a. BitWise a => a -> a -> a
.|. Word64
hk3) forall a. BitWise a => a -> a -> a
.&. Word64
mk3) in
let pck3 :: Word64
pck3 = Word64
pbk3 forall a. Num a => a -> a -> a
+ ( (Word64
ok3 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak3) forall a. BitWise a => a -> a -> a
.&. Word64
mk3) in
let sbk3 :: Word64
sbk3 = Word64
sak3 forall a. Num a => a -> a -> a
+ (Word64
t8k3 forall a. BitWise a => a -> a -> a
.&. Word64
bk3) in
let qak2 :: Word64
qak2 = Word64
pck3 in
let sak2 :: Word64
sak2 = Word64
sbk3 in
let hk2 :: Word64
hk2 = Word64
0x4444444444444444 forall a. BitWise a => a -> a -> a
.&. forall a. BitWise a => a -> a
comp (Word64
0xffffffffffffffff forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak2) in
let fk2 :: Word64
fk2 = ((Word64
ck2 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak2) forall a. BitWise a => a -> a -> a
.|. Word64
hk2) forall a. BitWise a => a -> a -> a
.&. Word64
mask2 in
let bk2 :: Word64
bk2 = ((Word64
qak2 forall a. Num a => a -> a -> a
- Word64
fk2) forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int64
wsz forall a. Num a => a -> a -> a
- Int64
1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mk2 :: Word64
mk2 = Word64
bk2 forall a. BitWise a => a -> a -> a
.&. Word64
mask2 in
let pbk2 :: Word64
pbk2 = Word64
qak2 forall a. Num a => a -> a -> a
- (((Word64
ck2 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak2) forall a. BitWise a => a -> a -> a
.|. Word64
hk2) forall a. BitWise a => a -> a -> a
.&. Word64
mk2) in
let pck2 :: Word64
pck2 = Word64
pbk2 forall a. Num a => a -> a -> a
+ ( (Word64
ok2 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak2) forall a. BitWise a => a -> a -> a
.&. Word64
mk2) in
let sbk2 :: Word64
sbk2 = Word64
sak2 forall a. Num a => a -> a -> a
+ (Word64
t8k2 forall a. BitWise a => a -> a -> a
.&. Word64
bk2) in
let qak1 :: Word64
qak1 = Word64
pck2 in
let sak1 :: Word64
sak1 = Word64
sbk2 in
let hk1 :: Word64
hk1 = Word64
0xaaaaaaaaaaaaaaaa forall a. BitWise a => a -> a -> a
.&. forall a. BitWise a => a -> a
comp (Word64
0xffffffffffffffff forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak1) in
let fk1 :: Word64
fk1 = ((Word64
ck1 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak1) forall a. BitWise a => a -> a -> a
.|. Word64
hk1) forall a. BitWise a => a -> a -> a
.&. Word64
mask1 in
let bk1 :: Word64
bk1 = ((Word64
qak1 forall a. Num a => a -> a -> a
- Word64
fk1) forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int64
wsz forall a. Num a => a -> a -> a
- Int64
1)) forall a. Num a => a -> a -> a
- Word64
1 in
let mk1 :: Word64
mk1 = Word64
bk1 forall a. BitWise a => a -> a -> a
.&. Word64
mask1 in
let pbk1 :: Word64
pbk1 = Word64
qak1 forall a. Num a => a -> a -> a
- (((Word64
ck1 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak1) forall a. BitWise a => a -> a -> a
.|. Word64
hk1) forall a. BitWise a => a -> a -> a
.&. Word64
mk1) in
let pck1 :: Word64
pck1 = Word64
pbk1 forall a. Num a => a -> a -> a
+ ( (Word64
ok1 forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sak1) forall a. BitWise a => a -> a -> a
.&. Word64
mk1) in
let sbk1 :: Word64
sbk1 = Word64
sak1 forall a. Num a => a -> a -> a
+ (Word64
t8k1 forall a. BitWise a => a -> a -> a
.&. Word64
bk1) in
let rrr :: Word64
rrr = Word64
sbk1 forall a. Num a => a -> a -> a
+ Word64
pck1 forall a. Num a => a -> a -> a
+ (((Word64
x forall a. Shift a => a -> Word64 -> a
.>. forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
sbk1) forall a. BitWise a => a -> a -> a
.&. ((Word64
pck1 forall a. Shift a => a -> Word64 -> a
.<. Word64
1) forall a. BitWise a => a -> a -> a
.|. Word64
1)) forall a. Shift a => a -> Word64 -> a
.<. Word64
1) in
Word64
rrr forall a. Num a => a -> a -> a
+ Word64
p
{-# INLINE findUnmatchedCloseFar #-}