/************************************************************************* * * * YAP Prolog %W% %G% * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * * * ************************************************************************** * * * File: Tags_32LowTag.h.m4 * * Last rev: December 90 * * mods: * * comments: Original Tag Scheme for machines with 32 bits adresses * * version: $Id: Tags_32LowTag.h.m4,v 1.1.1.1 2001-04-09 19:53:46 vsc Exp $ * *************************************************************************/ #define TAG_LOW_BITS_32 1 /* Version for 32 bit addresses machines, Each term is represented internally as an unsigned 32 bit integer as follows: tag value ints m.....110 numeric value atoms m.....010 offset of atom entry pairs mr.....11 ptr to pair aplied functor mr.....01 ptr to functor followed by args ref mr.....00 address of cell undefined mr.....00 address of cell pointing to itself functors are represented as ptrs to the functor entry in the atom property list */ #define SHIFT_LOW_TAG 2 #define SHIFT_HIGH_TAG 2 #define MKTAG(HI,LO) ((((UInt) (HI))<>(SHIFT_LOW_TAG+SHIFT_HIGH_TAG)) #define TAGGED(TAG,V) (((Unsigned(V)<<(SHIFT_HIGH_TAG+SHIFT_LOW_TAG+1))>>1)|(TAG)) #define NONTAGGED(TAG,V) ((Unsigned(V)<<(SHIFT_HIGH_TAG+SHIFT_LOW_TAG+1))>>1) #define TAGGEDA(TAG,V) ((Unsigned(V) << (SHIFT_HIGH_TAG+SHIFT_LOW_TAG))|(TAG)) #define CHKTAG(t,Tag) ((Unsigned(t)&TagBits)==Tag) /* bits that should not be used by anyone but us */ #define YAP_PROTECTED_MASK 0xc0000000L Inline(IsVarTerm, int, Term, t, !((t) & LowTagBits)) Inline(IsNonVarTerm, int, Term, t, ((t) & LowTagBits)) Inline(RepPair, Term *, Term, t, (t)-PairBits) Inline(AbsPair, Term, Term *, p, Unsigned(p)+PairBits) Inline(IsPairTerm, Int, Term, t, (((t) & LowTagBits) == PairBits)) Inline(RepAppl, Term *, Term, t, ((t)-ApplBit)) Inline(AbsAppl, Term, Term *, p, Unsigned(p)+ApplBit) Inline(IsApplTerm, Int, Term, t, (((t) & LowTagBits) == ApplBit)) Inline(IsAtomOrIntTerm, Int, Term, t, (((t) & LowTagBits) == 2)) Inline2(AdjustPtr, Term, Term, t, Term, off, (t)+off) Inline2(AdjustIDBPtr, Term, Term, t, Term, off, (t)+off) Inline(IntOfTerm, Int, Term, t, ((Int)(t << 1))>>(SHIFT_LOW_TAG+SHIFT_HIGH_TAG+1))