X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fruntime.h;h=0e8f623c112fa82e221e57e7c379a409e3ba5557;hb=94ac5b7c3ff37850210b6fc9a7593cf1c5752993;hp=6d0a39e39538b730a21a0ead53acfc92b2b8c6fc;hpb=6fb6e66f531dfb6140ec3e0cc8f84f6ecd1927ca;p=sbcl.git diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index 6d0a39e..0e8f623 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -38,15 +38,13 @@ #define N_LOWTAG_BITS 3 #define LOWTAG_MASK ((1<>N_TYPE_BITS)) +#define HeaderValue(obj) ((unsigned long) ((obj) >> N_WIDETAG_BITS)) #define CONS(obj) ((struct cons *)((obj)-LIST_POINTER_LOWTAG)) #define SYMBOL(obj) ((struct symbol *)((obj)-OTHER_POINTER_LOWTAG)) @@ -57,22 +55,24 @@ * that SBCL runs on as of 0.6.7. If we port to the Alpha or some * other non-32-bit machine we'll probably need real machine-dependent * and OS-dependent definitions again. */ -#if ((defined alpha) && !(defined __linux__)) -#error No u32,s32 definitions for this platform. Write some. -#else -/* int happens to be 4 bytes on linux/alpha. long is longer. */ +/* even on alpha, int happens to be 4 bytes. long is longer. */ typedef unsigned int u32; typedef signed int s32; #define LOW_WORD(c) ((long)(c) & 0xFFFFFFFFL) -#endif + typedef u32 lispobj; static inline int -lowtagof(lispobj obj) { +lowtag_of(lispobj obj) { return obj & LOWTAG_MASK; } +static inline int +widetag_of(lispobj obj) { + return obj & WIDETAG_MASK; +} + /* Is the Lisp object obj something with pointer nature (as opposed to * e.g. a fixnum or character or unbound marker)? */ static inline int