hunk ./gmp/config.mk.in 9 +GMP_INCLUDE_DIRS = @GMP_INCLUDE_DIRS@ +GMP_LIB_DIRS = @GMP_LIB_DIRS@ + + hunk ./gmp/ghc.mk 18 + +libraries/integer-gmp_CC_OPTS += $(addprefix -I,$(GMP_INCLUDE_DIRS)) +libraries/integer-gmp_CC_OPTS += $(addprefix -L,$(GMP_LIB_DIRS)) hunk ./gmp/ghc.mk 112 - cd libraries/integer-gmp/gmp && $(TAR) -jxf ../../../$(GMP_TARBALL) + cat $(GMP_TARBALL) | $(BZIP2) -d { cd libraries/integer-gmp/gmp && $(TAR) -xf - ; } hunk ./gmp/ghc.mk 112 - cat $(GMP_TARBALL) | $(BZIP2) -d { cd libraries/integer-gmp/gmp && $(TAR) -xf - ; } + cat $(GMP_TARBALL) | $(BZIP2) -d | { cd libraries/integer-gmp/gmp && $(TAR) -xf - ; } hunk ./gmp/ghc.mk 111 - $(RM) -rf $(GMP_DIR) libraries/integer-gmp/gmp/gmpbuild libraries/integer-gmp/gmp/objs + $(RM) -rf libraries/integer-gmp/gmp/$(GMP_DIR) libraries/integer-gmp/gmp/gmpbuild libraries/integer-gmp/gmp/objs hunk ./gmp/ghc.mk 119 - CC=$(WhatGccIsCalled) NM=$(NM) $(SHELL) configure \ + CC=$(WhatGccIsCalled) NM=$(NM) AR=$(AR) $(SHELL) configure \ hunk ./gmp/ghc.mk 125 -# XXX This should be $(AR), except that has the creation options baked in, -# so we use ar for now instead - cd libraries/integer-gmp/gmp/objs && ar x ../libgmp.a + cd libraries/integer-gmp/gmp/objs && $(AR) x ../libgmp.a hunk ./gmp/ghc.mk 112 - cat $(GMP_TARBALL) | $(BZIP2) -d | { cd libraries/integer-gmp/gmp && $(TAR) -xf - ; } + cat $(GMP_TARBALL) | $(BZIP2_CMD) -d | { cd libraries/integer-gmp/gmp && $(TAR_CMD) -xf - ; } hunk ./gmp/ghc.mk 139 -# $(TAR) -zxf $(GMP_TARBALL) +# $(TAR_CMD) -zxf $(GMP_TARBALL) hunk ./cbits/gmp-wrappers.cmm 70 - StgArrWords_words(p) = 1; + StgArrWords_bytes(p) = SIZEOF_W; hunk ./cbits/gmp-wrappers.cmm 104 - StgArrWords_words(p) = 1; + StgArrWords_bytes(p) = SIZEOF_W; hunk ./cbits/gmp-wrappers.cmm 151 - StgArrWords_words(p) = words_needed; + StgArrWords_bytes(p) = WDS(words_needed); hunk ./cbits/gmp-wrappers.cmm 206 - StgArrWords_words(p) = words_needed; + StgArrWords_bytes(p) = WDS(words_needed); hunk ./cbits/gmp-wrappers.cmm 251 - MP_INT__mp_alloc(mp_tmp1) = W_TO_INT(StgArrWords_words(d1)); \ + MP_INT__mp_alloc(mp_tmp1) = W_TO_INT(BYTE_ARR_WDS(d1)); \ hunk ./cbits/gmp-wrappers.cmm 254 - MP_INT__mp_alloc(mp_tmp2) = W_TO_INT(StgArrWords_words(d2)); \ + MP_INT__mp_alloc(mp_tmp2) = W_TO_INT(BYTE_ARR_WDS(d2)); \ hunk ./cbits/gmp-wrappers.cmm 287 - MP_INT__mp_alloc(mp_tmp) = W_TO_INT(StgArrWords_words(d1)); \ + MP_INT__mp_alloc(mp_tmp) = W_TO_INT(BYTE_ARR_WDS(d1)); \ hunk ./cbits/gmp-wrappers.cmm 318 - MP_INT__mp_alloc(mp_tmp1) = W_TO_INT(StgArrWords_words(d1)); \ + MP_INT__mp_alloc(mp_tmp1) = W_TO_INT(BYTE_ARR_WDS(d1)); \ hunk ./cbits/gmp-wrappers.cmm 355 - MP_INT__mp_alloc(mp_tmp1) = W_TO_INT(StgArrWords_words(d1)); \ + MP_INT__mp_alloc(mp_tmp1) = W_TO_INT(BYTE_ARR_WDS(d1)); \ hunk ./cbits/gmp-wrappers.cmm 358 - MP_INT__mp_alloc(mp_tmp2) = W_TO_INT(StgArrWords_words(d2)); \ + MP_INT__mp_alloc(mp_tmp2) = W_TO_INT(BYTE_ARR_WDS(d2)); \ hunk ./cbits/gmp-wrappers.cmm 574 - StgArrWords_words(p) = BYTES_TO_WDS(DOUBLE_MANTISSA_SIZE); + StgArrWords_bytes(p) = DOUBLE_MANTISSA_SIZE; hunk ./cbits/alloc.c 72 - data_size_in_words = (size_in_bytes + sizeof(W_) + 1) / sizeof(W_); + data_size_in_words = ROUNDUP_BYTES_TO_WDS(size_in_bytes); hunk ./cbits/alloc.c 77 - SET_ARR_HDR(arr, &stg_ARR_WORDS_info, CCCS, data_size_in_words); + SET_ARR_HDR(arr, &stg_ARR_WORDS_info, CCCS, size_in_bytes); hunk ./GHC/Integer.lhs 3 +{-# OPTIONS_HADDOCK hide #-} hunk ./gmp/ghc.mk 23 - "$(CC)" $(SRC_CC_OPTS) $(CONF_CC_OPTS) $(libraries/integer-gmp_CC_OPTS) $< -o $@ + "$(CC)" $(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE1) $(libraries/integer-gmp_CC_OPTS) $< -o $@ hunk ./GHC/Integer/GMP/Internals.hs 54 -import GHC.Prim (Int#, Word#, Double#, ByteArray#) +import GHC.Prim hunk ./GHC/Integer/GMP/Internals.hs 144 --- | --- -foreign import prim "integer_cmm_integer2Intzh" integer2Int# - :: Int# -> ByteArray# -> Int# - hunk ./GHC/Integer/GMP/Internals.hs 149 --- | --- -foreign import prim "integer_cmm_integer2Wordzh" integer2Word# - :: Int# -> ByteArray# -> Word# - hunk ./GHC/Integer/GMP/Internals.hs 192 + +-- used to be primops: +integer2Int# :: Int# -> ByteArray# -> Int# +integer2Int# s d = if s ==# 0# + then 0# + else let !v = indexIntArray# d 0# in + if s <# 0# + then negateInt# v + else v + +integer2Word# :: Int# -> ByteArray# -> Word# +integer2Word# s d = int2Word# (integer2Int# s d) hunk ./cbits/gmp-wrappers.cmm 512 -integer_cmm_integer2Intzh -{ - /* R1 = s; R2 = d */ - W_ r, s; - - s = R1; - if (s == 0) { - r = 0; - } else { - r = W_[R2 + SIZEOF_StgArrWords]; - if (%lt(s,0)) { - r = -r; - } - } - /* Result parked in R1, return via info-pointer at TOS */ - R1 = r; - jump %ENTRY_CODE(Sp(0)); -} - -integer_cmm_integer2Wordzh -{ - /* R1 = s; R2 = d */ - W_ r, s; - - s = R1; - if (s == 0) { - r = 0; - } else { - r = W_[R2 + SIZEOF_StgArrWords]; - if (%lt(s,0)) { - r = -r; - } - } - /* Result parked in R1, return via info-pointer at TOS */ - R1 = r; - jump %ENTRY_CODE(Sp(0)); -} - hunk ./GHC/Integer.lhs 57 - and#, or#, xor#, - indexIntArray#, + and#, or#, xor# hunk ./GHC/Integer.lhs 541 +-- | hashInteger returns the same value as 'fromIntegral', although in +-- unboxed form. It might be a reasonable hash function for 'Integer', +-- given a suitable distribution of 'Integer' values. + hunk ./GHC/Integer.lhs 546 -hashInteger (S# i) = i -hashInteger (J# s d) = if s ==# 0# - then 0# - else indexIntArray# d 0# +hashInteger = toInt# + hunk ./GHC/Integer/GMP/Internals.hs 57 -#if WORD_SIZE_IN_BITS < 64 -import GHC.Prim (Int64#, Word64#) -#endif -