/* -----------------------------------------------------------------------------
- * $Id: StgLongLong.c,v 1.4 1999/03/02 19:50:47 sof Exp $
+ * $Id: StgLongLong.c,v 1.5 2001/02/28 00:01:04 qrczak Exp $
*
* (c) The GHC Team, 1998-1999
*
#include "Rts.h"
#ifdef SUPPORT_LONG_LONGS
-StgInt
-stg_gtWord64(StgWord64 l1, StgWord64 l2)
-{ return ( l1 > l2); }
-StgInt
-stg_geWord64(StgWord64 l1, StgWord64 l2)
-{ return ( l1 >= l2); }
+/* Relational operators */
-StgInt
-stg_eqWord64(StgWord64 l1, StgWord64 l2)
-{ return ( l1 == l2); }
+StgBool stg_gtWord64 (StgWord64 a, StgWord64 b) {return a > b;}
+StgBool stg_geWord64 (StgWord64 a, StgWord64 b) {return a >= b;}
+StgBool stg_eqWord64 (StgWord64 a, StgWord64 b) {return a == b;}
+StgBool stg_neWord64 (StgWord64 a, StgWord64 b) {return a != b;}
+StgBool stg_ltWord64 (StgWord64 a, StgWord64 b) {return a < b;}
+StgBool stg_leWord64 (StgWord64 a, StgWord64 b) {return a <= b;}
-StgInt
-stg_neWord64(StgWord64 l1, StgWord64 l2)
-{ return ( l1 != l2); }
-
-StgInt
-stg_ltWord64(StgWord64 l1, StgWord64 l2)
-{ return ( l1 < l2); }
-
-StgInt
-stg_leWord64(StgWord64 l1, StgWord64 l2)
-{ return ( l1 <= l2); }
-
-/* ------------------ */
-
-StgInt
-stg_gtInt64(StgInt64 l1, StgInt64 l2)
-{ return ( l1 > l2); }
-
-StgInt
-stg_geInt64(StgInt64 l1, StgInt64 l2)
-{ return ( l1 >= l2); }
-
-StgInt
-stg_eqInt64(StgInt64 l1, StgInt64 l2)
-{ return ( l1 == l2); }
-
-StgInt
-stg_neInt64(StgInt64 l1, StgInt64 l2)
-{ return ( l1 != l2); }
-
-StgInt
-stg_ltInt64(StgInt64 l1, StgInt64 l2)
-{ return ( l1 < l2); }
-
-StgInt
-stg_leInt64(StgInt64 l1, StgInt64 l2)
-{ return ( l1 <= l2); }
+StgBool stg_gtInt64 (StgInt64 a, StgInt64 b) {return a > b;}
+StgBool stg_geInt64 (StgInt64 a, StgInt64 b) {return a >= b;}
+StgBool stg_eqInt64 (StgInt64 a, StgInt64 b) {return a == b;}
+StgBool stg_neInt64 (StgInt64 a, StgInt64 b) {return a != b;}
+StgBool stg_ltInt64 (StgInt64 a, StgInt64 b) {return a < b;}
+StgBool stg_leInt64 (StgInt64 a, StgInt64 b) {return a <= b;}
/* Arithmetic operators */
-StgWord64
-stg_remWord64(StgWord64 a, StgWord64 b)
-{ return (a%b); }
-
-StgWord64
-stg_quotWord64(StgWord64 a, StgWord64 b)
-{ return (a/b); }
-
-StgInt64
-stg_remInt64(StgInt64 a, StgInt64 b)
-{ return (a%b); }
-
-StgInt64
-stg_quotInt64(StgInt64 a, StgInt64 b)
-{ return (a/b); }
-
-StgInt64
-stg_negateInt64(StgInt64 a)
-{ return (-a); }
-
-StgInt64
-stg_plusInt64(StgInt64 a, StgInt64 b)
-{ return (a+b); }
-
-StgInt64
-stg_minusInt64(StgInt64 a, StgInt64 b)
-{ return (a-b); }
-
-StgInt64
-stg_timesInt64(StgInt64 a, StgInt64 b)
-{ return (a*b); }
+StgWord64 stg_remWord64 (StgWord64 a, StgWord64 b) {return a % b;}
+StgWord64 stg_quotWord64 (StgWord64 a, StgWord64 b) {return a / b;}
+StgInt64 stg_remInt64 (StgInt64 a, StgInt64 b) {return a % b;}
+StgInt64 stg_quotInt64 (StgInt64 a, StgInt64 b) {return a / b;}
+StgInt64 stg_negateInt64 (StgInt64 a) {return -a;}
+StgInt64 stg_plusInt64 (StgInt64 a, StgInt64 b) {return a + b;}
+StgInt64 stg_minusInt64 (StgInt64 a, StgInt64 b) {return a - b;}
+StgInt64 stg_timesInt64 (StgInt64 a, StgInt64 b) {return a * b;}
/* Logical operators: */
-StgWord64
-stg_and64(StgWord64 a, StgWord64 b)
-{ return (a&b); }
-
-StgWord64
-stg_or64(StgWord64 a, StgWord64 b)
-{ return (a|b); }
-
-StgWord64
-stg_xor64(StgWord64 a, StgWord64 b)
-{ return (a^b); }
-
-StgWord64
-stg_not64(StgWord64 a)
-{ return (~a); }
-
-StgWord64
-stg_shiftL64(StgWord64 a, StgInt b)
-{ return (a << b); }
-
-StgWord64
-stg_shiftRL64(StgWord64 a, StgInt b)
-{ return (a >> b); }
-
-StgInt64
-stg_iShiftL64(StgInt64 a, StgInt b)
-{ return ( a<<b ); }
-
+StgWord64 stg_and64 (StgWord64 a, StgWord64 b) {return a & b;}
+StgWord64 stg_or64 (StgWord64 a, StgWord64 b) {return a | b;}
+StgWord64 stg_xor64 (StgWord64 a, StgWord64 b) {return a ^ b;}
+StgWord64 stg_not64 (StgWord64 a) {return ~a;}
+StgWord64 stg_shiftL64 (StgWord64 a, StgInt b) {return a << b;}
+StgWord64 stg_shiftRL64 (StgWord64 a, StgInt b) {return a >> b;}
/* Right shifting of signed quantities is not portable in C, so
the behaviour you'll get from using these primops depends
on the whatever your C compiler is doing. ToDo: fix. -- sof 8/98
*/
-
-StgInt64
-stg_iShiftRA64(StgInt64 a, StgInt b)
-{ return ( a>>b ); }
-
-StgInt64
-stg_iShiftRL64(StgInt64 a, StgInt b)
-{ return ( a>>b ); }
-
-/*
-Casting between longs and longer longs:
-(the primops that cast from to/from Integers and long longs are
-expressed as macros, since these may cause some heap allocation).
+StgInt64 stg_iShiftL64 (StgInt64 a, StgInt b) {return a << b;}
+StgInt64 stg_iShiftRA64 (StgInt64 a, StgInt b) {return a >> b;}
+StgInt64 stg_iShiftRL64 (StgInt64 a, StgInt b)
+{return (StgInt64) ((StgWord64) a >> b);}
+
+/* Casting between longs and longer longs:
+ (the primops that cast between Integers and long longs are
+ expressed as macros, since these may cause some heap allocation).
*/
-StgInt64
-stg_intToInt64(StgInt i)
-{ return ( (StgInt64)i ); }
-
-StgInt
-stg_int64ToInt(StgInt64 i)
-{ return ( (StgInt)i ); }
-
-StgWord64
-stg_int64ToWord64(StgInt64 i)
-{ return ( (StgWord64)i ); }
-
-StgWord64
-stg_wordToWord64(StgWord w)
-{ return ( (StgWord64)w ); }
-
-StgWord
-stg_word64ToWord(StgWord64 w)
-{ return ( (StgWord)w ); }
-
-StgInt64
-stg_word64ToInt64(StgWord64 w)
-{ return ( (StgInt64)w ); }
+StgInt64 stg_intToInt64 (StgInt i) {return (StgInt64) i;}
+StgInt stg_int64ToInt (StgInt64 i) {return (StgInt) i;}
+StgWord64 stg_int64ToWord64 (StgInt64 i) {return (StgWord64) i;}
+StgWord64 stg_wordToWord64 (StgWord w) {return (StgWord64) w;}
+StgWord stg_word64ToWord (StgWord64 w) {return (StgWord) w;}
+StgInt64 stg_word64ToInt64 (StgWord64 w) {return (StgInt64) w;}
#endif /* SUPPORT_LONG_LONGS */