This commit was generated by cvs2svn to compensate for changes in r4,
which included commits to RCS files with non-trunk default branches. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@5 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
604
VC/include/sshift.h
Normal file
604
VC/include/sshift.h
Normal file
@@ -0,0 +1,604 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
* *
|
||||
* 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: sshift.h *
|
||||
* Last rev: 19/2/88 *
|
||||
* mods: *
|
||||
* comments: stack shifter functionality for YAP *
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
|
||||
/* The difference between the old stack pointers and the new ones */
|
||||
extern Int HDiff, GDiff, LDiff, TrDiff, XDiff, DelayDiff;
|
||||
|
||||
/* The old stack pointers */
|
||||
extern CELL *OldASP, *OldLCL0;
|
||||
extern tr_fr_ptr OldTR;
|
||||
extern CELL *OldGlobalBase, *OldH, *OldH0;
|
||||
extern ADDR OldTrailBase, OldTrailTop;
|
||||
extern ADDR OldHeapBase, OldHeapTop;
|
||||
|
||||
#define CharP(ptr) ((char *) (ptr))
|
||||
|
||||
|
||||
inline EXTERN int IsHeapP (CELL *);
|
||||
|
||||
inline EXTERN int
|
||||
IsHeapP (CELL * ptr)
|
||||
{
|
||||
return (int) ((ptr >= (CELL *) HeapBase && ptr <= (CELL *) HeapTop));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Adjusting cells and pointers to cells */
|
||||
|
||||
inline EXTERN CELL *PtoGloAdjust (CELL *);
|
||||
|
||||
inline EXTERN CELL *
|
||||
PtoGloAdjust (CELL * ptr)
|
||||
{
|
||||
return (CELL *) (((CELL *) (CharP (ptr) + GDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL *PtoDelayAdjust (CELL *);
|
||||
|
||||
inline EXTERN CELL *
|
||||
PtoDelayAdjust (CELL * ptr)
|
||||
{
|
||||
return (CELL *) (((CELL *) (CharP (ptr) + DelayDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN tr_fr_ptr PtoTRAdjust (tr_fr_ptr);
|
||||
|
||||
inline EXTERN tr_fr_ptr
|
||||
PtoTRAdjust (tr_fr_ptr ptr)
|
||||
{
|
||||
return (tr_fr_ptr) (((tr_fr_ptr) (CharP (ptr) + TrDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL *CellPtoTRAdjust (CELL *);
|
||||
|
||||
inline EXTERN CELL *
|
||||
CellPtoTRAdjust (CELL * ptr)
|
||||
{
|
||||
return (CELL *) (((CELL *) (CharP (ptr) + TrDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL *PtoLocAdjust (CELL *);
|
||||
|
||||
inline EXTERN CELL *
|
||||
PtoLocAdjust (CELL * ptr)
|
||||
{
|
||||
return (CELL *) (((CELL *) (CharP (ptr) + LDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN choiceptr ChoicePtrAdjust (choiceptr);
|
||||
|
||||
inline EXTERN choiceptr
|
||||
ChoicePtrAdjust (choiceptr ptr)
|
||||
{
|
||||
return (choiceptr) (((choiceptr) (CharP (ptr) + LDiff)));
|
||||
}
|
||||
|
||||
|
||||
#ifdef TABLING
|
||||
|
||||
inline EXTERN choiceptr ConsumerChoicePtrAdjust (choiceptr);
|
||||
|
||||
inline EXTERN choiceptr
|
||||
ConsumerChoicePtrAdjust (choiceptr ptr)
|
||||
{
|
||||
return (choiceptr) (((choiceptr) (CharP (ptr) + LDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN choiceptr GeneratorChoicePtrAdjust (choiceptr);
|
||||
|
||||
inline EXTERN choiceptr
|
||||
GeneratorChoicePtrAdjust (choiceptr ptr)
|
||||
{
|
||||
return (choiceptr) (((choiceptr) (CharP (ptr) + LDiff)));
|
||||
}
|
||||
|
||||
|
||||
#endif /* TABLING */
|
||||
|
||||
|
||||
inline EXTERN CELL GlobalAdjust (CELL);
|
||||
|
||||
inline EXTERN CELL
|
||||
GlobalAdjust (CELL val)
|
||||
{
|
||||
return (CELL) ((val + GDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL DelayAdjust (CELL);
|
||||
|
||||
inline EXTERN CELL
|
||||
DelayAdjust (CELL val)
|
||||
{
|
||||
return (CELL) ((val + DelayDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN ADDR GlobalAddrAdjust (ADDR);
|
||||
|
||||
inline EXTERN ADDR
|
||||
GlobalAddrAdjust (ADDR ptr)
|
||||
{
|
||||
return (ADDR) ((ptr + GDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN ADDR DelayAddrAdjust (ADDR);
|
||||
|
||||
inline EXTERN ADDR
|
||||
DelayAddrAdjust (ADDR ptr)
|
||||
{
|
||||
return (ADDR) ((ptr + DelayDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL LocalAdjust (CELL);
|
||||
|
||||
inline EXTERN CELL
|
||||
LocalAdjust (CELL val)
|
||||
{
|
||||
return (CELL) ((val + LDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN ADDR LocalAddrAdjust (ADDR);
|
||||
|
||||
inline EXTERN ADDR
|
||||
LocalAddrAdjust (ADDR ptr)
|
||||
{
|
||||
return (ADDR) ((ptr + LDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL TrailAdjust (CELL);
|
||||
|
||||
inline EXTERN CELL
|
||||
TrailAdjust (CELL val)
|
||||
{
|
||||
return (CELL) ((val + TrDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN ADDR TrailAddrAdjust (ADDR);
|
||||
|
||||
inline EXTERN ADDR
|
||||
TrailAddrAdjust (ADDR ptr)
|
||||
{
|
||||
return (ADDR) ((ptr + TrDiff));
|
||||
}
|
||||
|
||||
|
||||
/* heap data structures */
|
||||
|
||||
inline EXTERN Functor FuncAdjust (Functor);
|
||||
|
||||
inline EXTERN Functor
|
||||
FuncAdjust (Functor f)
|
||||
{
|
||||
return (Functor) ((Functor) (CharP (f) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL *CellPtoHeapAdjust (CELL *);
|
||||
|
||||
inline EXTERN CELL *
|
||||
CellPtoHeapAdjust (CELL * ptr)
|
||||
{
|
||||
return (CELL *) (((CELL *) (CharP (ptr) + HDiff)));
|
||||
}
|
||||
|
||||
|
||||
#if USE_OFFSETS
|
||||
|
||||
inline EXTERN Atom AtomAdjust (Atom);
|
||||
|
||||
inline EXTERN Atom
|
||||
AtomAdjust (Atom at)
|
||||
{
|
||||
return (Atom) ((at));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN Term AtomTermAdjust (Term);
|
||||
|
||||
inline EXTERN Term
|
||||
AtomTermAdjust (Term at)
|
||||
{
|
||||
return (Term) ((at));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN Prop PropAdjust (Prop);
|
||||
|
||||
inline EXTERN Prop
|
||||
PropAdjust (Prop p)
|
||||
{
|
||||
return (Prop) ((p));
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
inline EXTERN Atom AtomAdjust (Atom);
|
||||
|
||||
inline EXTERN Atom
|
||||
AtomAdjust (Atom at)
|
||||
{
|
||||
return (Atom) ((Atom) (CharP (at) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
#if MMAP_ADDR >= 0x40000000
|
||||
|
||||
inline EXTERN Term AtomTermAdjust (Term);
|
||||
|
||||
inline EXTERN Term
|
||||
AtomTermAdjust (Term at)
|
||||
{
|
||||
return (Term) ((at));
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
inline EXTERN Term AtomTermAdjust (Term);
|
||||
|
||||
inline EXTERN Term
|
||||
AtomTermAdjust (Term at)
|
||||
{
|
||||
return (Term) (MkAtomTerm ((Atom) (CharP (AtomOfTerm (at) + HDiff))));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
inline EXTERN Prop PropAdjust (Prop);
|
||||
|
||||
inline EXTERN Prop
|
||||
PropAdjust (Prop p)
|
||||
{
|
||||
return (Prop) ((Prop) (CharP (p) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#if TAGS_FAST_OPS
|
||||
|
||||
inline EXTERN Term BlobTermAdjust (Term);
|
||||
|
||||
inline EXTERN Term
|
||||
BlobTermAdjust (Term t)
|
||||
{
|
||||
return (Term) ((t - HDiff));
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
inline EXTERN Term BlobTermAdjust (Term);
|
||||
|
||||
inline EXTERN Term
|
||||
BlobTermAdjust (Term t)
|
||||
{
|
||||
return (Term) ((t + HDiff));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
inline EXTERN AtomEntry *AtomEntryAdjust (AtomEntry *);
|
||||
|
||||
inline EXTERN AtomEntry *
|
||||
AtomEntryAdjust (AtomEntry * at)
|
||||
{
|
||||
return (AtomEntry *) ((AtomEntry *) (CharP (at) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN consult_obj *ConsultObjAdjust (consult_obj *);
|
||||
|
||||
inline EXTERN consult_obj *
|
||||
ConsultObjAdjust (consult_obj * co)
|
||||
{
|
||||
return (consult_obj *) ((consult_obj *) (CharP (co) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN DBRef DBRefAdjust (DBRef);
|
||||
|
||||
inline EXTERN DBRef
|
||||
DBRefAdjust (DBRef dbr)
|
||||
{
|
||||
return (DBRef) ((DBRef) (CharP (dbr) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN Term CodeAdjust (Term);
|
||||
|
||||
inline EXTERN Term
|
||||
CodeAdjust (Term dbr)
|
||||
{
|
||||
return (Term) (((Term) (dbr) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN ADDR AddrAdjust (ADDR);
|
||||
|
||||
inline EXTERN ADDR
|
||||
AddrAdjust (ADDR addr)
|
||||
{
|
||||
return (ADDR) ((ADDR) (CharP (addr) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CODEADDR CodeAddrAdjust (CODEADDR);
|
||||
|
||||
inline EXTERN CODEADDR
|
||||
CodeAddrAdjust (CODEADDR addr)
|
||||
{
|
||||
return (CODEADDR) ((CODEADDR) (CharP (addr) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN BlockHeader *BlockAdjust (BlockHeader *);
|
||||
|
||||
inline EXTERN BlockHeader *
|
||||
BlockAdjust (BlockHeader * addr)
|
||||
{
|
||||
return (BlockHeader *) ((BlockHeader *) (CharP (addr) + HDiff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN yamop *PtoOpAdjust (yamop *);
|
||||
|
||||
inline EXTERN yamop *
|
||||
PtoOpAdjust (yamop * ptr)
|
||||
{
|
||||
return (yamop *) (((yamop *) (CharP (ptr) + HDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN CELL *PtoHeapCellAdjust (CELL *);
|
||||
|
||||
inline EXTERN CELL *
|
||||
PtoHeapCellAdjust (CELL * ptr)
|
||||
{
|
||||
return (CELL *) (((CELL *) (CharP (ptr) + HDiff)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN PredEntry *PtoPredAdjust (PredEntry *);
|
||||
|
||||
inline EXTERN PredEntry *
|
||||
PtoPredAdjust (PredEntry * ptr)
|
||||
{
|
||||
return (PredEntry *) (((CELL *) (CharP (ptr) + HDiff)));
|
||||
}
|
||||
|
||||
|
||||
#if PRECOMPUTE_REGADDRESS
|
||||
|
||||
inline EXTERN AREG XAdjust (AREG);
|
||||
|
||||
inline EXTERN AREG
|
||||
XAdjust (AREG reg)
|
||||
{
|
||||
return (AREG) ((AREG) ((reg) + XDiff));
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
inline EXTERN AREG XAdjust (AREG);
|
||||
|
||||
inline EXTERN AREG
|
||||
XAdjust (AREG reg)
|
||||
{
|
||||
return (AREG) ((reg));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
inline EXTERN YREG YAdjust (YREG);
|
||||
|
||||
inline EXTERN YREG
|
||||
YAdjust (YREG reg)
|
||||
{
|
||||
return (YREG) ((reg));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldLocal (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldLocal (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldASP, reg, OldLCL0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* require because the trail might contain dangling pointers */
|
||||
|
||||
inline EXTERN int IsOldLocalInTR (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldLocalInTR (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldH, reg, OldLCL0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldLocalInTRPtr (CELL *);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldLocalInTRPtr (CELL * ptr)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldH, ptr, OldLCL0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldH (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldH (CELL reg)
|
||||
{
|
||||
return (int) ((CharP (reg) == CharP (OldH)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldGlobal (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldGlobal (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldH0, reg, OldH));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldGlobalPtr (CELL *);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldGlobalPtr (CELL * ptr)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldH0, ptr, OldH));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldDelay (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldDelay (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldGlobalBase, reg, OldH0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldDelayPtr (CELL *);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldDelayPtr (CELL * ptr)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldGlobalBase, ptr, OldH0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldTrail (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldTrail (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldTrailBase, reg, OldTR));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldTrailPtr (CELL *);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldTrailPtr (CELL * ptr)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldTrailBase, ptr, OldTR));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldCode (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldCode (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldHeapBase, reg, OldHeapTop));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsOldCodeCellPtr (CELL *);
|
||||
|
||||
inline EXTERN int
|
||||
IsOldCodeCellPtr (CELL * ptr)
|
||||
{
|
||||
return (int) (IN_BETWEEN (OldHeapBase, ptr, OldHeapTop));
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline EXTERN int IsGlobal (CELL);
|
||||
|
||||
inline EXTERN int
|
||||
IsGlobal (CELL reg)
|
||||
{
|
||||
return (int) (IN_BETWEEN (GlobalBase, reg, H));
|
||||
}
|
||||
|
||||
|
||||
|
||||
void STD_PROTO (AdjustStacksAndTrail, (void));
|
||||
void STD_PROTO (AdjustRegs, (int));
|
Reference in New Issue
Block a user