39#define SHIFT_HIGH_TAG 61
41#define MKTAG(HI,LO) ((((UInt) (HI))<<SHIFT_HIGH_TAG)|(LO))
43#define TagBits MKTAG(0x7,7)
44#define LowTagBits MKTAG(0x0,7)
45#define HighTagBits MKTAG(0x7,0)
46#define AdrHiBit (((UInt)1) << (SHIFT_HIGH_TAG-3))
47#define MaskPrim (((((UInt)1) << (SHIFT_HIGH_TAG-3))-1)<<3)
48#define NumberTag MKTAG(0x1,1)
49#define AtomTag MKTAG(0x0,1)
50#define MAX_ABS_INT ((((Int)1) << (63-(3+3)))<<3)
53#define YAP_PROTECTED_MASK 0xe000000000000000L
55#define UNIQUE_TAG_FOR_PAIRS 1
60#define PrimiBits MKTAG(0x7,7)
61#define NumberMask MKTAG(0x2,7)
63#define TagOf(t) (Unsigned(t)&TagBits)
64#define LowTagOf(t) (Unsigned(t)&LowTagBits)
65#define NonTagPart(X) (Signed(X) & MaskPrim)
66#define TAGGEDA(TAG,V) (Unsigned(TAG) | Unsigned(V))
67#define TAGGED(TAG,V) (Unsigned(TAG) | NonTagPart(Unsigned(V)<<3))
68#define NONTAGGED(TAG,V) NonTagPart(Unsigned(V)<<3)
69#define CHKTAG(t,Tag) ((Unsigned(t)&TagBits)==Tag)
71#include "inline-only.h"
72INLINE_ONLY
int IsVarTerm (Term);
77 return (
int) ((!((t) & 0x1)));
85 return (
int) (((t) & 0x1));
90INLINE_ONLY Term *RepPair (Term);
95 return (Term *) (((t) - PairBits));
100INLINE_ONLY Term AbsPair (Term *);
105 return (Term) (((CELL) (p) + PairBits));
110INLINE_ONLY Int IsPairTerm (Term);
115 return (Int) (((t) & 0x2));
120INLINE_ONLY Term *RepAppl (Term);
125 return (Term *) (((t) - ApplBits));
130INLINE_ONLY Term AbsAppl (Term *);
135 return (Term) (((CELL) (p) + ApplBits));
140INLINE_ONLY Int IsApplTerm (Term);
145 return (Int) ((((t) & 0x4)));
150INLINE_ONLY Int IsAtomOrIntTerm (Term);
153IsAtomOrIntTerm (Term t)
155 return (Int) ((((t) & LowTagBits) == 0x1));
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);
182INLINE_ONLY Int IntOfTerm (Term);
187 return (Int) ((Int) (Unsigned (t) << 3) >> 6);