37#define AllTagBits 0xfc000000L
38#define TagBits 0xbc000000L
39#define MaskAdr 0x03ffffffL
40#define AdrHiBit 0x02000000L
41#define NumberTag 0xa0000000L
42#define FloatTag 0xa4000000L
43#define AtomTag 0x84000000L
44#define PairTag 0x90000000L
45#define ApplTag 0x88000000L
46#define RefTag 0x80000000L
50#define PairBit 0x10000000L
51#define ApplBit 0x08000000L
52#define CompBits 0x18000000L
53#define NumberMask 0xb8000000L
54#define MAX_ABS_INT ((((UInt)(1<<7))-1) << SHIFT_HIGH_TAG)
56#define TagOf(X) (Unsigned(X) & TagBits)
57#define LowTagOf(X) (Unsigned(X) & TagBits)
58#define NonTagPart(X) (Signed(X) & MaskAdr)
59#define TAGGEDA(TAG,V) (TAG | Unsigned(V))
60#define TAGGED(TAG,V) (TAG | NonTagPart(Unsigned(V)))
61#define NONTAGGED(TAG,V) NonTagPart(Unsigned(V))
62#define BitOn(Bit,V) (Bit & Unsigned(V))
63#define CHKTAG(t,Tag) ((Unsigned(t)&TagBits)==Tag)
66#define YAP_PROTECTED_MASK 0x00000000L
68#include "inline-only.h"
70INLINE_ONLY
bool IsVarTerm (Term);
75 return Signed (t) >= 0;
80INLINE_ONLY
bool IsNonVarTerm (Term);
85 return Signed (t) < 0;
90INLINE_ONLY Term *RepPair (Term);
95 return (Term *) (NonTagPart (t));
100INLINE_ONLY Term AbsPair (Term *);
105 return (Term) (TAGGEDA (PairTag, (p)));
110INLINE_ONLY
bool IsPairTerm (Term);
115 return BitOn (PairBit, (t));
120INLINE_ONLY Term *RepAppl (Term);
125 return (Term *) (NonTagPart (t));
130INLINE_ONLY Term AbsAppl (Term *);
135 return (Term) (TAGGEDA (ApplTag, (p)));
140INLINE_ONLY
bool IsApplTerm (Term);
145 return BitOn (ApplBit, (t));
150INLINE_ONLY
bool IsAtomOrIntTerm (Term);
153IsAtomOrIntTerm (Term t)
155 return !(Unsigned (t) & CompBits);
161INLINE_ONLY Term AdjustPtr (Term t, Term off);
164AdjustPtr (Term t, Term off)
166 return (Term) ((t) + off);
171INLINE_ONLY Term AdjustIDBPtr (Term t, Term off);
174AdjustIDBPtr (Term t, Term off)
176 return (Term) ((t) + off);
185 n = (Unsigned (t) & MaskPrim) >> 2;
187 if (Unsigned (t) & AdrHiBit)