--- src/lisp.h +++ src/lisp.h 2009-08-11 14:46:30.417901307 +0200 @@ -161,7 +161,7 @@ extern void die P_((const char *, const /* We also need to be able to specify mult-of-8 alignment on static vars. */ # if defined DECL_ALIGN /* We currently do not support USE_LSB_TAG with a union Lisp_Object. */ -# ifndef USE_LISP_UNION_TYPE +# if !defined(USE_LISP_UNION_TYPE) && !defined(__s390x__) # define USE_LSB_TAG # endif # endif @@ -381,11 +381,17 @@ enum pvec_type #define TYPEMASK ((((EMACS_INT) 1) << GCTYPEBITS) - 1) #define XTYPE(a) ((enum Lisp_Type) (((EMACS_UINT) (a)) & TYPEMASK)) +#ifndef XINT #define XINT(a) (((EMACS_INT) (a)) >> GCTYPEBITS) +#endif +#ifndef XUINT #define XUINT(a) (((EMACS_UINT) (a)) >> GCTYPEBITS) +#endif +#ifndef XSET #define XSET(var, type, ptr) \ (eassert (XTYPE (ptr) == 0), /* Check alignment. */ \ (var) = ((EMACS_INT) (type)) | ((EMACS_INT) (ptr))) +#endif #define make_number(N) (((EMACS_INT) (N)) << GCTYPEBITS) /* XFASTINT and XSETFASTINT are for use when the integer is known to be @@ -394,7 +400,9 @@ enum pvec_type #define XFASTINT(a) XINT (a) #define XSETFASTINT(a, b) ((a) = make_number (b)) +#ifndef XPNTR #define XPNTR(a) ((EMACS_INT) ((a) & ~TYPEMASK)) +#endif #else /* not USE_LSB_TAG */ @@ -452,16 +460,24 @@ enum pvec_type #ifdef EXPLICIT_SIGN_EXTEND /* Make sure we sign-extend; compilers have been known to fail to do so. */ +#ifndef XINT #define XINT(a) (((a).s.val << (BITS_PER_EMACS_INT - VALBITS)) \ >> (BITS_PER_EMACS_INT - VALBITS)) +#endif #else +#ifndef XINT #define XINT(a) ((a).s.val) +#endif #endif /* EXPLICIT_SIGN_EXTEND */ +#ifndef XUINT #define XUINT(a) ((a).u.val) +#endif +#ifndef XSET #define XSET(var, vartype, ptr) \ (((var).s.val = ((EMACS_INT) (ptr))), ((var).s.type = ((char) (vartype)))) +#endif #if __GNUC__ >= 2 && defined (__OPTIMIZE__) #define make_number(N) \ --- src/m/ibms390x.h +++ src/m/ibms390x.h 2009-08-11 14:47:06.625902091 +0200 @@ -78,7 +78,9 @@ NOTE-END */ working alloca function and it should be used. Undefine it if an assembler-language alloca in the file alloca.s should be used. */ +#ifndef HAVE_ALLOCA #define HAVE_ALLOCA +#endif /* On the 64 bit architecture, we can use 60 bits for addresses */