From: simonmar Date: Thu, 23 Mar 2000 09:32:13 +0000 (+0000) Subject: [project @ 2000-03-23 09:32:13 by simonmar] X-Git-Tag: Approximately_9120_patches~4925 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=e5af99b182f60288a0a9098e69ab9028f612c55e;p=ghc-hetmet.git [project @ 2000-03-23 09:32:13 by simonmar] Disable some of the special cases in remInteger and quotInteger, which turned out to be wrong. --- diff --git a/ghc/lib/std/PrelNum.lhs b/ghc/lib/std/PrelNum.lhs index be3abc8..9af9ffa 100644 --- a/ghc/lib/std/PrelNum.lhs +++ b/ghc/lib/std/PrelNum.lhs @@ -169,11 +169,15 @@ remInteger ia 0 = error "Prelude.Integral.rem{Integer}: divide by 0" remInteger a@(S# (-2147483648#)) b = remInteger (toBig a) b remInteger (S# a) (S# b) = S# (remInt# a b) +{- Special case doesn't work, because a 1-element J# has the range + -(2^32-1) -- 2^32-1, whereas S# has the range -2^31 -- (2^31-1) remInteger ia@(S# a) (J# sb b) | sb ==# 1# = S# (remInt# a (word2Int# (integer2Word# sb b))) | sb ==# -1# = S# (remInt# a (0# -# (word2Int# (integer2Word# sb b)))) | 0# <# sb = ia | otherwise = S# (0# -# a) +-} +remInteger ia@(S# _) ib@(J# _ _) = remInteger (toBig ia) ib remInteger (J# sa a) (S# b) = case int2Integer# b of { (# sb, b #) -> case remInteger# sa a sb b of { (# sr, r #) -> @@ -186,10 +190,13 @@ quotInteger ia 0 = error "Prelude.Integral.quot{Integer}: divide by 0" quotInteger a@(S# (-2147483648#)) b = quotInteger (toBig a) b quotInteger (S# a) (S# b) = S# (quotInt# a b) +{- Special case disabled, see remInteger above quotInteger (S# a) (J# sb b) | sb ==# 1# = S# (quotInt# a (word2Int# (integer2Word# sb b))) | sb ==# -1# = S# (quotInt# a (0# -# (word2Int# (integer2Word# sb b)))) | otherwise = zeroInteger +-} +quotInteger ia@(S# _) ib@(J# _ _) = quotInteger (toBig ia) ib quotInteger (J# sa a) (S# b) = case int2Integer# b of { (# sb, b #) -> case quotInteger# sa a sb b of (# sq, q #) -> J# sq q }