From: sof Date: Fri, 7 May 1999 15:42:49 +0000 (+0000) Subject: [project @ 1999-05-07 15:42:49 by sof] X-Git-Tag: Approximately_9120_patches~6243 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=9f093c85145421a3f586fe17c2ec62b668471081 [project @ 1999-05-07 15:42:49 by sof] integer2Int# again: don't flip sign unless outside [minInt,maxInt] --- diff --git a/ghc/includes/PrimOps.h b/ghc/includes/PrimOps.h index c952cbf..9c3e259 100644 --- a/ghc/includes/PrimOps.h +++ b/ghc/includes/PrimOps.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: PrimOps.h,v 1.27 1999/05/04 08:58:18 sof Exp $ + * $Id: PrimOps.h,v 1.28 1999/05/07 15:42:49 sof Exp $ * * (c) The GHC Team, 1998-1999 * @@ -303,16 +303,23 @@ typedef union { /* We can do integer2Int and cmpInteger inline, since they don't need * to allocate any memory. + * + * integer2Int# is now modular. */ #define integer2Intzh(r, sa,da) \ { MP_INT arg; \ - \ + \ arg._mp_size = (sa); \ arg._mp_alloc = ((StgArrWords *)da)->words; \ arg._mp_d = (unsigned long int *) (BYTE_ARR_CTS(da)); \ \ - (r) = RET_PRIM_STGCALL1(I_,mpz_get_ui,&arg); \ + (r) = \ + ( arg._mp_size == 0 ) ? \ + 0 : \ + ( arg._mp_size < 0 && arg._mp_d[0] > 0x80000000 ) ? \ + -(I_)arg._mp_d[0] : \ + (I_)arg._mp_d[0]; \ } #define integer2Wordzh(r, sa,da) \