42#define SHIFT_HIGH_TAG 29
44#define MKTAG(HI,LO) ((((UInt) (HI))<<SHIFT_HIGH_TAG)|(LO))
46#define TagBits MKTAG(0x7,3)
47#define LowTagBits MKTAG(0x0,3)
48#define HighTagBits MKTAG(0x7,0)
49#define AdrHiBit (((UInt)1) << (SHIFT_HIGH_TAG-1))
50#define MaskAdr ((((UInt)1) << SHIFT_HIGH_TAG)-4)
51#define MaskPrim ((((UInt)1) << (SHIFT_HIGH_TAG))-4)
52#define NumberTag MKTAG(0x5,0)
53#define AtomTag MKTAG(0x4,0)
54#define PairTag MKTAG(0x4,1)
55#define ApplTag MKTAG(0x4,2)
56#define MAX_ABS_INT (1 << (SHIFT_HIGH_TAG-3))
59#define YAP_PROTECTED_MASK 0xe0000000L
66#define NonTagPart(X) (Signed(X) & MaskPrim)
67#define TAGGEDA(TAG,V) (TAG | Unsigned(V))
68#define TAGGED(TAG,V) (TAG | NonTagPart(Unsigned(V)<<2))
69#define NONTAGGED(TAG,V) NonTagPart(Unsigned(V)<<2)
70#define BitOn(Bit,V) (Bit & Unsigned(V))
71#define CHKTAG(t,Tag) ((Unsigned(t)&TagBits)==Tag)
73#include "inline-only.h"
74INLINE_ONLY EXTERN
int IsVarTerm (Term);
79 return (
int) (Signed (t) >= 0);
84INLINE_ONLY EXTERN
int IsNonVarTerm (Term);
89 return (
int) (Signed (t) < 0);
94INLINE_ONLY EXTERN Term *RepPair (Term);
96INLINE_ONLY EXTERN Term *
99 return (Term *) (NonTagPart (t));
104INLINE_ONLY EXTERN Term AbsPair (Term *);
106INLINE_ONLY EXTERN Term
109 return (Term) (TAGGEDA (PairTag, (p)));
114INLINE_ONLY EXTERN Int IsPairTerm (Term);
116INLINE_ONLY EXTERN Int
119 return (Int) (BitOn (PairBit, (t)));
124INLINE_ONLY EXTERN Term *RepAppl (Term);
126INLINE_ONLY EXTERN Term *
129 return (Term *) (NonTagPart (t));
134INLINE_ONLY EXTERN Term AbsAppl (Term *);
136INLINE_ONLY EXTERN Term
139 return (Term) (TAGGEDA (ApplTag, (p)));
144INLINE_ONLY EXTERN Int IsApplTerm (Term);
146INLINE_ONLY EXTERN Int
149 return (Int) (BitOn (ApplBit, (t)));
154INLINE_ONLY EXTERN
int IsAtomOrIntTerm (Term);
156INLINE_ONLY EXTERN
int
157IsAtomOrIntTerm (Term t)
159 return (
int) (((Unsigned (t) & LowTagBits) == 0));
165INLINE_ONLY EXTERN Term AdjustPtr (Term t, Term off);
167INLINE_ONLY EXTERN Term
168AdjustPtr (Term t, Term off)
170 return (Term) ((t) + off);
175INLINE_ONLY EXTERN Term AdjustIDBPtr (Term t, Term off);
177INLINE_ONLY EXTERN Term
178AdjustIDBPtr (Term t, Term off)
180 return (Term) ((t) + off);
186INLINE_ONLY EXTERN Int IntOfTerm (Term);
188INLINE_ONLY EXTERN Int
191 return (Int) (((Int) (t << 3)) >> (3 + 2));