17#if SIZEOF_INT_P==4 && USE_LOW32_TAGS
19#define TAG_LOW_BITS_32 1
37#define SHIFT_LOW_TAG 2
38#define SHIFT_HIGH_TAG 2
40#define MKTAG(HI,LO) ((((UInt) (HI))<<SHIFT_HIGH_TAG)|(LO))
42#define TagBits MKTAG(0x1,3)
43#define LowTagBits MKTAG(0x0,3)
44#define LowBit MKTAG(0x0,1)
45#define HighTagBits MKTAG(0x1,0)
46#define NumberTag MKTAG(0x1,2)
47#define AtomTag MKTAG(0x0,2)
53#define MAX_ABS_INT ((Int)0x04000000L)
62#define UNIQUE_TAG_FOR_PAIRS 1
64#define PairBits MKTAG(0x0,3)
65#define ApplBit MKTAG(0x0,1)
66#define PrimiBits MKTAG(0x0,2)
67#define NumberBits MKTAG(0x2,2)
68#define NumberMask MKTAG(0x2,3)
70#define TagOf(V) (Unsigned(V) & LowTagBits)
71#define LowTagOf(V) (Unsigned(V) & LowTagBits)
72#define NonTagPart(V) ((Unsigned(V)>>1) & ~LowTagBits)
73#define TAGGED(TAG,V) (((Unsigned(V)<<(SHIFT_HIGH_TAG+SHIFT_LOW_TAG+1))>>1)|(TAG))
74#define NONTAGGED(TAG,V) ((Unsigned(V)<<(SHIFT_HIGH_TAG+SHIFT_LOW_TAG+1))>>1)
75#define TAGGEDA(TAG,V) ((Unsigned(V) << 1)|(TAG))
76#define CHKTAG(t,Tag) ((Unsigned(t)&TagBits)==Tag)
79#define YAP_PROTECTED_MASK 0xc0000000L
81#include "inline-only.h"
82INLINE_ONLY EXTERN
int IsVarTerm (Term);
87 return (
int) (!((t) & LowTagBits));
92INLINE_ONLY EXTERN
int IsNonVarTerm (Term);
97 return (
int) (((t) & LowTagBits));
102INLINE_ONLY EXTERN Term *RepPair (Term);
104INLINE_ONLY EXTERN Term *
107 return (Term *) ((t) - PairBits);
112INLINE_ONLY EXTERN Term AbsPair (Term *);
114INLINE_ONLY EXTERN Term
117 return (Term) (Unsigned (p) + PairBits);
122INLINE_ONLY EXTERN Int IsPairTerm (Term);
124INLINE_ONLY EXTERN Int
127 return (Int) ((((t) & LowTagBits) == PairBits));
132INLINE_ONLY EXTERN Term *RepAppl (Term);
134INLINE_ONLY EXTERN Term *
137 return (Term *) (((t) - ApplBit));
142INLINE_ONLY EXTERN Term AbsAppl (Term *);
144INLINE_ONLY EXTERN Term
147 return (Term) (Unsigned (p) + ApplBit);
152INLINE_ONLY EXTERN Int IsApplTerm (Term);
154INLINE_ONLY EXTERN Int
157 return (Int) ((((t) & LowTagBits) == ApplBit));
162INLINE_ONLY EXTERN Int IsAtomOrIntTerm (Term);
164INLINE_ONLY EXTERN Int
165IsAtomOrIntTerm (Term t)
167 return (Int) ((((t) & LowTagBits) == 2));
173INLINE_ONLY EXTERN Term AdjustPtr (Term t, Term off);
175INLINE_ONLY EXTERN Term
176AdjustPtr (Term t, Term off)
178 return (Term) ((t) + off);
183INLINE_ONLY EXTERN Term AdjustIDBPtr (Term t, Term off);
185INLINE_ONLY EXTERN Term
186AdjustIDBPtr (Term t, Term off)
188 return (Term) ((t) + off);
194INLINE_ONLY EXTERN Int IntOfTerm (Term);
196INLINE_ONLY EXTERN Int
199 return (Int) (((Int) (t << 1)) >> (SHIFT_LOW_TAG + SHIFT_HIGH_TAG + 1));