862 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			862 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#define GET_X_VAR_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      register CELL d0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xr); \
							 | 
						||
| 
								 | 
							
								      XREG((*_PREG)->u.xx.xl) = d0; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAR_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      register CELL d0; \
							 | 
						||
| 
								 | 
							
								      register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      pt0 = YREG + (*_PREG)->u.yx.y; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.yx.x); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      INITIALIZE_PERMVAR(pt0,d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_YY_VAR_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
								      register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      CACHE_Y(YREG); \
							 | 
						||
| 
								 | 
							
								      pt0 = S_YREG + (*_PREG)->u.yyxx.y1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.yyxx.x1); \
							 | 
						||
| 
								 | 
							
								      pt1 = S_YREG + (*_PREG)->u.yyx.y2; \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.yyxx.x2); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yyxx); \
							 | 
						||
| 
								 | 
							
								      INITIALIZE_PERMVAR(pt0,d0); \
							 | 
						||
| 
								 | 
							
								      INITIALIZE_PERMVAR(pt1,d1); \
							 | 
						||
| 
								 | 
							
								      ENDCACHE_Y(); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xl);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_GVALX_NONVAR \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.xx.xr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_GVALX_NONVAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_X_VAL_GVALX_NONVAR_NONVAR; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_GVALX_NONVAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_GVALX_UNK \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.xx.xr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_GVALX_VAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_X_VAL_GVALX_VAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      UnifyCells(pt0, pt1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      pt0 = YREG + (*_PREG)->u.yx.y; \
							 | 
						||
| 
								 | 
							
								      d0 = *pt0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_GVALY_NONVAR \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.yx.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_GVALY_NONVAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_Y_VAL_GVALY_NONVAR_NONVAR; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_GVALY_NONVAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt1, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_GVALY_UNK \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.yx.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_GVALY_VAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_Y_VAL_GVALY_VAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      UnifyCells(pt0, pt1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_ATOM_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xc.x); \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.xc.c;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_ATOM_GATOM_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_ATOM_GATOM_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (d0 == d1) { \
							 | 
						||
| 
								 | 
							
									(*_PREG) = NEXTOP((*_PREG), xc); \
							 | 
						||
| 
								 | 
							
									GONext(); \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_ATOM_GATOM_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xc); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_2ATOMS_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = ARG1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_2ATOMS_GATOM_2UNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cc.c1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_2ATOMS_GATOM_2B \
							 | 
						||
| 
								 | 
							
								      d0 = ARG2; \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.cc.c2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_2ATOMS_GATOM_2BNONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_2ATOMS_GATOM_2BNONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (d0 == d1) { \
							 | 
						||
| 
								 | 
							
									(*_PREG) = NEXTOP((*_PREG), cc); \
							 | 
						||
| 
								 | 
							
									GONext(); \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_2ATOMS_GATOM_2BUNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), cc); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = ARG1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_GATOM_3UNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.ccc.c1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_GATOM_3B \
							 | 
						||
| 
								 | 
							
								      d0 = ARG2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_GATOM_3BUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.ccc.c2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_GATOM_3C \
							 | 
						||
| 
								 | 
							
								      d0 = ARG3; \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.ccc.c3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_GATOM_3CNONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_3ATOMS_GATOM_3CNONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (d0 == d1) { \
							 | 
						||
| 
								 | 
							
									(*_PREG) = NEXTOP((*_PREG), ccc); \
							 | 
						||
| 
								 | 
							
									GONext(); \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_3ATOMS_GATOM_3CUNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), ccc); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = ARG1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4UNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccc.c1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4B \
							 | 
						||
| 
								 | 
							
								      d0 = ARG2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4BUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccc.c2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4C \
							 | 
						||
| 
								 | 
							
								      d0 = ARG3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4CUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccc.c3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4D \
							 | 
						||
| 
								 | 
							
								      d0 = ARG4; \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.cccc.c4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4DNONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_4ATOMS_GATOM_4DNONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (d0 == d1) { \
							 | 
						||
| 
								 | 
							
									(*_PREG) = NEXTOP((*_PREG), cccc); \
							 | 
						||
| 
								 | 
							
									GONext(); \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_4ATOMS_GATOM_4DUNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), cccc); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = ARG1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5UNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.ccccc.c1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5B \
							 | 
						||
| 
								 | 
							
								      d0 = ARG2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5BUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.ccccc.c2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5C \
							 | 
						||
| 
								 | 
							
								      d0 = ARG3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5CUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.ccccc.c3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5D \
							 | 
						||
| 
								 | 
							
								      d0 = ARG4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5DUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.ccccc.c4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5E \
							 | 
						||
| 
								 | 
							
								      d0 = ARG5; \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.ccccc.c5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5ENONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_5ATOMS_GATOM_5ENONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (d0 == d1) { \
							 | 
						||
| 
								 | 
							
									(*_PREG) = NEXTOP((*_PREG), ccccc); \
							 | 
						||
| 
								 | 
							
									GONext(); \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_5ATOMS_GATOM_5EUNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), ccccc); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = ARG1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6UNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccccc.c1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6B \
							 | 
						||
| 
								 | 
							
								      d0 = ARG2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6BUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccccc.c2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6C \
							 | 
						||
| 
								 | 
							
								      d0 = ARG3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6CUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccccc.c3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6D \
							 | 
						||
| 
								 | 
							
								      d0 = ARG4;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6DUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccccc.c4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6E \
							 | 
						||
| 
								 | 
							
								      d0 = ARG5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6EUNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, (*_PREG)->u.cccccc.c5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6F \
							 | 
						||
| 
								 | 
							
								      d0 = ARG6; \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.cccccc.c6;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6FNONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_6ATOMS_GATOM_6FNONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (d0 == d1) { \
							 | 
						||
| 
								 | 
							
									(*_PREG) = NEXTOP((*_PREG), cccccc); \
							 | 
						||
| 
								 | 
							
									GONext(); \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_6ATOMS_GATOM_6FUNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), cccccc); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_LIST_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.x.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_LIST_GLIST_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_LIST_GLIST_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									    YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        (*_PREG) = NEXTOP((*_PREG), x); \
							 | 
						||
| 
								 | 
							
								        (*_SREG) = RepPair(d0); \
							 | 
						||
| 
								 | 
							
								        GONext(); \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_LIST_GLIST_UNK \
							 | 
						||
| 
								 | 
							
								      CACHE_S(); \
							 | 
						||
| 
								 | 
							
								      S_SREG = HR; \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH_W(x); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), x); \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(S_SREG); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      S_SREG = HR; \
							 | 
						||
| 
								 | 
							
								      HR = S_SREG + 2; \
							 | 
						||
| 
								 | 
							
								      WRITEBACK_S(S_SREG); \
							 | 
						||
| 
								 | 
							
								      GONextW(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH_W(); \
							 | 
						||
| 
								 | 
							
								      ENDCACHE_S();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_STRUCT_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xfa.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_STRUCT_GSTRUCT_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_STRUCT_GSTRUCT_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsApplTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        register CELL * S_SREG; \
							 | 
						||
| 
								 | 
							
								        S_SREG = RepAppl(d0); \
							 | 
						||
| 
								 | 
							
								        d0 = (CELL) ((*_PREG)->u.xfa.f); \
							 | 
						||
| 
								 | 
							
								        if (*S_SREG != d0) { \
							 | 
						||
| 
								 | 
							
									  YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								        } \
							 | 
						||
| 
								 | 
							
										else { \
							 | 
						||
| 
								 | 
							
								          WRITEBACK_S(S_SREG+1); \
							 | 
						||
| 
								 | 
							
								          (*_PREG) = NEXTOP((*_PREG), xfa); \
							 | 
						||
| 
								 | 
							
								          GONext(); \
							 | 
						||
| 
								 | 
							
										} \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_STRUCT_GSTRUCT_UNK \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH_W(xfa); \
							 | 
						||
| 
								 | 
							
								      d1 = AbsAppl(HR); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      pt0 = HR; \
							 | 
						||
| 
								 | 
							
								      d0 = (CELL) ((*_PREG)->u.xfa.f); \
							 | 
						||
| 
								 | 
							
								      *pt0++ = d0; \
							 | 
						||
| 
								 | 
							
								      HR = pt0 + (*_PREG)->u.xfa.a; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xfa); \
							 | 
						||
| 
								 | 
							
								      (*_SREG) = pt0; \
							 | 
						||
| 
								 | 
							
								      GONextW(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH_W();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_FLOAT_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xd.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
							 | 
						||
| 
								 | 
							
								#define GET_FLOAT_GFLOAT_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_FLOAT_GFLOAT_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsApplTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        pt0 = RepAppl(d0); \
							 | 
						||
| 
								 | 
							
								        if (*pt0 != (CELL)FunctorDouble) { \
							 | 
						||
| 
								 | 
							
									  YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								        } \
							 | 
						||
| 
								 | 
							
										else { \
							 | 
						||
| 
								 | 
							
								          pt1 = (*_PREG)->u.xd.d; \
							 | 
						||
| 
								 | 
							
								          (*_PREG) = NEXTOP((*_PREG), xd); \
							 | 
						||
| 
								 | 
							
								          if ( \
							 | 
						||
| 
								 | 
							
									      pt1[1] != pt0[1] \
							 | 
						||
| 
								 | 
							
										  || pt1[2] != pt0[2] \
							 | 
						||
| 
								 | 
							
									      ) { \
							 | 
						||
| 
								 | 
							
									        YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									        } \
							 | 
						||
| 
								 | 
							
										  else { \
							 | 
						||
| 
								 | 
							
								            GONext(); \
							 | 
						||
| 
								 | 
							
										  } \
							 | 
						||
| 
								 | 
							
										} \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								#else /* SIZEOF_DOUBLE == 2*SIZEOF_INT_P */
							 | 
						||
| 
								 | 
							
								#define GET_FLOAT_GFLOAT_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_FLOAT_GFLOAT_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsApplTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        pt0 = RepAppl(d0); \
							 | 
						||
| 
								 | 
							
								        if (*pt0 != (CELL)FunctorDouble) { \
							 | 
						||
| 
								 | 
							
									  YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								        } \
							 | 
						||
| 
								 | 
							
										else { \
							 | 
						||
| 
								 | 
							
								          pt1 = (*_PREG)->u.xd.d; \
							 | 
						||
| 
								 | 
							
								          (*_PREG) = NEXTOP((*_PREG), xd); \
							 | 
						||
| 
								 | 
							
								          if ( \
							 | 
						||
| 
								 | 
							
									      pt1[1] != pt0[1] \
							 | 
						||
| 
								 | 
							
									      ) { \
							 | 
						||
| 
								 | 
							
									        YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									        } \
							 | 
						||
| 
								 | 
							
										  else { \
							 | 
						||
| 
								 | 
							
								            GONext(); \
							 | 
						||
| 
								 | 
							
										  } \
							 | 
						||
| 
								 | 
							
										} \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								#endif /* SIZEOF_DOUBLE == 2*SIZEOF_INT_P */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_FLOAT_GFLOAT_UNK \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH(xc); \
							 | 
						||
| 
								 | 
							
								      d1 = AbsAppl((*_PREG)->u.xd.d); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xd); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_LONGINT_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xi.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_LONGINT_GLONGINT_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_LONGINT_GLONGINT_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsApplTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        pt0 = RepAppl(d0); \
							 | 
						||
| 
								 | 
							
								        if (*pt0 != (CELL)FunctorLongInt) { \
							 | 
						||
| 
								 | 
							
									      YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								        } \
							 | 
						||
| 
								 | 
							
								        if ((*_PREG)->u.xi.i[1] != (CELL)pt0[1]) { \
							 | 
						||
| 
								 | 
							
									      YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									    } \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  if (!FAILED) { \
							 | 
						||
| 
								 | 
							
								        (*_PREG) = NEXTOP((*_PREG), xi); \
							 | 
						||
| 
								 | 
							
								        GONext(); \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_LONGINT_GLONGINT_UNK \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH(xi); \
							 | 
						||
| 
								 | 
							
								      d1 = AbsAppl((*_PREG)->u.xi.i); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xi); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef USE_GMP
							 | 
						||
| 
								 | 
							
								#define GET_BIGINT_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xN.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_BIGINT_GBIGINT_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_BIGINT_GBIGINT_NONVAR; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsApplTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        pt0 = RepAppl(d0); \
							 | 
						||
| 
								 | 
							
								        if (*pt0 != (CELL)FunctorBigInt) { \
							 | 
						||
| 
								 | 
							
									      YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									    } \
							 | 
						||
| 
								 | 
							
								        if (Yap_gmp_tcmp_big_big(d0,(*_PREG)->u.xN.b)) { \
							 | 
						||
| 
								 | 
							
									      YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									    } \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  if (!FAILED) { \
							 | 
						||
| 
								 | 
							
								        (*_PREG) = NEXTOP((*_PREG), xN); \
							 | 
						||
| 
								 | 
							
								        GONext(); \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_BIGINT_GBIGINT_UNK \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH(xN); \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.xN.b; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xN); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH();
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_DBTERM_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xD.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_DBTERM_GDBTERM_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GET_DBTERM_GDBTERM_NONVAR; \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.xD.D; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xD); \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GET_DBTERM_GDBTERM_UNK \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH(xD); \
							 | 
						||
| 
								 | 
							
								      d1 = (*_PREG)->u.xD.D; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xD); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xl); \
							 | 
						||
| 
								 | 
							
								      if (!IsVarTerm(d0)) { \
							 | 
						||
| 
								 | 
							
								        printf("Oops!\n"); \
							 | 
						||
| 
								 | 
							
								        exit(1); \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_READ \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GLIST_VALX_GLIST_VALX_READ; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
								        YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
								      } \
							 | 
						||
| 
								 | 
							
								      else { \
							 | 
						||
| 
								 | 
							
								         pt0 = RepPair(d0); \
							 | 
						||
| 
								 | 
							
								        (*_SREG) = pt0 + 1; \
							 | 
						||
| 
								 | 
							
								        d0 = *pt0; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_NONVAR \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.xx.xr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_NONVAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GLIST_VALX_GLIST_VALX_NONVAR_NONVAR; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_NONVAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt1, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_UNK \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_VAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      Bind_Global(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_VAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      UnifyGlobalCellToCell(pt0, pt1); \
							 | 
						||
| 
								 | 
							
								      GONext(); \
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALX_GLIST_VALX_WRITE \
							 | 
						||
| 
								 | 
							
								      CACHE_S(); \
							 | 
						||
| 
								 | 
							
								      S_SREG = HR; \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.xx.xr); \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(S_SREG); \
							 | 
						||
| 
								 | 
							
								      S_SREG[0] = d1; \
							 | 
						||
| 
								 | 
							
								      ALWAYS_START_PREFETCH_W(xx); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      HR = S_SREG + 2; \
							 | 
						||
| 
								 | 
							
								      WRITEBACK_S(S_SREG+1); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      ALWAYS_GONextW(); \
							 | 
						||
| 
								 | 
							
								      ALWAYS_END_PREFETCH_W(); \
							 | 
						||
| 
								 | 
							
								      ENDCACHE_S();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.yx.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_READ \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									    YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH(yx); \
							 | 
						||
| 
								 | 
							
								      pt0 = RepPair(d0); \
							 | 
						||
| 
								 | 
							
								      (*_SREG) = pt0 + 1; \
							 | 
						||
| 
								 | 
							
								      d0 = *pt0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_NONVAR \
							 | 
						||
| 
								 | 
							
								      pt1 = YREG + (*_PREG)->u.yx.y; \
							 | 
						||
| 
								 | 
							
								      d1 = *pt1; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_NONVAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GLIST_VALY_GLIST_VALY_NONVAR_NONVAR; \
							 | 
						||
| 
								 | 
							
								      (*_SREG) = pt0 + 1; \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_NONVAR_UNK \
							 | 
						||
| 
								 | 
							
								      Bind(pt1, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_UNK \
							 | 
						||
| 
								 | 
							
								      pt1 = YREG+(*_PREG)->u.yx.y; \
							 | 
						||
| 
								 | 
							
								      d1 = *pt1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_VAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      Bind_Global(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_VAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      UnifyGlobalCellToCell(pt0, pt1); \
							 | 
						||
| 
								 | 
							
								      GONext(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GLIST_VALY_GLIST_VALY_WRITE \
							 | 
						||
| 
								 | 
							
								      START_PREFETCH_W(yx); \
							 | 
						||
| 
								 | 
							
								      pt1 = HR; \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(pt1); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      d0 = YREG[(*_PREG)->u.yx.y]; \
							 | 
						||
| 
								 | 
							
								      pt1[0] = d0; \
							 | 
						||
| 
								 | 
							
								      HR = pt1 + 2; \
							 | 
						||
| 
								 | 
							
								      (*_SREG) = pt1 + 1; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      GONextW(); \
							 | 
						||
| 
								 | 
							
								      END_PREFETCH_W();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VARX_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xl);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VARX_GLIST_VOID_VARX_READ \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GL_VOID_VARX_GLIST_VOID_VARX_READ; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								    pt0 = RepPair(d0); \
							 | 
						||
| 
								 | 
							
								    d0 = pt0[1]; \
							 | 
						||
| 
								 | 
							
								    XREG((*_PREG)->u.xx.xr) = d0; \
							 | 
						||
| 
								 | 
							
								    (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								    ALWAYS_GONext(); \
							 | 
						||
| 
								 | 
							
									  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VARX_GLIST_VOID_VAR_WRITE \
							 | 
						||
| 
								 | 
							
								      pt1 = HR; \
							 | 
						||
| 
								 | 
							
								      XREG((*_PREG)->u.xx.xr) = \
							 | 
						||
| 
								 | 
							
									Unsigned(pt1 + 1); \
							 | 
						||
| 
								 | 
							
								      RESET_VARIABLE(pt1); \
							 | 
						||
| 
								 | 
							
								      RESET_VARIABLE(pt1+1); \
							 | 
						||
| 
								 | 
							
								      HR = pt1 + 2; \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(pt1); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VARY_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.yx.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VARY_GLIST_VOID_VARY_READ \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GL_VOID_VARY_GLIST_VOID_VARY_READ; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									    YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								        pt0 = RepPair(d0); \
							 | 
						||
| 
								 | 
							
								        d0 = pt0[1]; \
							 | 
						||
| 
								 | 
							
								        INITIALIZE_PERMVAR(YREG+(*_PREG)->u.yx.y,d0); \
							 | 
						||
| 
								 | 
							
								        (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								        GONext(); \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VARY_GLIST_VOID_VARY_WRITE \
							 | 
						||
| 
								 | 
							
								      pt1 = HR; \
							 | 
						||
| 
								 | 
							
								      INITIALIZE_PERMVAR(YREG+(*_PREG)->u.yx.y,Unsigned(pt1 + 1)); \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      RESET_VARIABLE(pt1); \
							 | 
						||
| 
								 | 
							
								      RESET_VARIABLE(pt1+1); \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(pt1); \
							 | 
						||
| 
								 | 
							
								      HR = pt1 + 2; \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xl);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_READ \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GL_VOID_VALX_GLIST_VOID_VALX_READ; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								    pt0 = RepPair(d0)+1; \
							 | 
						||
| 
								 | 
							
								    d0 = *pt0; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_NONVAR \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.xx.xr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_NONVAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GL_VOID_VALX_GLIST_VOID_VALX_NONVAR_NONVAR; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_NONVAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt1, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_UNK \
							 | 
						||
| 
								 | 
							
								      d1 = XREG((*_PREG)->u.xx.xr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_VAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      Bind_Global(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_VAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      UnifyGlobalCellToCell(pt0, pt1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALX_GLIST_VOID_VALX_WRITE \
							 | 
						||
| 
								 | 
							
								      pt1 = HR; \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(pt1); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      pt1 = HR; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.xx.xr); \
							 | 
						||
| 
								 | 
							
								      RESET_VARIABLE(pt1); \
							 | 
						||
| 
								 | 
							
								      pt1[1] = d0; \
							 | 
						||
| 
								 | 
							
								      HR = pt1 + 2; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), xx); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_INSTINIT \
							 | 
						||
| 
								 | 
							
								      print_instruction((*_PREG), ON_NATIVE); \
							 | 
						||
| 
								 | 
							
								      BLOCKADDRESS = (CELL)(*_PREG); \
							 | 
						||
| 
								 | 
							
									  register CELL d0, d1; \
							 | 
						||
| 
								 | 
							
									  register CELL *pt0, *pt1; \
							 | 
						||
| 
								 | 
							
								      d0 = XREG((*_PREG)->u.yx.x);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_READ \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GL_VOID_VALY_GLIST_VOID_VALY_READ; \
							 | 
						||
| 
								 | 
							
								      FAILED = 0; \
							 | 
						||
| 
								 | 
							
								      if (!IsPairTerm(d0)) { \
							 | 
						||
| 
								 | 
							
									YAAM_FAIL; \
							 | 
						||
| 
								 | 
							
									  } \
							 | 
						||
| 
								 | 
							
									  else { \
							 | 
						||
| 
								 | 
							
								    pt0 = RepPair(d0)+1; \
							 | 
						||
| 
								 | 
							
								    d0 = *pt0; \
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_NONVAR \
							 | 
						||
| 
								 | 
							
								      pt1 = YREG+(*_PREG)->u.yx.y; \
							 | 
						||
| 
								 | 
							
								      d1 = *pt1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_NONVAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      BLOCK = (CELL)GL_VOID_VALY_GLIST_VOID_VALY_NONVAR_NONVAR; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      YAAM_UNIFYBOUND;
							 | 
						||
| 
								 | 
							
									  
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_NONVAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      Bind(pt1, d0); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_UNK \
							 | 
						||
| 
								 | 
							
								      pt1 = YREG+(*_PREG)->u.yx.y; \
							 | 
						||
| 
								 | 
							
								      d1 = *pt1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_VAR_NONVAR \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      Bind_Global(pt0, d1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
									  
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_VAR_UNK \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      UnifyGlobalCellToCell(pt0, pt1); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define GL_VOID_VALY_GLIST_VOID_VALY_WRITE \
							 | 
						||
| 
								 | 
							
								      CACHE_S(); \
							 | 
						||
| 
								 | 
							
								      S_SREG = HR; \
							 | 
						||
| 
								 | 
							
								      d0 = AbsPair(S_SREG); \
							 | 
						||
| 
								 | 
							
								      Bind(pt0, d0); \
							 | 
						||
| 
								 | 
							
								      S_SREG = HR; \
							 | 
						||
| 
								 | 
							
								      d1 = YREG[(*_PREG)->u.yx.y]; \
							 | 
						||
| 
								 | 
							
								      RESET_VARIABLE(S_SREG); \
							 | 
						||
| 
								 | 
							
								      S_SREG[1] = d1; \
							 | 
						||
| 
								 | 
							
								      (*_PREG) = NEXTOP((*_PREG), yx); \
							 | 
						||
| 
								 | 
							
								      HR = S_SREG + 2; \
							 | 
						||
| 
								 | 
							
								      ENDCACHE_S(); \
							 | 
						||
| 
								 | 
							
								      GONext();
							 | 
						||
| 
								 | 
							
								
							 |