136 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #define CUT_INSTINIT
 | |
| 
 | |
| #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
 | |
| 
 | |
| #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
 | |
| 
 | |
| #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 \
 | |
|       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 \
 | |
|       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 \
 | |
|       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();
 | |
| 
 |