546 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			546 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#define USER_SWITCH_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      { \
 | 
						|
	yamop *new = Yap_udi_search((*_PREG)->u.lp.p); \
 | 
						|
	if (!new) { \
 | 
						|
	  (*_PREG) = (*_PREG)->u.lp.l; \
 | 
						|
	  JMPNext(); \
 | 
						|
	} \
 | 
						|
        else { \
 | 
						|
	  (*_PREG) = new; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      }
 | 
						|
 | 
						|
#define USER_SWITCH_END \
 | 
						|
      BLOCK = (CELL)USER_SWITCH_END;
 | 
						|
 | 
						|
#define SWITCH_ON_TYPE_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d0 = CACHED_A1(); \
 | 
						|
      Int nonvar = 1; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
        nonvar = 0; \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
          copy_jmp_address((*_PREG)->u.llll.l4); \
 | 
						|
          (*_PREG) = (*_PREG)->u.llll.l4; \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        if (IsPairTerm(d0)) { \
 | 
						|
	  (*_SREG) = RepPair(d0); \
 | 
						|
	  copy_jmp_address((*_PREG)->u.llll.l1); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.llll.l1; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else if (!IsApplTerm(d0)) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.llll.l2); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.llll.l2; \
 | 
						|
	  I_R = d0; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.llll.l3); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.llll.l3; \
 | 
						|
	  (*_SREG) = RepAppl(d0); \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      }
 | 
						|
 | 
						|
#define SWITCH_ON_TYPE_END \
 | 
						|
      BLOCK = (CELL)SWITCH_ON_TYPE_END;
 | 
						|
 | 
						|
#if UNIQUE_TAG_FOR_PAIRS
 | 
						|
#define SWITCH_LIST_NL_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      ALWAYS_LOOKAHEAD((*_PREG)->u.ollll.pop); \
 | 
						|
      d0 = CACHED_A1(); \
 | 
						|
      Int nonvar = 0; \
 | 
						|
      Int pair = 1; \
 | 
						|
      if (!IsPairTerm(d0)) { \
 | 
						|
        pair = 0; \
 | 
						|
        do { \
 | 
						|
          if (!IsVarTerm(d0)) { \
 | 
						|
	    if (d0 == TermNil) { \
 | 
						|
	      (*_PREG) = (*_PREG)->u.ollll.l2; \
 | 
						|
	      JMPNext(); \
 | 
						|
	    } \
 | 
						|
	    else { \
 | 
						|
	      if (IsApplTerm(d0)) { \
 | 
						|
	        copy_jmp_address((*_PREG)->u.ollll.l3); \
 | 
						|
	        (*_PREG) = (*_PREG)->u.ollll.l3; \
 | 
						|
	        (*_SREG) = RepAppl(d0); \
 | 
						|
	        JMPNext(); \
 | 
						|
	      } else { \
 | 
						|
	        copy_jmp_address((*_PREG)->u.ollll.l3); \
 | 
						|
	        (*_PREG) = (*_PREG)->u.ollll.l3; \
 | 
						|
	        I_R = d0; \
 | 
						|
	        JMPNext(); \
 | 
						|
	      } \
 | 
						|
	    } \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(pt0); \
 | 
						|
	  if (Unsigned(pt0) == (d0)) break; \
 | 
						|
	  if (IsPairTerm(d0)) { \
 | 
						|
            pair = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
        } while (TRUE); \
 | 
						|
        if (!nonvar && !pair) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.ollll.l4); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.ollll.l4; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (!nonvar && pair) { \
 | 
						|
        copy_jmp_address((*_PREG)->u.ollll.l1); \
 | 
						|
        (*_PREG) = (*_PREG)->u.ollll.l1; \
 | 
						|
        (*_SREG) = RepPair(d0); \
 | 
						|
        ALWAYS_GONext(); \
 | 
						|
      }
 | 
						|
#else
 | 
						|
#define SWITCH_LIST_NL_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      ALWAYS_LOOKAHEAD((*_PREG)->u.ollll.pop); \
 | 
						|
      d0 = CACHED_A1(); \
 | 
						|
      Int nonvar = 0; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.ollll.l4); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.ollll.l4; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        if (__builtin_expect(IsPairTerm(d0),1)) { \
 | 
						|
          copy_jmp_address((*_PREG)->u.ollll.l1); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.ollll.l1; \
 | 
						|
	  (*_SREG) = RepPair(d0); \
 | 
						|
	  ALWAYS_GONext(); \
 | 
						|
        } \
 | 
						|
        if (d0 == TermNil) { \
 | 
						|
          (*_PREG) = (*_PREG)->u.ollll.l2; \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
        else { \
 | 
						|
          if (IsApplTerm(d0)) { \
 | 
						|
	    copy_jmp_address((*_PREG)->u.ollll.l3); \
 | 
						|
	    (*_PREG) = (*_PREG)->u.ollll.l3; \
 | 
						|
	    (*_SREG) = RepAppl(d0); \
 | 
						|
	    JMPNext(); \
 | 
						|
	  } else { \
 | 
						|
	    copy_jmp_address((*_PREG)->u.ollll.l3); \
 | 
						|
	    (*_PREG) = (*_PREG)->u.ollll.l3; \
 | 
						|
	    I_R = d0; \
 | 
						|
	    JMPNext(); \
 | 
						|
          } \
 | 
						|
	} \
 | 
						|
      }
 | 
						|
#endif
 | 
						|
 | 
						|
#define SWITCH_LIST_NL_END \
 | 
						|
      BLOCK = (CELL)SWITCH_LIST_NL_END;
 | 
						|
 | 
						|
#define SWITCH_ON_ARG_TYPE_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d0 = XREG((*_PREG)->u.xllll.x); \
 | 
						|
      Int nonvar = 1; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
	    nonvar = 0; \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
          copy_jmp_address((*_PREG)->u.xllll.l4); \
 | 
						|
          (*_PREG) = (*_PREG)->u.xllll.l4; \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        if (IsPairTerm(d0)) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.xllll.l1); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.xllll.l1; \
 | 
						|
	  (*_SREG) = RepPair(d0); \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else if (!IsApplTerm(d0)) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.xllll.l2); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.xllll.l2; \
 | 
						|
	  I_R = d0; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.xllll.l3); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.xllll.l3; \
 | 
						|
	  (*_SREG) = RepAppl(d0); \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      }
 | 
						|
 | 
						|
#define SWITCH_ON_ARG_TYPE_END \
 | 
						|
      BLOCK = (CELL)SWITCH_ON_ARG_TYPE_END;
 | 
						|
 | 
						|
#define SWITCH_ON_SUB_ARG_TYPE_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d0 = (*_SREG)[(*_PREG)->u.sllll.s]; \
 | 
						|
      Int nonvar = 1; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
	    nonvar = 0; \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
          copy_jmp_address((*_PREG)->u.sllll.l4); \
 | 
						|
          (*_PREG) = (*_PREG)->u.sllll.l4; \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        if (IsPairTerm(d0)) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.sllll.l1); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.sllll.l1; \
 | 
						|
	  (*_SREG) = RepPair(d0); \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else if (!IsApplTerm(d0)) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.sllll.l2); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.sllll.l2; \
 | 
						|
	  I_R = d0; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.sllll.l3); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.sllll.l3; \
 | 
						|
	  (*_SREG) = RepAppl(d0); \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      }
 | 
						|
 | 
						|
#define SWITCH_ON_SUB_ARG_TYPE_END \
 | 
						|
      BLOCK = (CELL)SWITCH_ON_SUB_ARG_TYPE_END;
 | 
						|
 | 
						|
#define JUMP_IF_VAR_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d0 = CACHED_A1(); \
 | 
						|
      Int nonvar = 1; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
        nonvar = 0; \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
          copy_jmp_address((*_PREG)->u.l.l); \
 | 
						|
          (*_PREG) = (*_PREG)->u.l.l; \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        (*_PREG) = NEXTOP((*_PREG), l); \
 | 
						|
        JMPNext(); \
 | 
						|
      }
 | 
						|
 | 
						|
#define JUMP_IF_VAR_END \
 | 
						|
      BLOCK = (CELL)JUMP_IF_VAR_END;
 | 
						|
 | 
						|
#define JUMP_IF_NONVAR_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d0 = XREG((*_PREG)->u.xll.x); \
 | 
						|
      Int nonvar = 0; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
          (*_PREG) = NEXTOP((*_PREG), xll); \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        copy_jmp_address((*_PREG)->u.xll.l1); \
 | 
						|
        (*_PREG) = (*_PREG)->u.xll.l1; \
 | 
						|
        JMPNext(); \
 | 
						|
      }
 | 
						|
 | 
						|
#define JUMP_IF_NONVAR_END \
 | 
						|
      BLOCK = (CELL)JUMP_IF_NONVAR_END;
 | 
						|
 | 
						|
#define IF_NOT_THEN_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d0 = CACHED_A1(); \
 | 
						|
      Int nonvar = 1; \
 | 
						|
      if (IsVarTerm(d0)) { \
 | 
						|
        nonvar = 0; \
 | 
						|
        (pt0) = (CELL *)(d0); \
 | 
						|
        (d0) = *(CELL *)(d0); \
 | 
						|
        while (Unsigned(pt0) != (d0)) { \
 | 
						|
          if(!IsVarTerm(d0)) { \
 | 
						|
            nonvar = 1; \
 | 
						|
            break; \
 | 
						|
          } \
 | 
						|
          (pt0) = (CELL *)(d0); \
 | 
						|
          (d0) = *(CELL *)(d0); \
 | 
						|
        } \
 | 
						|
        if (!nonvar) { \
 | 
						|
          copy_jmp_address((*_PREG)->u.clll.l3); \
 | 
						|
          (*_PREG) = (*_PREG)->u.clll.l3; \
 | 
						|
          JMPNext(); \
 | 
						|
        } \
 | 
						|
      } \
 | 
						|
      if (nonvar) { \
 | 
						|
        if (d0 == (*_PREG)->u.clll.c) { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.clll.l2); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.clll.l2; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
        else { \
 | 
						|
	  copy_jmp_address((*_PREG)->u.clll.l1); \
 | 
						|
	  (*_PREG) = (*_PREG)->u.clll.l1; \
 | 
						|
	  JMPNext(); \
 | 
						|
        } \
 | 
						|
      }
 | 
						|
 | 
						|
#define IF_NOT_THEN_END \
 | 
						|
      BLOCK = (CELL)IF_NOT_THEN_END;
 | 
						|
 | 
						|
#define HRASH_SHIFT 6
 | 
						|
 | 
						|
#define SWITCH_ON_FUNC_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0, d1; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d1 = *(*_SREG)++; \
 | 
						|
      { \
 | 
						|
	CELL \
 | 
						|
	  Mask = ((*_PREG)->u.sssl.s - 1) << 1, \
 | 
						|
	  hash = d1 >> (HRASH_SHIFT - 1) & Mask; \
 | 
						|
	CELL *base; \
 | 
						|
	base = (CELL *)(*_PREG)->u.sssl.l; \
 | 
						|
	pt0 = base + hash; \
 | 
						|
	d0 = pt0[0]; \
 | 
						|
	if (d0 == d1 || d0 == 0) { \
 | 
						|
	  copy_jmp_addressa(pt0+1); \
 | 
						|
	  (*_PREG) = (yamop *) (pt0[1]); \
 | 
						|
	  JMPNext(); \
 | 
						|
	} \
 | 
						|
	else { \
 | 
						|
	  register CELL d = ((d1 | 1) << 1) & Mask; \
 | 
						|
	  while (1) { \
 | 
						|
	    hash = (hash + d) & Mask; \
 | 
						|
	    pt0 = base + hash; \
 | 
						|
	    d0 = pt0[0]; \
 | 
						|
	    if (d0 == d1 || d0 == 0) { \
 | 
						|
	      copy_jmp_addressa(pt0+1); \
 | 
						|
	      (*_PREG) = (yamop *) pt0[1]; \
 | 
						|
	      break; \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
      }
 | 
						|
 | 
						|
#define SWITCH_ON_FUNC_END \
 | 
						|
      BLOCK = (CELL)SWITCH_ON_FUNC_END;
 | 
						|
 | 
						|
#define SWITCH_ON_CONS_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0, d1; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      d1 = I_R; \
 | 
						|
      { \
 | 
						|
	CELL \
 | 
						|
	  Mask = ((*_PREG)->u.sssl.s - 1) << 1, \
 | 
						|
	  hash = d1 >> (HRASH_SHIFT - 1) & Mask; \
 | 
						|
	CELL *base; \
 | 
						|
	base = (CELL *)(*_PREG)->u.sssl.l; \
 | 
						|
	pt0 = base + hash; \
 | 
						|
	d0 = pt0[0]; \
 | 
						|
	if (d0 == d1 || d0 == 0) { \
 | 
						|
	  copy_jmp_addressa(pt0+1); \
 | 
						|
	  (*_PREG) = (yamop *) (pt0[1]); \
 | 
						|
	  JMPNext(); \
 | 
						|
	} \
 | 
						|
	else { \
 | 
						|
	  register CELL d = ((d1 | 1) << 1) & Mask; \
 | 
						|
	  while (1) { \
 | 
						|
	    hash = (hash + d) & Mask; \
 | 
						|
	    pt0 = base + hash; \
 | 
						|
	    d0 = pt0[0]; \
 | 
						|
	    if (d0 == d1 || d0 == 0) { \
 | 
						|
	      copy_jmp_addressa(pt0+1); \
 | 
						|
	      (*_PREG) = (yamop *) pt0[1]; \
 | 
						|
	      break; \
 | 
						|
	    } \
 | 
						|
	  } \
 | 
						|
	} \
 | 
						|
      }
 | 
						|
 | 
						|
#define SWITCH_ON_CONS_END \
 | 
						|
      BLOCK = (CELL)SWITCH_ON_CONS_END;
 | 
						|
 | 
						|
#define GO_ON_FUNC_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      { \
 | 
						|
	CELL *pt = (CELL *)((*_PREG)->u.sssl.l); \
 | 
						|
	d0 = *(*_SREG)++; \
 | 
						|
	if (d0 == pt[0]) { \
 | 
						|
	  copy_jmp_addressa(pt+1); \
 | 
						|
	  (*_PREG) = (yamop *) pt[1]; \
 | 
						|
	  JMPNext(); \
 | 
						|
	} else { \
 | 
						|
	  copy_jmp_addressa(pt+3); \
 | 
						|
	  (*_PREG) = (yamop *) pt[3]; \
 | 
						|
	  JMPNext(); \
 | 
						|
	} \
 | 
						|
      }
 | 
						|
 | 
						|
#define GO_ON_FUNC_END \
 | 
						|
      BLOCK = (CELL)GO_ON_FUNC_END;
 | 
						|
 | 
						|
#define GO_ON_CONS_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d0; \
 | 
						|
      { \
 | 
						|
	CELL *pt = (CELL *)((*_PREG)->u.sssl.l); \
 | 
						|
	d0 = I_R; \
 | 
						|
	if (d0 == pt[0]) { \
 | 
						|
	  copy_jmp_addressa(pt+1); \
 | 
						|
	  (*_PREG) = (yamop *) pt[1]; \
 | 
						|
	  JMPNext(); \
 | 
						|
	} else { \
 | 
						|
	  copy_jmp_addressa(pt+3); \
 | 
						|
	  (*_PREG) = (yamop *) pt[3]; \
 | 
						|
	  JMPNext(); \
 | 
						|
	} \
 | 
						|
      }
 | 
						|
 | 
						|
#define GO_ON_CONS_END \
 | 
						|
      BLOCK = (CELL)GO_ON_CONS_END;
 | 
						|
 | 
						|
#define IF_FUNC_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d1; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      pt0 = (CELL *) (*_PREG)->u.sssl.l; \
 | 
						|
      d1 = *(*_SREG)++; \
 | 
						|
      while (pt0[0] != d1 && pt0[0] != (CELL)NULL ) { \
 | 
						|
	pt0 += 2; \
 | 
						|
      } \
 | 
						|
      copy_jmp_addressa(pt0+1); \
 | 
						|
      (*_PREG) = (yamop *) (pt0[1]); \
 | 
						|
      JMPNext();
 | 
						|
 | 
						|
#define IF_FUNC_END \
 | 
						|
      BLOCK = (CELL)IF_FUNC_END;
 | 
						|
 | 
						|
#define IF_CONS_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      register CELL d1; \
 | 
						|
      register CELL *pt0; \
 | 
						|
      pt0 = (CELL *) (*_PREG)->u.sssl.l; \
 | 
						|
      d1 = I_R; \
 | 
						|
      while (pt0[0] != d1 && pt0[0] != 0L ) { \
 | 
						|
	pt0 += 2; \
 | 
						|
      } \
 | 
						|
      copy_jmp_addressa(pt0+1); \
 | 
						|
      (*_PREG) = (yamop *) (pt0[1]); \
 | 
						|
      JMPNext();
 | 
						|
 | 
						|
#define IF_CONS_END \
 | 
						|
      BLOCK = (CELL)IF_CONS_END;
 | 
						|
 | 
						|
#define INDEX_DBREF_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), e); \
 | 
						|
      I_R = AbsAppl((*_SREG)-1); \
 | 
						|
      GONext();
 | 
						|
 | 
						|
#define INDEX_DBREF_END \
 | 
						|
      BLOCK = (CELL)INDEX_DBREF_END;
 | 
						|
 | 
						|
#define INDEX_BLOB_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), e); \
 | 
						|
      I_R = Yap_DoubleP_key((*_SREG)); \
 | 
						|
      GONext();
 | 
						|
 | 
						|
#define INDEX_BLOB_END \
 | 
						|
      BLOCK = (CELL)INDEX_BLOB_END;
 | 
						|
 | 
						|
#define INDEX_LONG_INSTINIT \
 | 
						|
      BLOCKADDRESS = (CELL)(*_PREG); \
 | 
						|
      (*_PREG) = NEXTOP((*_PREG), e); \
 | 
						|
      I_R = Yap_IntP_key((*_SREG)); \
 | 
						|
      GONext();
 | 
						|
 | 
						|
#define INDEX_LONG_END \
 | 
						|
      BLOCK = (CELL)INDEX_LONG_INSTINIT;
 | 
						|
 |