Simplify (and robustify) regular PACKing
[sbcl.git] / src / runtime / runtime.h
index 4d7ab2e..fec8c77 100644 (file)
@@ -199,14 +199,25 @@ extern sigset_t blockable_sigset;
 /* even on alpha, int happens to be 4 bytes.  long is longer. */
 /* FIXME: these names really shouldn't reflect their length and this
    is not quite right for some of the FFI stuff */
+#if defined(LISP_FEATURE_WIN32)&&defined(LISP_FEATURE_X86_64)
+typedef unsigned long long u64;
+typedef signed long long s64;
+#else
 typedef unsigned long u64;
 typedef signed long s64;
+#endif
 typedef unsigned int u32;
 typedef signed int s32;
 
 /* this is an integral type the same length as a machine pointer */
 typedef uintptr_t pointer_sized_uint_t;
 
+#ifdef _WIN64
+#define AMD64_SYSV_ABI __attribute__((sysv_abi))
+#else
+#define AMD64_SYSV_ABI
+#endif
+
 #include <sys/types.h>
 
 #if defined(LISP_FEATURE_SB_THREAD)
@@ -243,7 +254,7 @@ widetag_of(lispobj obj)
     return obj & WIDETAG_MASK;
 }
 
-static inline unsigned long
+static inline uword_t
 HeaderValue(lispobj obj)
 {
   return obj >> N_WIDETAG_BITS;
@@ -312,12 +323,12 @@ make_lispobj(void *o, int low_tag)
 
 #define MAKE_FIXNUM(n) (n << N_FIXNUM_TAG_BITS)
 static inline lispobj
-make_fixnum(long n)
+make_fixnum(sword_t n)
 {
     return MAKE_FIXNUM(n);
 }
 
-static inline long
+static inline sword_t
 fixnum_value(lispobj n)
 {
     return n >> N_FIXNUM_TAG_BITS;