#define _put_x_var_instinit \
      register CELL *pt0; \
      pt0 = HR; \
      XREG((*_PREG)->u.xx.xl) = Unsigned(pt0); \
      HR = pt0 + 1; \
      XREG((*_PREG)->u.xx.xr) = Unsigned(pt0); \
      (*_PREG) = NEXTOP((*_PREG), xx); \
      RESET_VARIABLE(pt0); \
      GONEXT();

#if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
#define _put_y_var_instinit \
      register CELL *pt0; \
      pt0 = YREG + (*_PREG)->u.yx.y; \
      XREG((*_PREG)->u.yx.x) = (CELL) pt0; \
      (*_PREG) = NEXTOP((*_PREG), yx); \
      if (Unsigned((Int)(pt0)-(Int)(H_FZ)) > \
	  Unsigned((Int)(B_FZ)-(Int)(H_FZ))) { \
	*pt0 =  (CELL)STACK_TO_SBA(pt0); \
      } else \
	INITIALIZE_PERMVAR(pt0, (CELL)pt0); \
      GONEXT();
#else /* defined(YAPOR_SBA) && defined(FROZEN_STACKS) */
#define _put_y_var_instinit \
      register CELL *pt0; \
      pt0 = YREG + (*_PREG)->u.yx.y; \
      XREG((*_PREG)->u.yx.x) = (CELL) pt0; \
      (*_PREG) = NEXTOP((*_PREG), yx); \
	INITIALIZE_PERMVAR(pt0, (CELL)pt0); \
      GONEXT();
#endif /* defined(YAPOR_SBA) && defined(FROZEN_STACKS) */

#define _put_x_val_instinit \
      register CELL d0; \
      d0 = XREG((*_PREG)->u.xx.xl); \
      XREG((*_PREG)->u.xx.xr) = d0; \
      (*_PREG) = NEXTOP((*_PREG), xx); \
      GONEXT();

#define _put_xx_val_instinit \
      register CELL d0, d1; \
      d0 = XREG((*_PREG)->u.xxxx.xl1); \
      d1 = XREG((*_PREG)->u.xxxx.xl2); \
      XREG((*_PREG)->u.xxxx.xr1) = d0; \
      XREG((*_PREG)->u.xxxx.xr2) = d1; \
      (*_PREG) = NEXTOP((*_PREG), xxxx); \
      GONEXT();

#ifdef YAPOR_SBA
#define _put_y_val_instinit \
      register CELL d0; \
      d0 = YREG[(*_PREG)->u.yx.y]; \
      if (d0 == 0) { \
	XREG((*_PREG)->u.yx.x) = (CELL)(YREG+(*_PREG)->u.yx.y); \
      } else \
	XREG((*_PREG)->u.yx.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), yx); \
      GONEXT();
#else /* YAPOR_SBA */
#define _put_y_val_instinit \
      register CELL d0; \
      d0 = YREG[(*_PREG)->u.yx.y]; \
	XREG((*_PREG)->u.yx.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), yx); \
      GONEXT();
#endif /* YAPOR_SBA */

#ifdef YAPOR_SBA
#define _put_y_vals_instinit \
      register CELL d0, d1; \
      d0 = YREG[(*_PREG)->u.yyxx.y1]; \
      if (d0 == 0) \
	XREG((*_PREG)->u.yyxx.x1) = (CELL)(YREG+(*_PREG)->u.yyxx.y1); \
      else \
	XREG((*_PREG)->u.yyxx.x1) = d0; \
      (*_PREG) = NEXTOP((*_PREG), yyxx); \
      d1 = YREG[PREVOP((*_PREG),yyxx)->u.yyxx.y2]; \
      if (d1 == 0) \
	XREG(PREVOP((*_PREG)->u.yyxx,yyxx).x2) = (CELL)(YREG+(*_PREG)->u.yyxx.y2); \
      else \
	XREG(PREVOP((*_PREG),yyxx)->u.yyxx.x2) = d1; \
      GONEXT();
#else /* YAPOR_SBA */
#define _put_y_vals_instinit \
      register CELL d0, d1; \
      d0 = YREG[(*_PREG)->u.yyxx.y1]; \
	XREG((*_PREG)->u.yyxx.x1) = d0; \
      (*_PREG) = NEXTOP((*_PREG), yyxx); \
      d1 = YREG[PREVOP((*_PREG),yyxx)->u.yyxx.y2]; \
	XREG(PREVOP((*_PREG),yyxx)->u.yyxx.x2) = d1; \
      GONEXT();
#endif /* YAPOR_SBA */

#define _put_unsafe_instinit \
      BEGD(d0); \
      BEGP(pt0); \
      pt0 = YREG+(*_PREG)->u.yx.y; \
      d0 = *pt0; \
      deref_head(d0, punsafe_unk); \
    punsafe_nonvar: \
      XREG((*_PREG)->u.yx.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), yx); \
      GONEXT(); \
 \
      derefa_body(d0, pt0, punsafe_unk, punsafe_nonvar); \
      if (pt0 <= HR || pt0 >= YREG) { \
	XREG((*_PREG)->u.yx.x) = Unsigned(pt0); \
	(*_PREG) = NEXTOP((*_PREG), yx); \
	GONEXT(); \
      } \
      else { \
	Bind_Local(pt0, Unsigned(HR)); \
	XREG((*_PREG)->u.yx.x) = (CELL) HR; \
	RESET_VARIABLE(HR); \
	H++; \
	(*_PREG) = NEXTOP((*_PREG), yx); \
	GONEXT(); \
      } \
      ENDP(pt0); \
      ENDD(d0);

#define _put_atom_instinit \
      register CELL d0; \
      d0 = (*_PREG)->u.xc.c; \
      XREG((*_PREG)->u.xc.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), xc); \
      GONEXT();

#define PUT_DBTERM_INSTINIT \
      register CELL d0; \
      d0 = (*_PREG)->u.xD.D; \
      XREG((*_PREG)->u.xD.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), xD); \
      GONext();

#define PUT_BIGINT_INSTINIT \
      register CELL d0; \
      d0 = (*_PREG)->u.xN.b; \
      XREG((*_PREG)->u.xN.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), xN); \
      GONext();

#define _put_float_instinit \
      register CELL d0; \
      d0 = AbsAppl((*_PREG)->u.xd.d); \
      XREG((*_PREG)->u.xd.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), xd); \
      GONEXT();

#define PUT_LONGINT_INSTINIT \
      register CELL d0; \
      d0 = AbsAppl((*_PREG)->u.xi.i); \
      XREG((*_PREG)->u.xi.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), xi); \
      GONext();

#define _put_list_instinit \
      register CELL d0; \
      CACHE_S(); \
      READ_IN_S(); \
      S_SREG = HR; \
      HR += 2; \
      d0 = AbsPair(S_SREG); \
      XREG((*_PREG)->u.x.x) = d0; \
      (*_PREG) = NEXTOP((*_PREG), x); \
      WRITEBACK_S(S_SREG); \
      ENDCACHE_S(); \
      GONEXT();

#define _put_struct_instinit \
      register CELL d0; \
      d0 = AbsAppl(HR); \
      XREG((*_PREG)->u.xfa.x) = d0; \
      d0 = (CELL) ((*_PREG)->u.xfa.f); \
      *H++ = d0; \
      (*_SREG) = HR; \
      HR += (*_PREG)->u.xfa.a; \
      (*_PREG) = NEXTOP((*_PREG), xfa); \
      GONEXT();