352 |
#define XUINT(a) ((EMACS_UINT) ((a) & VALMASK)) |
#define XUINT(a) ((EMACS_UINT) ((a) & VALMASK)) |
353 |
#endif |
#endif |
354 |
|
|
|
#ifndef XPNTR |
|
|
#ifdef HAVE_SHM |
|
|
/* In this representation, data is found in two widely separated segments. */ |
|
|
extern size_t pure_size; |
|
|
#define XPNTR(a) \ |
|
|
(XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS)) |
|
|
#else /* not HAVE_SHM */ |
|
|
#ifdef DATA_SEG_BITS |
|
|
/* This case is used for the rt-pc. |
|
|
In the diffs I was given, it checked for ptr = 0 |
|
|
and did not adjust it in that case. |
|
|
But I don't think that zero should ever be found |
|
|
in a Lisp object whose data type says it points to something. */ |
|
|
#define XPNTR(a) (XUINT (a) | DATA_SEG_BITS) |
|
|
#else |
|
|
#define XPNTR(a) XUINT (a) |
|
|
#endif |
|
|
#endif /* not HAVE_SHM */ |
|
|
#endif /* no XPNTR */ |
|
|
|
|
355 |
#ifndef XSET |
#ifndef XSET |
356 |
#define XSET(var, type, ptr) \ |
#define XSET(var, type, ptr) \ |
357 |
((var) = ((EMACS_INT)(type) << VALBITS) + ((EMACS_INT) (ptr) & VALMASK)) |
((var) = ((EMACS_INT)(type) << VALBITS) + ((EMACS_INT) (ptr) & VALMASK)) |
417 |
#endif /* EXPLICIT_SIGN_EXTEND */ |
#endif /* EXPLICIT_SIGN_EXTEND */ |
418 |
|
|
419 |
#define XUINT(a) ((a).u.val) |
#define XUINT(a) ((a).u.val) |
|
#define XPNTR(a) ((a).u.val) |
|
420 |
|
|
421 |
#define XSET(var, vartype, ptr) \ |
#define XSET(var, vartype, ptr) \ |
422 |
(((var).s.val = ((EMACS_INT) (ptr))), ((var).s.type = ((char) (vartype)))) |
(((var).s.val = ((EMACS_INT) (ptr))), ((var).s.type = ((char) (vartype)))) |
442 |
|
|
443 |
#endif /* NO_UNION_TYPE */ |
#endif /* NO_UNION_TYPE */ |
444 |
|
|
445 |
|
#ifndef XPNTR |
446 |
|
#ifdef HAVE_SHM |
447 |
|
/* In this representation, data is found in two widely separated segments. */ |
448 |
|
extern size_t pure_size; |
449 |
|
#define XPNTR(a) \ |
450 |
|
(XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS)) |
451 |
|
#else /* not HAVE_SHM */ |
452 |
|
#ifdef DATA_SEG_BITS |
453 |
|
/* This case is used for the rt-pc. |
454 |
|
In the diffs I was given, it checked for ptr = 0 |
455 |
|
and did not adjust it in that case. |
456 |
|
But I don't think that zero should ever be found |
457 |
|
in a Lisp object whose data type says it points to something. */ |
458 |
|
#define XPNTR(a) (XUINT (a) | DATA_SEG_BITS) |
459 |
|
#else |
460 |
|
#define XPNTR(a) XUINT (a) |
461 |
|
#endif |
462 |
|
#endif /* not HAVE_SHM */ |
463 |
|
#endif /* no XPNTR */ |
464 |
|
|
465 |
/* Largest and smallest representable fixnum values. These are the C |
/* Largest and smallest representable fixnum values. These are the C |
466 |
values. */ |
values. */ |
467 |
|
|