142 lines
3.5 KiB
C
142 lines
3.5 KiB
C
#define CUT_INSTINIT \
|
|
print_instruction((*_PREG), ON_NATIVE); \
|
|
|
|
#ifdef COROUTINING
|
|
#define CUT_COROUTINING \
|
|
if (FALSE) { \
|
|
NoStackCut_Exception; \
|
|
}
|
|
#endif
|
|
|
|
#define CUT_NOCOROUTINING \
|
|
SET_ASP(YREG, (*_PREG)->u.s.s); \
|
|
(*_PREG) = NEXTOP(NEXTOP(NEXTOP((*_PREG), s),Osbpp),l); \
|
|
saveregs(); \
|
|
prune((choiceptr)YREG[E_CB]); \
|
|
setregs(); \
|
|
GONext();
|
|
|
|
#define CUT_T_INSTINIT \
|
|
print_instruction((*_PREG), ON_NATIVE); \
|
|
|
|
#ifdef COROUTINING
|
|
#define CUT_T_COROUTINING \
|
|
if (FALSE) { \
|
|
NoStackCutT_Exception; \
|
|
}
|
|
#endif
|
|
|
|
#define CUT_T_NOCOROUTINING \
|
|
SET_ASP(YREG, (*_PREG)->u.s.s); \
|
|
saveregs(); \
|
|
prune((choiceptr)YREG[E_CB]); \
|
|
setregs(); \
|
|
(*_PREG) = NEXTOP(NEXTOP(NEXTOP((*_PREG), s),Osbpp),l); \
|
|
GONext();
|
|
|
|
#define CUT_E_INSTINIT \
|
|
print_instruction((*_PREG), ON_NATIVE); \
|
|
|
|
#ifdef COROUTINING
|
|
#define CUT_E_COROUTINING \
|
|
if (FALSE) { \
|
|
NoStackCutE_Exception; \
|
|
}
|
|
#endif
|
|
|
|
#define CUT_E_NOCOROUTINING \
|
|
SET_ASP(YREG, (*_PREG)->u.s.s); \
|
|
(*_PREG) = NEXTOP(NEXTOP(NEXTOP((*_PREG), s),Osbpp),l); \
|
|
saveregs(); \
|
|
prune((choiceptr)(*_SREG)[E_CB]); \
|
|
setregs(); \
|
|
GONext();
|
|
|
|
#define SAVE_B_X_INSTINIT \
|
|
print_instruction((*_PREG), ON_NATIVE); \
|
|
register CELL d0; \
|
|
d0 = (*_PREG)->u.x.x;
|
|
|
|
#if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
|
|
#define SAVE_B_X_YSBA_FROZEN \
|
|
XREG(d0) = MkIntegerTerm((Int)B);
|
|
#else
|
|
#define SAVE_B_X_NOYSBA_NOFROZEN \
|
|
XREG(d0) = MkIntegerTerm(LCL0-(CELL *) (B));
|
|
#endif
|
|
|
|
#define SAVE_B_X_END \
|
|
(*_PREG) = NEXTOP((*_PREG), x); \
|
|
GONext();
|
|
|
|
#define SAVE_B_Y_INSTINIT
|
|
|
|
#if defined(YAPOR_SBA)
|
|
#define SAVE_B_Y_YSBA \
|
|
INITIALIZE_PERMVAR(YREG+(*_PREG)->u.y.y,MkIntegerTerm((Int)B));
|
|
#else
|
|
#define SAVE_B_Y_NOYSBA \
|
|
INITIALIZE_PERMVAR(YREG+(*_PREG)->u.y.y,MkIntegerTerm(LCL0-(CELL *)(B)));
|
|
#endif
|
|
|
|
#define SAVE_B_Y_END \
|
|
(*_PREG) = NEXTOP((*_PREG), y); \
|
|
GONext();
|
|
|
|
#define COMMIT_B_X_INSTINIT \
|
|
print_instruction((*_PREG), ON_NATIVE); \
|
|
register CELL d0; \
|
|
register CELL *pt1;
|
|
|
|
#define COMMIT_B_X_DO_COMMIT_B_X \
|
|
d0 = XREG((*_PREG)->u.xps.x);
|
|
|
|
#define COMMIT_B_X_COMMIT_B_X_NVAR \
|
|
SET_ASP(YREG, (*_PREG)->u.xps.s); \
|
|
(*_PREG) = NEXTOP(NEXTOP(NEXTOP((*_PREG), xps),Osbpp),l); \
|
|
choiceptr pt0;
|
|
|
|
#if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
|
|
#define COMMIT_B_X_YSBA_FROZEN \
|
|
pt0 = (choiceptr)IntegerOfTerm(d0);
|
|
#else
|
|
#define COMMIT_B_X_NOYSBA_NOFROZEN \
|
|
pt0 = (choiceptr)(LCL0-IntegerOfTerm(d0));
|
|
#endif
|
|
|
|
#define COMMIT_B_X_POST_YSBA_FROZEN \
|
|
saveregs(); \
|
|
prune(pt0); \
|
|
setregs(); \
|
|
GONext();
|
|
|
|
#define COMMIT_B_X_END
|
|
|
|
#define COMMIT_B_Y_INSTINIT \
|
|
print_instruction((*_PREG), ON_NATIVE); \
|
|
register CELL d0; \
|
|
register CELL *pt1;
|
|
|
|
#define COMMIT_B_Y_DO_COMMIT_B_Y \
|
|
d0 = YREG[(*_PREG)->u.yps.y];
|
|
|
|
#define COMMIT_B_Y_COMMIT_B_Y_NVAR \
|
|
SET_ASP(YREG, (*_PREG)->u.yps.s); \
|
|
(*_PREG) = NEXTOP(NEXTOP(NEXTOP((*_PREG), yps),Osbpp),l); \
|
|
choiceptr pt0;
|
|
|
|
#if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
|
|
#define COMMIT_B_Y_YSBA_FROZEN \
|
|
pt0 = (choiceptr)IntegerOfTerm(d0);
|
|
#else
|
|
#define COMMIT_B_Y_NOYSBA_NOFROZEN \
|
|
pt0 = (choiceptr)(LCL0-IntegerOfTerm(d0));
|
|
#endif
|
|
|
|
#define COMMIT_B_Y_POST_YSBA_FROZEN \
|
|
saveregs(); \
|
|
prune(pt0); \
|
|
setregs(); \
|
|
GONext();
|
|
|