X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FBits.hs;h=52cbfb6aca76b137099fd1885d20e3798ba14a08;hb=f7a485978f04e84b086f1974b88887cc72d832d0;hp=8a37e82bd9798d7d8f76ee97f43675c475573654;hpb=7f1f4e7a695c402ddd3a1dc2cc7114e649a78ebc;p=ghc-base.git diff --git a/Data/Bits.hs b/Data/Bits.hs index 8a37e82..52cbfb6 100644 --- a/Data/Bits.hs +++ b/Data/Bits.hs @@ -1,15 +1,13 @@ {-# OPTIONS -fno-implicit-prelude #-} ----------------------------------------------------------------------------- --- +-- | -- Module : Data.Bits -- Copyright : (c) The University of Glasgow 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org -- Stability : experimental --- Portability : non-portable --- --- $Id: Bits.hs,v 1.1 2001/06/28 14:15:02 simonmar Exp $ +-- Portability : portable -- -- Bitwise operations. -- @@ -50,7 +48,7 @@ import GHC.Base -- Removing all fixities is a fairly safe fix; fixing the "one fixity -- per symbol per program" limitation in Hugs would take a lot longer. #ifndef __HUGS__ -infixl 8 `shift`, `rotate` +infixl 8 `shift`, `rotate`, `shiftL`, `shiftR`, `rotateL`, `rotateR` infixl 7 .&. infixl 6 `xor` infixl 5 .|. @@ -92,20 +90,13 @@ instance Bits Int where | i# >=# 0# = I# (x# `iShiftL#` i#) | otherwise = I# (x# `iShiftRA#` negateInt# i#) (I# x#) `rotate` (I# i#) = -#if WORD_SIZE_IN_BYTES == 4 - I# (word2Int# ((x'# `shiftL#` i'#) `or#` - (x'# `shiftRL#` (32# -# i'#)))) - where - x'# = int2Word# x# - i'# = word2Int# (int2Word# i# `and#` int2Word# 31#) -#else I# (word2Int# ((x'# `shiftL#` i'#) `or#` - (x'# `shiftRL#` (64# -# i'#)))) + (x'# `shiftRL#` (wsib -# i'#)))) where x'# = int2Word# x# - i'# = word2Int# (int2Word# i# `and#` int2Word# 63#) -#endif - bitSize _ = WORD_SIZE_IN_BYTES * 8 + i'# = word2Int# (int2Word# i# `and#` int2Word# (wsib -# 1#)) + wsib = WORD_SIZE_IN_BITS# {- work around preprocessor problem (??) -} + bitSize _ = WORD_SIZE_IN_BITS isSigned _ = True instance Bits Integer where