summaryrefslogtreecommitdiff
path: root/libraries/integer-gmp
diff options
context:
space:
mode:
authorHerbert Valerio Riedel <hvr@gnu.org>2016-03-11 10:39:30 +0100
committerBen Gamari <ben@smart-cactus.org>2016-03-11 13:20:18 +0100
commitf8056fca87e83fd37d3f2441f5cb0335e12e3aef (patch)
treef7915363f17f535bc036c13fad98346571d8c1dc /libraries/integer-gmp
parenta74a3846c84ad55de3deeed8b2401a2ed514b2e1 (diff)
downloadhaskell-f8056fca87e83fd37d3f2441f5cb0335e12e3aef.tar.gz
Make integer-gmp operations more strict
Reviewers: austin, goldfire, bgamari Reviewed By: bgamari Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D1984 GHC Trac Issues: #10691
Diffstat (limited to 'libraries/integer-gmp')
-rw-r--r--libraries/integer-gmp/src/GHC/Integer/Type.hs18
1 files changed, 9 insertions, 9 deletions
diff --git a/libraries/integer-gmp/src/GHC/Integer/Type.hs b/libraries/integer-gmp/src/GHC/Integer/Type.hs
index 3e563dc5a5..9ed17fc1b1 100644
--- a/libraries/integer-gmp/src/GHC/Integer/Type.hs
+++ b/libraries/integer-gmp/src/GHC/Integer/Type.hs
@@ -426,7 +426,7 @@ minusInteger x y = inline plusInteger x (inline negateInteger y)
-- | Multiply two 'Integer's
timesInteger :: Integer -> Integer -> Integer
-timesInteger _ (S# 0#) = S# 0#
+timesInteger !_ (S# 0#) = S# 0#
timesInteger (S# 0#) _ = S# 0#
timesInteger x (S# 1#) = x
timesInteger (S# 1#) y = y
@@ -515,7 +515,7 @@ bitInteger i#
-- | Test if /n/-th bit is set.
testBitInteger :: Integer -> Int# -> Bool
-testBitInteger _ n# | isTrue# (n# <# 0#) = False
+testBitInteger !_ n# | isTrue# (n# <# 0#) = False
testBitInteger (S# i#) n#
| isTrue# (n# <# GMP_LIMB_BITS#) = isTrue# (((uncheckedIShiftL# 1# n#)
`andI#` i#) /=# 0#)
@@ -614,7 +614,7 @@ xorInteger x y {- S# -} = xorInteger x (unsafePromote y)
-- | Bitwise AND operation
andInteger :: Integer -> Integer -> Integer
-- short-cuts
-andInteger (S# 0#) _ = S# 0#
+andInteger (S# 0#) !_ = S# 0#
andInteger _ (S# 0#) = S# 0#
andInteger (S# -1#) y = y
andInteger x (S# -1#) = x
@@ -646,7 +646,7 @@ unsafePromote x = x
quotRemInteger :: Integer -> Integer -> (# Integer, Integer #)
quotRemInteger n (S# 1#) = (# n, S# 0# #)
quotRemInteger n (S# -1#) = let !q = negateInteger n in (# q, (S# 0#) #)
-quotRemInteger _ (S# 0#) = (# S# (quotInt# 0# 0#),S# (remInt# 0# 0#) #)
+quotRemInteger !_ (S# 0#) = (# S# (quotInt# 0# 0#),S# (remInt# 0# 0#) #)
quotRemInteger (S# 0#) _ = (# S# 0#, S# 0# #)
quotRemInteger (S# n#) (S# d#) = case quotRemInt# n# d# of
(# q#, r# #) -> (# S# q#, S# r# #)
@@ -679,7 +679,7 @@ quotRemInteger n@(S# n#) (Jp# d) -- need to account for (S# minBound)
quotInteger :: Integer -> Integer -> Integer
quotInteger n (S# 1#) = n
quotInteger n (S# -1#) = negateInteger n
-quotInteger _ (S# 0#) = S# (quotInt# 0# 0#)
+quotInteger !_ (S# 0#) = S# (quotInt# 0# 0#)
quotInteger (S# 0#) _ = S# 0#
quotInteger (S# n#) (S# d#) = S# (quotInt# n# d#)
quotInteger (Jp# n) (S# d#)
@@ -699,7 +699,7 @@ quotInteger n d = case inline quotRemInteger n d of (# q, _ #) -> q
{-# CONSTANT_FOLDED quotInteger #-}
remInteger :: Integer -> Integer -> Integer
-remInteger _ (S# 1#) = S# 0#
+remInteger !_ (S# 1#) = S# 0#
remInteger _ (S# -1#) = S# 0#
remInteger _ (S# 0#) = S# (remInt# 0# 0#)
remInteger (S# 0#) _ = S# 0#
@@ -763,7 +763,7 @@ gcdInteger (Jp# a) (S# b#)
-- | Compute least common multiple.
lcmInteger :: Integer -> Integer -> Integer
-lcmInteger (S# 0#) _ = S# 0#
+lcmInteger (S# 0#) !_ = S# 0#
lcmInteger (S# 1#) b = absInteger b
lcmInteger (S# -1#) b = absInteger b
lcmInteger _ (S# 0#) = S# 0#
@@ -998,7 +998,7 @@ sqrBigNat x
sqrBigNat x = timesBigNat x x -- TODO: mpn_sqr
timesBigNatWord :: BigNat -> GmpLimb# -> BigNat
-timesBigNatWord _ 0## = zeroBigNat
+timesBigNatWord !_ 0## = zeroBigNat
timesBigNatWord x 1## = x
timesBigNatWord x@(BN# x#) y#
| isTrue# (nx# ==# 1#) =
@@ -1231,7 +1231,7 @@ remBigNat n@(BN# nba#) d@(BN# dba#)
-- | Note: Result of div/0 undefined
quotRemBigNatWord :: BigNat -> GmpLimb# -> (# BigNat, GmpLimb# #)
-quotRemBigNatWord _ 0## = (# nullBigNat, 0## #)
+quotRemBigNatWord !_ 0## = (# nullBigNat, 0## #)
quotRemBigNatWord n 1## = (# n, 0## #)
quotRemBigNatWord n@(BN# nba#) d# = case compareBigNatWord n d# of
LT -> (# zeroBigNat, bigNatToWord n #)