| 
									
										
										
										
											2015-01-18 03:00:19 +00:00
										 |  |  |  | /************************************************************************\
 | 
					
						
							|  |  |  |  |  *    Get Instructions                                                  * | 
					
						
							|  |  |  |  | \************************************************************************/ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #ifdef INDENT_CODE
 | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  | #endif /* INDENT_CODE */
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_x_var, xx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xx.xl) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_y_var, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = YREG + PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.yx.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(pt0,d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_yy_var, yyxx); | 
					
						
							|  |  |  |  |       CACHE_Y(YREG); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = S_YREG + PREG->y_u.yyxx.y1; | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.yyxx.x1); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = S_YREG + PREG->y_u.yyx.y2; | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.yyxx.x2); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yyxx); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(pt0,d0); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(pt1,d1); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDCACHE_Y(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* The code for get_x_val is hard to follow because I use a
 | 
					
						
							|  |  |  |  |        * lot of jumps. The convention is that in the label | 
					
						
							|  |  |  |  |        * gval_X_YREG X refers to the state of the first argument, and | 
					
						
							|  |  |  |  |        * YREG to the state of the second argument */ | 
					
						
							|  |  |  |  |       Op(get_x_val, xx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xl); | 
					
						
							|  |  |  |  |       deref_head(d0, gvalx_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* d0 will keep the first argument */ | 
					
						
							|  |  |  |  |     gvalx_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       deref_head(d1, gvalx_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gvalx_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       deref_body(d1, pt0, gvalx_nonvar_unk, gvalx_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gvalx_unk, gvalx_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound and in pt0 and in d0 */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       deref_head(d1, gvalx_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gvalx_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, gvalx_var_unk, gvalx_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       UnifyCells(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* The code for get_y_val mostly uses the code for get_x_val
 | 
					
						
							|  |  |  |  |        */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_y_val, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = YREG + PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* From now on, it's just a copy of the code for get_x_val */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_head(d0, gvaly_unk); | 
					
						
							|  |  |  |  |     gvaly_nonvar: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.yx.x); | 
					
						
							|  |  |  |  |       deref_head(d1, gvaly_nonvar_unk); | 
					
						
							|  |  |  |  |     gvaly_nonvar_nonvar: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, gvaly_nonvar_unk, gvaly_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, gvaly_unk, gvaly_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.yx.x); | 
					
						
							|  |  |  |  |       deref_head(d1, gvaly_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gvaly_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, gvaly_var_unk, gvaly_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       UnifyCells(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_atom, xc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xc.x); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.xc.c; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_nonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, xc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_unk, gatom_nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xc); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_atom_exo, x); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.x.x); | 
					
						
							|  |  |  |  |       d1 = *SREG; | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_exo_unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_exo_nonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_exo_unk, gatom_exo_nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       pt0 = (CELL *)d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_2atoms, cc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_2unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_2nonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cc.c1) { | 
					
						
							|  |  |  |  | 	goto gatom_2b; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_2unk, gatom_2nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cc.c1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_2b: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG2; | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.cc.c2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_2bunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_2bnonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, cc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_2bunk, gatom_2bnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, cc); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_3atoms, ccc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_3unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_3nonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.ccc.c1) { | 
					
						
							|  |  |  |  | 	goto gatom_3b; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_3unk, gatom_3nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.ccc.c1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_3b: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_3bunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_3bnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.ccc.c2) { | 
					
						
							|  |  |  |  | 	goto gatom_3c; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_3bunk, gatom_3bnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.ccc.c2); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_3c: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG3; | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.ccc.c3; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_3cunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_3cnonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, ccc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_3cunk, gatom_3cnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ccc); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_4atoms, cccc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_4unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_4nonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccc.c1) { | 
					
						
							|  |  |  |  | 	goto gatom_4b; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_4unk, gatom_4nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccc.c1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_4b: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_4bunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_4bnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccc.c2) { | 
					
						
							|  |  |  |  | 	goto gatom_4c; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_4bunk, gatom_4bnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccc.c2); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_4c: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG3; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_4cunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_4cnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccc.c3) { | 
					
						
							|  |  |  |  | 	goto gatom_4d; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_4cunk, gatom_4cnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccc.c3); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_4d: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG4; | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.cccc.c4; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_4dunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_4dnonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, cccc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_4dunk, gatom_4dnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, cccc); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_5atoms, ccccc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_5unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_5nonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.ccccc.c1) { | 
					
						
							|  |  |  |  | 	goto gatom_5b; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_5unk, gatom_5nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.ccccc.c1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_5b: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_5bunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_5bnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.ccccc.c2) { | 
					
						
							|  |  |  |  | 	goto gatom_5c; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_5bunk, gatom_5bnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.ccccc.c2); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_5c: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG3; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_5cunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_5cnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.ccccc.c3) { | 
					
						
							|  |  |  |  | 	goto gatom_5d; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_5cunk, gatom_5cnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.ccccc.c3); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_5d: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG4; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_5dunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_5dnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.ccccc.c4) { | 
					
						
							|  |  |  |  | 	goto gatom_5e; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_5dunk, gatom_5dnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.ccccc.c4); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_5e: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG5; | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.ccccc.c5; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_5eunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_5enonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, ccccc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_5eunk, gatom_5enonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ccccc); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_6atoms, cccccc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_6unk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_6nonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccccc.c1) { | 
					
						
							|  |  |  |  | 	goto gatom_6b; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_6unk, gatom_6nonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccccc.c1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_6b: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_6bunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_6bnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccccc.c2) { | 
					
						
							|  |  |  |  | 	goto gatom_6c; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_6bunk, gatom_6bnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccccc.c2); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_6c: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG3; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_6cunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_6cnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccccc.c3) { | 
					
						
							|  |  |  |  | 	goto gatom_6d; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_6cunk, gatom_6cnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccccc.c3); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_6d: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG4; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_6dunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_6dnonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccccc.c4) { | 
					
						
							|  |  |  |  | 	goto gatom_6e; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_6dunk, gatom_6dnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccccc.c4); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_6e: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG5; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_6eunk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_6enonvar: | 
					
						
							|  |  |  |  |       if (d0 == PREG->y_u.cccccc.c5) { | 
					
						
							|  |  |  |  | 	goto gatom_6f; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_6eunk, gatom_6enonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       YapBind(pt0, PREG->y_u.cccccc.c5); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |     gatom_6f: | 
					
						
							|  |  |  |  |       /* fetch arguments */ | 
					
						
							|  |  |  |  |       d0 = ARG6; | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.cccccc.c6; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_head(d0, gatom_6funk); | 
					
						
							|  |  |  |  |       /* argument is nonvar */ | 
					
						
							|  |  |  |  |     gatom_6fnonvar: | 
					
						
							|  |  |  |  |       if (d0 == d1) { | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, cccccc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gatom_6funk, gatom_6fnonvar); | 
					
						
							|  |  |  |  |       /* argument is a variable */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, cccccc); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* The next instructions can lead to either the READ stream
 | 
					
						
							|  |  |  |  |        * or the write stream */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(get_list, x); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.x.x); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_nonvar: | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       START_PREFETCH(x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       SREG = RepPair(d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_unk, glist_nonvar); | 
					
						
							|  |  |  |  |       /* glist var */ | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       START_PREFETCH_W(x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsPair(S_SREG); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       /* don't put an ENDD just after a label */ | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(get_struct, xfa); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xfa.x); | 
					
						
							|  |  |  |  |       deref_head(d0, gstruct_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gstruct_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* we have met a compound term */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xfa); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       S_SREG = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* check functor */ | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.xfa.f); | 
					
						
							|  |  |  |  |       if (*S_SREG != d0) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xfa); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gstruct_unk, gstruct_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH_W(xfa); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(HR); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       /* now, set pt0 to point to the heap where we are going to
 | 
					
						
							|  |  |  |  |        * build our term */ | 
					
						
							|  |  |  |  |       pt0 = HR; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       /* first, put the functor */ | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.xfa.f); | 
					
						
							|  |  |  |  |       *pt0++ = d0; | 
					
						
							|  |  |  |  |       HR = pt0 + PREG->y_u.xfa.a; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xfa); | 
					
						
							|  |  |  |  |       /* set SREG */ | 
					
						
							|  |  |  |  |       SREG = pt0; | 
					
						
							|  |  |  |  |       /* update HR */ | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_float, xd); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xd.x); | 
					
						
							|  |  |  |  |       deref_head(d0, gfloat_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gfloat_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* we have met a preexisting float */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xd); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* check functor */ | 
					
						
							|  |  |  |  |       if (*pt0 != (CELL)FunctorDouble) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = PREG->y_u.xd.d; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xd); | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  | 	  pt1[1] != pt0[1] | 
					
						
							|  |  |  |  | #if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
 | 
					
						
							|  |  |  |  | 	  || pt1[2] != pt0[2] | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	  ) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gfloat_unk, gfloat_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xc); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(PREG->y_u.xd.d); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xd); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_string, xu); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xu.x); | 
					
						
							|  |  |  |  |       deref_head(d0, gstring_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gstring_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* we have met a preexisting string */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xu); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* check functor */ | 
					
						
							|  |  |  |  |       if (*pt0 != (CELL)FunctorString) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = RepAppl(PREG->y_u.xu.ut); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xu); | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  | 	  pt1[1] != pt0[1] || | 
					
						
							|  |  |  |  | 	  strcmp((const char *)(pt1+2), (const char *)(pt0+2)) | 
					
						
							|  |  |  |  | 	  ) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gstring_unk, gstring_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xc); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.xu.ut; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xu); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_longint, xi); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xi.x); | 
					
						
							|  |  |  |  |       deref_head(d0, glongint_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glongint_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* we have met a preexisting longint */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xi); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* check functor */ | 
					
						
							|  |  |  |  |       if (*pt0 != (CELL)FunctorLongInt) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       if (PREG->y_u.xi.i[1] != (CELL)pt0[1]) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xi); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glongint_unk, glongint_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xi); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(PREG->y_u.xi.i); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xi); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_bigint, xN); | 
					
						
							|  |  |  |  | #ifdef USE_GMP
 | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xN.x); | 
					
						
							|  |  |  |  |       deref_head(d0, gbigint_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gbigint_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* we have met a preexisting bigint */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xN); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* check functor */ | 
					
						
							|  |  |  |  |       if (*pt0 != (CELL)FunctorBigInt) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	  FAIL(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |       if (Yap_gmp_tcmp_big_big(d0,PREG->y_u.xN.b)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xN); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gbigint_unk, gbigint_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xN); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.xN.b; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xN); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  |       FAIL(); | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(get_dbterm, xD); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xD.x); | 
					
						
							|  |  |  |  |       deref_head(d0, gdbterm_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     gdbterm_nonvar: | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* we have met a preexisting dbterm */ | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.xD.D; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xD); | 
					
						
							|  |  |  |  |       UnifyBound(d0,d1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, gdbterm_unk, gdbterm_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xD); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.xD.D; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xD); | 
					
						
							|  |  |  |  |       YapBind(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  |       /************************************************************************\
 | 
					
						
							|  |  |  |  |        *    Optimised Get List Instructions                                   * | 
					
						
							|  |  |  |  | \************************************************************************/ | 
					
						
							|  |  |  |  |       OpRW(glist_valx, xx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xl); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_valx_write); | 
					
						
							|  |  |  |  |     glist_valx_read: | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH(xx); | 
					
						
							|  |  |  |  |       pt0 = RepPair(d0); | 
					
						
							|  |  |  |  |       SREG = pt0 + 1; | 
					
						
							|  |  |  |  |       /* start unification with first argument */ | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, glist_valx_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument is in d0 */ | 
					
						
							|  |  |  |  |     glist_valx_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       deref_head(d1, glist_valx_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_valx_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, glist_valx_nonvar_unk, glist_valx_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* head bound, argument unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* head may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, glist_valx_unk, glist_valx_nonvar); | 
					
						
							|  |  |  |  |       /* head is unbound, pt0 has the value */ | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_valx_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_valx_var_nonvar: | 
					
						
							|  |  |  |  |       /* head is unbound, second arg bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d0, pt1, glist_valx_var_unk, glist_valx_var_nonvar); | 
					
						
							|  |  |  |  |       /* head and second argument are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_valx_write, glist_valx_read); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       d0 = AbsPair(S_SREG); | 
					
						
							|  |  |  |  |       S_SREG[0] = d1; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH_W(xx); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       ALWAYS_GONextW(); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH_W(); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(glist_valy, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.yx.x); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_valy_write); | 
					
						
							|  |  |  |  |     glist_valy_read: | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       START_PREFETCH(yx); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       pt0 = RepPair(d0); | 
					
						
							|  |  |  |  |       SREG = pt0 + 1; | 
					
						
							|  |  |  |  |       /* start unification with first argument */ | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, glist_valy_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_valy_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG + PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       deref_head(d1, glist_valy_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_valy_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       SREG = pt0 + 1; | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, glist_valy_nonvar_unk, glist_valy_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, glist_valy_unk, glist_valy_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, glist_valy_var_unk); | 
					
						
							|  |  |  |  |     glist_valy_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, glist_valy_var_unk, glist_valy_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_valy_write, glist_valy_read); | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH_W(yx); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = HR; | 
					
						
							|  |  |  |  |       d0 = AbsPair(pt1); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       /* include XREG on it */ | 
					
						
							|  |  |  |  |       d0 = YREG[PREG->y_u.yx.y]; | 
					
						
							|  |  |  |  |       pt1[0] = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       HR = pt1 + 2; | 
					
						
							|  |  |  |  |       SREG = pt1 + 1; | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(gl_void_varx, xx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xl); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_void_varx_write); | 
					
						
							|  |  |  |  |     glist_void_varx_read: | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(xx); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepPair(d0); | 
					
						
							|  |  |  |  |       d0 = pt0[1]; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xx.xr) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_void_varx_write, glist_void_varx_read); | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = HR; | 
					
						
							|  |  |  |  |       /* include XREG on it */ | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xx.xr) = | 
					
						
							|  |  |  |  | 	Unsigned(pt1 + 1); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(pt1); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(pt1+1); | 
					
						
							|  |  |  |  |       HR = pt1 + 2; | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsPair(pt1); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(gl_void_vary, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.yx.x); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_void_vary_write); | 
					
						
							|  |  |  |  |     glist_void_vary_read: | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepPair(d0); | 
					
						
							|  |  |  |  |       d0 = pt0[1]; | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(YREG+PREG->y_u.yx.y,d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_void_vary_write, glist_void_vary_read); | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = HR; | 
					
						
							|  |  |  |  |       /* include XREG on it */ | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(YREG+PREG->y_u.yx.y,Unsigned(pt1 + 1)); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(pt1); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(pt1+1); | 
					
						
							|  |  |  |  |       d0 = AbsPair(pt1); | 
					
						
							|  |  |  |  |       HR = pt1 + 2; | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(gl_void_valx, xx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xl); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_void_valx_write); | 
					
						
							|  |  |  |  |     glist_void_valx_read: | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       pt0 = RepPair(d0)+1; | 
					
						
							|  |  |  |  |       /* start unification with first argument */ | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, glist_void_valx_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_void_valx_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       deref_head(d1, glist_void_valx_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_void_valx_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, glist_void_valx_nonvar_unk, glist_void_valx_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, glist_void_valx_unk, glist_void_valx_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       deref_head(d1, glist_void_valx_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_void_valx_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, glist_void_valx_var_unk, glist_void_valx_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_void_valx_write, glist_void_valx_read); | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = HR; | 
					
						
							|  |  |  |  |       d0 = AbsPair(pt1); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       pt1 = HR; | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       /* include XREG on it */ | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xr); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(pt1); | 
					
						
							|  |  |  |  |       pt1[1] = d0; | 
					
						
							|  |  |  |  |       HR = pt1 + 2; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(gl_void_valy, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.yx.x); | 
					
						
							|  |  |  |  |       deref_head(d0, glist_void_valy_write); | 
					
						
							|  |  |  |  |     glist_void_valy_read: | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       /* did we find a list? */ | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       /* enter read mode */ | 
					
						
							|  |  |  |  |       pt0 = RepPair(d0)+1; | 
					
						
							|  |  |  |  |       /* start unification with first argument */ | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, glist_void_valy_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_void_valy_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, glist_void_valy_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_void_valy_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, glist_void_valy_nonvar_unk, glist_void_valy_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, glist_void_valy_unk, glist_void_valy_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, glist_void_valy_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     glist_void_valy_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, glist_void_valy_var_unk, glist_void_valy_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, glist_void_valy_write, glist_void_valy_read); | 
					
						
							|  |  |  |  |       /* enter write mode */ | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       d0 = AbsPair(S_SREG); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       /* include XREG on it */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = YREG[PREG->y_u.yx.y]; | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       S_SREG[1] = d1; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  |       /************************************************************************\
 | 
					
						
							|  |  |  |  |        *      Unify instructions                                              * | 
					
						
							|  |  |  |  | \************************************************************************/ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_x_var, ox); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *S_SREG; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) | 
					
						
							|  |  |  |  | 	d0 = (CELL)S_SREG; | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(ox); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.ox.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_x_var_write, ox); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       *pt0 = (CELL) S_SREG; | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BOp(unify_l_x_var, ox); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(ox); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = SREG[0]; | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) | 
					
						
							|  |  |  |  | 	d0 = (CELL)SREG; | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  |       *pt0 = d0; | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDBOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BOp(unify_l_x_var_write, ox); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(ox); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       *pt0 = (CELL)S_SREG; | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ENDBOp(); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BOp(unify_x_var2, oxx); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(oxx); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.oxx.xr); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = S_SREG[0]; | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = S_SREG[1]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) | 
					
						
							|  |  |  |  | 	d0 = (CELL)S_SREG; | 
					
						
							|  |  |  |  |       if (d1 == 0) | 
					
						
							|  |  |  |  | 	d1 = (CELL)(S_SREG+1); | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+2); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.oxx.xl) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oxx); | 
					
						
							|  |  |  |  |       *pt0 = d1; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ENDBOp(); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_x_var2_write, oxx); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.oxx.xr); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.oxx.xl) = (CELL) S_SREG; | 
					
						
							|  |  |  |  |       S_SREG++; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oxx); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       *pt0 = (CELL) S_SREG; | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BOp(unify_l_x_var2, oxx); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(oxx); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.oxx.xr); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = S_SREG[0]; | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = S_SREG[1]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.oxx.xl) = (CELL)S_SREG; | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.oxx.xl) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oxx); | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d1 == 0) | 
					
						
							|  |  |  |  | 	*pt0 = (CELL)(S_SREG+1); | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	*pt0 = d1; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ENDBOp(); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_x_var2_write, oxx); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = &XREG(PREG->y_u.oxx.xr); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.oxx.xl) = (CELL) S_SREG; | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       S_SREG++; | 
					
						
							|  |  |  |  |       *pt0 = (CELL) S_SREG; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oxx); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_y_var, oy); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *SREG++; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) { | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL)(SREG-1)); | 
					
						
							|  |  |  |  |       } else | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,d0); | 
					
						
							|  |  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_y_var_write, oy); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL) S_SREG); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_y_var, oy); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = SREG[0]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) { | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL)SREG); | 
					
						
							|  |  |  |  |       } else | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,d0); | 
					
						
							|  |  |  |  | #endif /* YAPOR_SBA */
 | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_y_var_write, oy); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL) S_SREG); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* We assume the value in X is pointing to an object in the
 | 
					
						
							|  |  |  |  |        * global stack */ | 
					
						
							|  |  |  |  |       Op(unify_x_val, ox); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, uvalx_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvalx_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, uvalx_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvalx_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       /* pt0 is in the structure and pt1 the register */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, uvalx_nonvar_unk, uvalx_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, uvalx_unk, uvalx_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, uvalx_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvalx_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, uvalx_var_unk, uvalx_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_x_val_write, ox); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       *SREG++ = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* We assume the value in X is pointing to an object in the
 | 
					
						
							|  |  |  |  |        * global stack */ | 
					
						
							|  |  |  |  |       Op(unify_l_x_val, ox); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulvalx_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvalx_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, ulvalx_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvalx_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, ulvalx_nonvar_unk, ulvalx_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulvalx_unk, ulvalx_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, ulvalx_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvalx_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, ulvalx_var_unk, ulvalx_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_x_val_write, ox); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       SREG[0] = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* We assume the value in X is pointing to an object in the
 | 
					
						
							|  |  |  |  |        * global stack */ | 
					
						
							|  |  |  |  |       Op(unify_y_val, oy); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, uvaly_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvaly_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, uvaly_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvaly_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, uvaly_nonvar_unk, uvaly_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, uvaly_unk, uvaly_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, uvaly_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvaly_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, uvaly_var_unk, uvaly_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_y_val_write, oy); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = YREG[PREG->y_u.oy.y]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) /* free variable */ | 
					
						
							|  |  |  |  | 	*SREG++ = (CELL)(YREG+PREG->y_u.oy.y); | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* We assume the value in X is pointing to an object in the
 | 
					
						
							|  |  |  |  |        * global stack */ | 
					
						
							|  |  |  |  |       Op(unify_l_y_val, oy); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulvaly_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvaly_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, ulvaly_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvaly_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, ulvaly_nonvar_unk, ulvaly_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulvaly_unk, ulvaly_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, ulvaly_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvaly_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* Here we are in trouble: we have a clash between pt1 and
 | 
					
						
							|  |  |  |  |        * SREG. We address this by storing SREG in d0 for the duration. */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, ulvaly_var_unk, ulvaly_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_y_val_write, oy); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = YREG[PREG->y_u.oy.y]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) /* new variable */ | 
					
						
							|  |  |  |  | 	SREG[0] = (CELL)(YREG+PREG->y_u.oy.y); | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	SREG[0] = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* In the next instructions, we do not know anything about
 | 
					
						
							|  |  |  |  |        * what is in X */ | 
					
						
							|  |  |  |  |       Op(unify_x_loc, ox); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, uvalx_loc_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvalx_loc_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, uvalx_loc_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvalx_loc_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, uvalx_loc_nonvar_unk, uvalx_loc_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, uvalx_loc_unk, uvalx_loc_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, uvalx_loc_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvalx_loc_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* Here we are in trouble: we have a clash between pt1 and
 | 
					
						
							|  |  |  |  |        * SREG. We address this by storing SREG in d0 for the duration. */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, uvalx_loc_var_unk, uvalx_loc_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyCells(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_x_loc_write, ox); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d0, unify_x_loc_unk); | 
					
						
							|  |  |  |  |     unify_x_loc_nonvar: | 
					
						
							|  |  |  |  |       *SREG++ = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, unify_x_loc_unk, unify_x_loc_nonvar); | 
					
						
							|  |  |  |  |       /* move ahead in the instructions */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       /* d0 is a variable, check whether we need to globalise it */ | 
					
						
							|  |  |  |  |       if (pt0 < HR) { | 
					
						
							|  |  |  |  | 	/* variable is global */ | 
					
						
							|  |  |  |  | 	*SREG++ = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	/* bind our variable to the structure */ | 
					
						
							|  |  |  |  | 	CACHE_S(); | 
					
						
							|  |  |  |  | 	READ_IN_S(); | 
					
						
							|  |  |  |  | 	Bind_Local(pt0, Unsigned(S_SREG)); | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  | 	WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  | 	ENDCACHE_S(); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* In the next instructions, we do not know anything about
 | 
					
						
							|  |  |  |  |        * what is in X */ | 
					
						
							|  |  |  |  |       Op(unify_l_x_loc, ox); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulvalx_loc_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvalx_loc_nonvar: | 
					
						
							|  |  |  |  |       /* first argument is bound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, ulvalx_loc_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvalx_loc_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       deref_body(d1, pt0, ulvalx_loc_nonvar_unk, ulvalx_loc_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       YapBind(pt0, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulvalx_loc_unk, ulvalx_loc_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d1, ulvalx_loc_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvalx_loc_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       deref_body(d1, pt1, ulvalx_loc_var_unk, ulvalx_loc_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_x_loc_write, ox); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.ox.x); | 
					
						
							|  |  |  |  |       deref_head(d0, ulnify_x_loc_unk); | 
					
						
							|  |  |  |  |     ulnify_x_loc_nonvar: | 
					
						
							|  |  |  |  |       SREG[0] = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, ulnify_x_loc_unk, ulnify_x_loc_nonvar); | 
					
						
							|  |  |  |  |       /* d0 is a variable, check whether we need to globalise it */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  |       if (pt0 < HR) { | 
					
						
							|  |  |  |  | 	/* variable is global */ | 
					
						
							|  |  |  |  | 	SREG[0] = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	/* create a new Heap variable and bind our variable to it */ | 
					
						
							|  |  |  |  | 	Bind_Local(pt0, Unsigned(SREG)); | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_y_loc, oy); | 
					
						
							|  |  |  |  |       /* we are in read mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, uvaly_loc_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvaly_loc_nonvar: | 
					
						
							|  |  |  |  |       /* structure is bound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 =  YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, uvaly_loc_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvaly_loc_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, uvaly_loc_nonvar_unk, uvaly_loc_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, uvaly_loc_unk, uvaly_loc_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, uvaly_loc_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     uvaly_loc_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* Here we are in trouble: we have a clash between pt1 and
 | 
					
						
							|  |  |  |  |        * SREG. We address this by storing SREG in d0 for the duration. */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, uvaly_loc_var_unk, uvaly_loc_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       UnifyCells(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_y_loc_write, oy); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, unify_y_loc_unk); | 
					
						
							|  |  |  |  |     unify_y_loc_nonvar: | 
					
						
							|  |  |  |  |       *SREG++ = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, unify_y_loc_unk, unify_y_loc_nonvar); | 
					
						
							|  |  |  |  |       /* d0 is a variable, check whether we need to globalise it */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       if (pt0 < HR) { | 
					
						
							|  |  |  |  | 	/* variable is global */ | 
					
						
							|  |  |  |  | 	*SREG++ = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	/* create a new Heap variable and bind our variable to it */ | 
					
						
							|  |  |  |  | 	CACHE_S(); | 
					
						
							|  |  |  |  | 	READ_IN_S(); | 
					
						
							|  |  |  |  | 	Bind_Local(pt0, Unsigned(S_SREG)); | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  | 	WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  | 	ENDCACHE_S(); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_y_loc, oy); | 
					
						
							|  |  |  |  |       /* else we are in read mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulvaly_loc_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvaly_loc_nonvar: | 
					
						
							|  |  |  |  |       /* structure is bound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, ulvaly_loc_nonvar_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvaly_loc_nonvar_nonvar: | 
					
						
							|  |  |  |  |       /* both arguments are bound */ | 
					
						
							|  |  |  |  |       /* we may have to bind structures */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       UnifyBound(d0, d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* deref second argument */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, ulvaly_loc_nonvar_unk, ulvaly_loc_nonvar_nonvar); | 
					
						
							|  |  |  |  |       /* first argument bound, second unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       YapBind(pt1, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* first argument may be unbound */ | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulvaly_loc_unk, ulvaly_loc_nonvar); | 
					
						
							|  |  |  |  |       /* first argument is unbound */ | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d1 = *pt1; | 
					
						
							|  |  |  |  |       deref_head(d1, ulvaly_loc_var_unk); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     ulvaly_loc_var_nonvar: | 
					
						
							|  |  |  |  |       /* first unbound, second bound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       /* Here we are in trouble: we have a clash between pt1 and
 | 
					
						
							|  |  |  |  |        * SREG. We address this by storing SREG in d0 for the duration. */ | 
					
						
							|  |  |  |  |       derefa_body(d1, pt1, ulvaly_loc_var_unk, ulvaly_loc_var_nonvar); | 
					
						
							|  |  |  |  |       /* both arguments are unbound */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       UnifyGlobalCellToCell(pt0, pt1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_y_loc_write, oy); | 
					
						
							|  |  |  |  |       /* we are in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = YREG+PREG->y_u.oy.y; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulunify_y_loc_unk); | 
					
						
							|  |  |  |  |     ulunify_y_loc_nonvar: | 
					
						
							|  |  |  |  |       SREG[0] = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulunify_y_loc_unk, ulunify_y_loc_nonvar); | 
					
						
							|  |  |  |  |       /* d0 is a variable, check whether we need to globalise it */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  |       if (pt0 < HR) { | 
					
						
							|  |  |  |  | 	/* variable is global */ | 
					
						
							|  |  |  |  | 	SREG[0] = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	/* create a new Heap variable and bind our variable to it */ | 
					
						
							|  |  |  |  | 	CACHE_S(); | 
					
						
							|  |  |  |  | 	READ_IN_S(); | 
					
						
							|  |  |  |  | 	Bind_Local(pt0, Unsigned(S_SREG)); | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  | 	ENDCACHE_S(); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_void, o); | 
					
						
							|  |  |  |  |       START_PREFETCH(o); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_void_write, o); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_void, o); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_void_write, o); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_n_voids, os); | 
					
						
							|  |  |  |  |       SREG += PREG->y_u.os.s; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, os); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_n_voids_write, os); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.os.s; | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, os); | 
					
						
							|  |  |  |  |       for (; d0 > 0; d0--) { | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  | 	S_SREG++; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_n_voids, os); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, os); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_n_voids_write, os); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.os.s; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, os); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       for (; d0 > 0; d0--) { | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(S_SREG); | 
					
						
							|  |  |  |  | 	S_SREG++; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_atom, oc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG++; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, uatom_unk); | 
					
						
							|  |  |  |  |     uatom_nonvar: | 
					
						
							|  |  |  |  |       if (d0 != PREG->y_u.oc.c) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oc); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, uatom_unk, uatom_nonvar); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.oc.c; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oc); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_atom_write, oc); | 
					
						
							|  |  |  |  |       * SREG++ = PREG->y_u.oc.c; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oc); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_atom, oc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *SREG; | 
					
						
							|  |  |  |  |       deref_head(d0, ulatom_unk); | 
					
						
							|  |  |  |  |     ulatom_nonvar: | 
					
						
							|  |  |  |  |       if (d0 != PREG->y_u.oc.c) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oc); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulatom_unk, ulatom_nonvar); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.oc.c; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oc); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_atom_write, oc); | 
					
						
							|  |  |  |  |       SREG[0] = PREG->y_u.oc.c; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oc); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_n_atoms, osc); | 
					
						
							|  |  |  |  |       { | 
					
						
							|  |  |  |  | 	register Int i = PREG->y_u.osc.s;             /* not enough registers */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	BEGD(d1); | 
					
						
							|  |  |  |  | 	d1 = PREG->y_u.osc.c; | 
					
						
							|  |  |  |  | 	for (; i > 0; i--) { | 
					
						
							|  |  |  |  | 	  BEGD(d0); | 
					
						
							|  |  |  |  | 	  BEGP(pt0); | 
					
						
							|  |  |  |  | 	  pt0 = SREG++; | 
					
						
							|  |  |  |  | 	  d0 = *pt0; | 
					
						
							|  |  |  |  | 	  deref_head(d0, uatom_n_var); | 
					
						
							|  |  |  |  | 	uatom_n_nonvar: | 
					
						
							|  |  |  |  | 	  if (d0 != d1) { | 
					
						
							|  |  |  |  | 	    FAIL(); | 
					
						
							|  |  |  |  | 	  } | 
					
						
							|  |  |  |  | 	  continue; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	  derefa_body(d0, pt0, uatom_n_var, uatom_n_nonvar); | 
					
						
							|  |  |  |  | 	  Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  | 	  continue; | 
					
						
							|  |  |  |  | 	  ENDP(pt0); | 
					
						
							|  |  |  |  | 	  ENDD(d0); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	ENDD(d1); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, osc); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_n_atoms_write, osc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.osc.s; | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.osc.c; | 
					
						
							|  |  |  |  |       /* write N atoms */ | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, osc); | 
					
						
							|  |  |  |  |       for (; d0 > 0; d0--) | 
					
						
							|  |  |  |  | 	*S_SREG++ = d1; | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_float, od); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG++; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ufloat_unk); | 
					
						
							|  |  |  |  |     ufloat_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       /* look inside term */ | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorDouble) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = PREG->y_u.od.d; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, od); | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  | 	  pt1[1] != pt0[1] | 
					
						
							|  |  |  |  | #if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
 | 
					
						
							|  |  |  |  | 	  || pt1[2] != pt0[2] | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	  ) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ufloat_unk, ufloat_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(PREG->y_u.od.d); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, od); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_float_write, od); | 
					
						
							|  |  |  |  |       * SREG++ = AbsAppl(PREG->y_u.od.d); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, od); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_float, od); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       d0 = *S_SREG; | 
					
						
							|  |  |  |  |       deref_head(d0, ulfloat_unk); | 
					
						
							|  |  |  |  |     ulfloat_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorDouble) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = PREG->y_u.od.d; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, od); | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  | 	  pt1[1] != pt0[1] | 
					
						
							|  |  |  |  | #if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
 | 
					
						
							|  |  |  |  | 	  || pt1[2] != pt0[2] | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	  ) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, S_SREG, ulfloat_unk, ulfloat_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(PREG->y_u.od.d); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, od); | 
					
						
							|  |  |  |  |       Bind_Global(S_SREG, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_float_write, od); | 
					
						
							|  |  |  |  |       SREG[0] = AbsAppl(PREG->y_u.od.d); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, od); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_string, ou); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG++; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ustring_unk); | 
					
						
							|  |  |  |  |     ustring_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       /* look inside term */ | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorString) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = RepAppl(PREG->y_u.ou.ut); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ou); | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  | 	  pt1[1] != pt0[1] | 
					
						
							|  |  |  |  | 	  || strcmp( (const char *)(pt1 + 2), (const char *)(pt0+2) ) | 
					
						
							|  |  |  |  | 	  ) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ustring_unk, ustring_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.ou.ut; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ou); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_string, ou); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       d0 = *S_SREG; | 
					
						
							|  |  |  |  |       deref_head(d0, ulstring_unk); | 
					
						
							|  |  |  |  |     ulstring_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorString) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = RepAppl(PREG->y_u.ou.ut); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ou); | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  | 	  pt1[1] != pt0[1] | 
					
						
							|  |  |  |  | 	  || strcmp( (const char *)(pt1 + 2), (const char *)(pt0+2) ) | 
					
						
							|  |  |  |  | 	  ) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, S_SREG, ulstring_unk, ulstring_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.ou.ut; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ou); | 
					
						
							|  |  |  |  |       Bind_Global(S_SREG, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_longint, oi); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG++; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulongint_unk); | 
					
						
							|  |  |  |  |     ulongint_nonvar: | 
					
						
							|  |  |  |  |       /* look inside term */ | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorLongInt) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = PREG->y_u.oi.i; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oi); | 
					
						
							|  |  |  |  |       if (pt1[1] != pt0[1]) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulongint_unk, ulongint_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(PREG->y_u.oi.i); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oi); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_longint_write, oi); | 
					
						
							|  |  |  |  |       * SREG++ = AbsAppl(PREG->y_u.oi.i); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oi); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_longint, oi); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       d0 = *S_SREG; | 
					
						
							|  |  |  |  |       deref_head(d0, ullongint_unk); | 
					
						
							|  |  |  |  |     ullongint_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorLongInt) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt1); | 
					
						
							|  |  |  |  |       pt1 = PREG->y_u.oi.i; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oi); | 
					
						
							|  |  |  |  |       if (pt1[1] != pt0[1]) FAIL(); | 
					
						
							|  |  |  |  |       ENDP(pt1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, S_SREG, ullongint_unk, ullongint_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(PREG->y_u.oi.i); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oi); | 
					
						
							|  |  |  |  |       Bind_Global(S_SREG, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_longint_write, oi); | 
					
						
							|  |  |  |  |       SREG[0] = AbsAppl(PREG->y_u.oi.i); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oi); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_bigint, oN); | 
					
						
							|  |  |  |  | #ifdef USE_GMP
 | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG++; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ubigint_unk); | 
					
						
							|  |  |  |  |     ubigint_nonvar: | 
					
						
							|  |  |  |  |       /* look inside term */ | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = *pt0; | 
					
						
							|  |  |  |  |       if (d1 != (CELL)FunctorBigInt) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	  FAIL(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       if (Yap_gmp_tcmp_big_big(d0,PREG->y_u.oN.b)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oN); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ubigint_unk, ubigint_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.oN.b; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oN); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  |       FAIL(); | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_bigint, oN); | 
					
						
							|  |  |  |  | #ifdef USE_GMP
 | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       d0 = *S_SREG; | 
					
						
							|  |  |  |  |       deref_head(d0, ulbigint_unk); | 
					
						
							|  |  |  |  |     ulbigint_nonvar: | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = RepAppl(d0); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       if (d0 != (CELL)FunctorBigInt) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	  FAIL(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       if (Yap_gmp_tcmp_big_big(d0,PREG->y_u.oN.b)) | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oN); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, S_SREG, ulbigint_unk, ulbigint_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.oN.b; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oN); | 
					
						
							|  |  |  |  |       Bind_Global(S_SREG, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  |       FAIL(); | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_dbterm, oD); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG++; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, udbterm_unk); | 
					
						
							|  |  |  |  |     udbterm_nonvar: | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* we have met a preexisting dbterm */ | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.oD.D; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oD); | 
					
						
							|  |  |  |  |       UnifyBound(d0,d1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, udbterm_unk, udbterm_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.oD.D; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oD); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(unify_l_dbterm, oD); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       d0 = *S_SREG; | 
					
						
							|  |  |  |  |       deref_head(d0, uldbterm_unk); | 
					
						
							|  |  |  |  |     uldbterm_nonvar: | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       /* we have met a preexisting dbterm */ | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.oD.D; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oD); | 
					
						
							|  |  |  |  |       UnifyBound(d0,d1); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, S_SREG, uldbterm_unk, uldbterm_nonvar); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = PREG->y_u.oD.D; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, oD); | 
					
						
							|  |  |  |  |       Bind_Global(S_SREG, d1); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(unify_list, o); | 
					
						
							|  |  |  |  |       *--SP = Unsigned(SREG + 1); | 
					
						
							|  |  |  |  |       *--SP = READ_MODE; | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulist_unk); | 
					
						
							|  |  |  |  |     ulist_nonvar: | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       /* we continue in read mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH(o); | 
					
						
							|  |  |  |  |       SREG = RepPair(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulist_unk, ulist_nonvar); | 
					
						
							|  |  |  |  |       /* we enter write mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH_W(o); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       d0 = AbsPair(S_SREG); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d0); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_list_write, o); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsPair(HR); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       SP -= 2; | 
					
						
							|  |  |  |  |       SP[0] = WRITE_MODE; | 
					
						
							|  |  |  |  |       SP[1] = Unsigned(S_SREG + 1); | 
					
						
							|  |  |  |  |       S_SREG[0] = d0; | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(unify_l_list, o); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ullist_unk); | 
					
						
							|  |  |  |  |     ullist_nonvar: | 
					
						
							|  |  |  |  |       START_PREFETCH(o); | 
					
						
							|  |  |  |  |       if (!IsPairTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       /* we continue in read mode */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       SREG = RepPair(d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ullist_unk, ullist_nonvar); | 
					
						
							|  |  |  |  |       /* we enter write mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH_W(o); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       d0 = AbsPair(S_SREG); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d0); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_l_list_write, o); | 
					
						
							|  |  |  |  |       /* we continue in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsPair(HR); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, o); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       S_SREG[0] = d0; | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       HR = S_SREG + 2; | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(unify_struct, ofa); | 
					
						
							|  |  |  |  |       *--SP = Unsigned(SREG + 1); | 
					
						
							|  |  |  |  |       *--SP = READ_MODE; | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       START_PREFETCH(ofa); | 
					
						
							|  |  |  |  |       deref_head(d0, ustruct_unk); | 
					
						
							|  |  |  |  |     ustruct_nonvar: | 
					
						
							|  |  |  |  |       /* we are in read mode */ | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       /* we continue in read mode */ | 
					
						
							|  |  |  |  |       S_SREG = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* just check functor */ | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.ofa.f); | 
					
						
							|  |  |  |  |       if (*S_SREG != d0) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ofa); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG+1); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ustruct_unk, ustruct_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH_W(ofa); | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(HR); | 
					
						
							|  |  |  |  |       /* we know the variable must be in the heap */ | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       /* now, set pt0 to point to the heap where we are going to
 | 
					
						
							|  |  |  |  |        * build our term */ | 
					
						
							|  |  |  |  |       pt0 = HR; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       /* first, put the functor */ | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.ofa.f); | 
					
						
							|  |  |  |  |       *pt0++ = d0; | 
					
						
							|  |  |  |  |       HR = pt0 + PREG->y_u.ofa.a; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ofa); | 
					
						
							|  |  |  |  |       /* set SREG */ | 
					
						
							|  |  |  |  |       SREG = pt0; | 
					
						
							|  |  |  |  |       /* update H */ | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_struct_write, ofa); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       *--SP = Unsigned(S_SREG + 1); | 
					
						
							|  |  |  |  |       *--SP = WRITE_MODE; | 
					
						
							|  |  |  |  |       /* we continue in write mode */ | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsAppl(HR); | 
					
						
							|  |  |  |  |       S_SREG[0] = d0; | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.ofa.f); | 
					
						
							|  |  |  |  |       *S_SREG++ = d0; | 
					
						
							|  |  |  |  |       HR = S_SREG + PREG->y_u.ofa.a; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ofa); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpRW(unify_l_struc, ofa); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = SREG; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, ulstruct_unk); | 
					
						
							|  |  |  |  |     ulstruct_nonvar: | 
					
						
							|  |  |  |  |       /* we are in read mode */ | 
					
						
							|  |  |  |  |       START_PREFETCH(ofa); | 
					
						
							|  |  |  |  |       if (!IsApplTerm(d0)) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       /* we continue in read mode */ | 
					
						
							|  |  |  |  |       SREG = RepAppl(d0); | 
					
						
							|  |  |  |  |       /* just check functor */ | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.ofa.f); | 
					
						
							|  |  |  |  |       if (*SREG++ != d0) { | 
					
						
							|  |  |  |  | 	FAIL(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ofa); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       END_PREFETCH(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       derefa_body(d0, pt0, ulstruct_unk, ulstruct_nonvar); | 
					
						
							|  |  |  |  |       /* Enter Write mode */ | 
					
						
							|  |  |  |  |       /* set d1 to be the new structure we are going to create */ | 
					
						
							|  |  |  |  |       START_PREFETCH_W(ofa); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = AbsAppl(HR); | 
					
						
							|  |  |  |  |       /* we know the variable must be in the heap */ | 
					
						
							|  |  |  |  |       Bind_Global(pt0, d1); | 
					
						
							|  |  |  |  |       /* now, set pt0 to point to the heap where we are going to
 | 
					
						
							|  |  |  |  |        * build our term */ | 
					
						
							|  |  |  |  |       pt0 = HR; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       /* first, put the functor */ | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.ofa.f); | 
					
						
							|  |  |  |  |       *pt0++ = d0; | 
					
						
							|  |  |  |  |       HR = pt0 + PREG->y_u.ofa.a; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ofa); | 
					
						
							|  |  |  |  |       /* set SREG */ | 
					
						
							|  |  |  |  |       SREG = pt0; | 
					
						
							|  |  |  |  |       /* update H */ | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       END_PREFETCH_W(); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOpRW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       OpW(unify_l_struc_write, ofa); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsAppl(HR); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       S_SREG[0] = d0; | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.ofa.f); | 
					
						
							|  |  |  |  |       *S_SREG++ = d0; | 
					
						
							|  |  |  |  |       HR = S_SREG + PREG->y_u.ofa.a; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, ofa); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONextW(); | 
					
						
							|  |  |  |  |       ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  |       /************************************************************************\
 | 
					
						
							|  |  |  |  |        * Put Instructions                                                      * | 
					
						
							|  |  |  |  | \************************************************************************/ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_x_var, xx); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = HR; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xx.xl) = Unsigned(pt0); | 
					
						
							|  |  |  |  |       HR = pt0 + 1; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xx.xr) = Unsigned(pt0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(pt0); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_y_var, yx); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = YREG + PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.yx.x) = (CELL) pt0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  | #if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
 | 
					
						
							| 
									
										
										
										
											2015-11-05 16:35:25 +00:00
										 |  |  |  |       /* We must initialize a shared variable to point to the SBA */ | 
					
						
							| 
									
										
										
										
											2015-01-18 03:00:19 +00:00
										 |  |  |  |       if (Unsigned((Int)(pt0)-(Int)(H_FZ)) > | 
					
						
							|  |  |  |  | 	  Unsigned((Int)(B_FZ)-(Int)(H_FZ))) { | 
					
						
							|  |  |  |  | 	*pt0 =  (CELL)STACK_TO_SBA(pt0); | 
					
						
							|  |  |  |  |       } else | 
					
						
							|  |  |  |  | #endif /* YAPOR_SBA && FROZEN_STACKS */
 | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(pt0, (CELL)pt0); | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_x_val, xx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xx.xl); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xx.xr) = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xx); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_xx_val, xxxx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.xxxx.xl1); | 
					
						
							|  |  |  |  |       d1 = XREG(PREG->y_u.xxxx.xl2); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xxxx.xr1) = d0; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xxxx.xr2) = d1; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xxxx); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_y_val, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = YREG[PREG->y_u.yx.y]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) /* new variable */ | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.yx.x) = (CELL)(YREG+PREG->y_u.yx.y); | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.yx.x) = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_y_vals, yyxx); | 
					
						
							|  |  |  |  |       ALWAYS_START_PREFETCH(yyxx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = YREG[PREG->y_u.yyxx.y1]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d0 == 0) /* new variable */ | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.yyxx.x1) = (CELL)(YREG+PREG->y_u.yyxx.y1); | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.yyxx.x1) = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       /* allow for some prefetching */ | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yyxx); | 
					
						
							|  |  |  |  |       BEGD(d1); | 
					
						
							|  |  |  |  |       d1 = YREG[PREVOP(PREG,yyxx)->y_u.yyxx.y2]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  |       if (d1 == 0) /* new variable */ | 
					
						
							|  |  |  |  | 	XREG(PREVOP(PREG->y_u.yyxx,yyxx).x2) = (CELL)(YREG+PREG->y_u.yyxx.y2); | 
					
						
							|  |  |  |  |       else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	XREG(PREVOP(PREG,yyxx)->y_u.yyxx.x2) = d1; | 
					
						
							|  |  |  |  |       ENDD(d1); | 
					
						
							|  |  |  |  |       ALWAYS_GONext(); | 
					
						
							|  |  |  |  |       ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_unsafe, yx); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       pt0 = YREG+PREG->y_u.yx.y; | 
					
						
							|  |  |  |  |       d0 = *pt0; | 
					
						
							|  |  |  |  |       deref_head(d0, punsafe_unk); | 
					
						
							|  |  |  |  |     punsafe_nonvar: | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.yx.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-09 19:05:36 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-18 03:00:19 +00:00
										 |  |  |  |       derefa_body(d0, pt0, punsafe_unk, punsafe_nonvar); | 
					
						
							|  |  |  |  |       /* d0 is a variable, check whether we need to globalise it */ | 
					
						
							|  |  |  |  |       if (pt0 <= HR || pt0 >= YREG) { | 
					
						
							|  |  |  |  | 	/* variable is safe */ | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.yx.x) = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       else { | 
					
						
							|  |  |  |  | 	/* create a new Heap variable and bind our variable to it */ | 
					
						
							|  |  |  |  | 	Bind_Local(pt0, Unsigned(HR)); | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.yx.x) = (CELL) HR; | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(HR); | 
					
						
							|  |  |  |  | 	HR++; | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, yx); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDP(pt0); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_atom, xc); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.xc.c; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xc.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xc); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_dbterm, xD); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.xD.D; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xD.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xD); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_bigint, xN); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.xN.b; | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xN.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xN); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_float, xd); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsAppl(PREG->y_u.xd.d); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xd.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xd); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_longint, xi); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsAppl(PREG->y_u.xi.i); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xi.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xi); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_list, x); | 
					
						
							|  |  |  |  |       CACHE_S(); | 
					
						
							|  |  |  |  |       READ_IN_S(); | 
					
						
							|  |  |  |  |       S_SREG = HR; | 
					
						
							|  |  |  |  |       HR += 2; | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsPair(S_SREG); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.x.x) = d0; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       WRITEBACK_S(S_SREG); | 
					
						
							|  |  |  |  |       ENDCACHE_S(); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(put_struct, xfa); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = AbsAppl(HR); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.xfa.x) = d0; | 
					
						
							|  |  |  |  |       d0 = (CELL) (PREG->y_u.xfa.f); | 
					
						
							|  |  |  |  |       *HR++ = d0; | 
					
						
							|  |  |  |  |       SREG = HR; | 
					
						
							|  |  |  |  |       HR += PREG->y_u.xfa.a; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, xfa); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  |       /************************************************************************\
 | 
					
						
							|  |  |  |  |        *      Write Instructions                                              * | 
					
						
							|  |  |  |  | \************************************************************************/ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(write_x_var, x); | 
					
						
							|  |  |  |  |       XREG(PREG->y_u.x.x) = Unsigned(SREG); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(write_void, e); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, e); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(write_n_voids, s); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = PREG->y_u.s.s; | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, s); | 
					
						
							|  |  |  |  |       for (; d0 > 0; d0--) { | 
					
						
							|  |  |  |  | 	RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  | 	SREG++; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(write_y_var, y); | 
					
						
							|  |  |  |  |       INITIALIZE_PERMVAR(YREG+PREG->y_u.y.y,Unsigned(SREG)); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, y); | 
					
						
							|  |  |  |  |       RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  |       SREG++; | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(write_x_val, x); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.x.x); | 
					
						
							|  |  |  |  |       *SREG++ = d0; | 
					
						
							|  |  |  |  |       ENDD(d0); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  |       ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Op(write_x_loc, x); | 
					
						
							|  |  |  |  |       BEGD(d0); | 
					
						
							|  |  |  |  |       d0 = XREG(PREG->y_u.x.x); | 
					
						
							|  |  |  |  |       PREG = NEXTOP(PREG, x); | 
					
						
							|  |  |  |  |       deref_head(d0, w_x_unk); | 
					
						
							|  |  |  |  |     w_x_bound: | 
					
						
							|  |  |  |  |       *SREG++ = d0; | 
					
						
							|  |  |  |  |       GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       BEGP(pt0); | 
					
						
							|  |  |  |  |       deref_body(d0, pt0, w_x_unk, w_x_bound); | 
					
						
							|  |  |  |  | #if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
 | 
					
						
							|  |  |  |  |       if (pt0 > HR && pt0<(CELL *)B_FZ) { | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  | 	if (pt0 > HR) { | 
					
						
							|  |  |  |  | #endif /* YAPOR_SBA && FROZEN_STACKS */
 | 
					
						
							|  |  |  |  | 	  /* local variable: let us bind it to the list */ | 
					
						
							|  |  |  |  | #ifdef FROZEN_STACKS  /* TRAIL */
 | 
					
						
							|  |  |  |  | 	  Bind_Local(pt0, Unsigned(SREG)); | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  | 	  TRAIL_LOCAL(pt0, Unsigned(SREG)); | 
					
						
							|  |  |  |  | 	  *pt0 = Unsigned(SREG); | 
					
						
							|  |  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  |  | 	  RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  | 	  SREG++; | 
					
						
							|  |  |  |  | 	  GONext(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else { | 
					
						
							|  |  |  |  | 	  *SREG++ = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	  GONext(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	ENDP(pt0); | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_y_val, y); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = YREG[PREG->y_u.y.y]; | 
					
						
							|  |  |  |  | #ifdef YAPOR_SBA
 | 
					
						
							|  |  |  |  | 	if (d0 == 0) /* new variable */ | 
					
						
							|  |  |  |  | 	  *SREG++ = (CELL)(YREG+PREG->y_u.y.y); | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | #endif
 | 
					
						
							|  |  |  |  | 	  *SREG++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, y); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_y_loc, y); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	BEGP(pt0); | 
					
						
							|  |  |  |  | 	pt0 = YREG+PREG->y_u.y.y; | 
					
						
							|  |  |  |  | 	d0 = *pt0; | 
					
						
							|  |  |  |  | 	deref_head(d0, w_y_unk); | 
					
						
							|  |  |  |  |       w_y_bound: | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, y); | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	derefa_body(d0, pt0, w_y_unk, w_y_bound); | 
					
						
							|  |  |  |  | 	if (pt0 > HR | 
					
						
							|  |  |  |  | #if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
 | 
					
						
							|  |  |  |  | 	    && pt0<(CELL *)B_FZ | 
					
						
							|  |  |  |  | #endif /* YAPOR_SBA && FROZEN_STACKS */
 | 
					
						
							|  |  |  |  | 	    ) { | 
					
						
							|  |  |  |  | 	  PREG = NEXTOP(PREG, y); | 
					
						
							|  |  |  |  | 	  /* local variable: let us bind it to the list */ | 
					
						
							|  |  |  |  | #ifdef FROZEN_STACKS
 | 
					
						
							|  |  |  |  | 	  Bind_Local(pt0, Unsigned(SREG)); | 
					
						
							|  |  |  |  | #else
 | 
					
						
							|  |  |  |  | 	  *pt0 = Unsigned(SREG); | 
					
						
							|  |  |  |  | 	  TRAIL_LOCAL(pt0, Unsigned(SREG)); | 
					
						
							|  |  |  |  | #endif /* FROZEN_STACKS */
 | 
					
						
							|  |  |  |  | 	  RESET_VARIABLE(SREG); | 
					
						
							|  |  |  |  | 	  SREG++; | 
					
						
							|  |  |  |  | 	  GONext(); | 
					
						
							|  |  |  |  | 	} else { | 
					
						
							|  |  |  |  | 	  PREG = NEXTOP(PREG, y); | 
					
						
							|  |  |  |  | 	  *SREG++ = Unsigned(pt0); | 
					
						
							|  |  |  |  | 	  GONext(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	ENDP(pt0); | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_atom, c); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = PREG->y_u.c.c; | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, c); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_bigint, N); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = PREG->y_u.N.b; | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, N); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_dbterm, D); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = PREG->y_u.D.D; | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, D); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_float, d); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = AbsAppl(PREG->y_u.d.d); | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, d); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_longint, i); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = AbsAppl(PREG->y_u.i.i); | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, i); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_n_atoms, sc); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	BEGD(d1); | 
					
						
							|  |  |  |  | 	d0 = PREG->y_u.sc.s; | 
					
						
							|  |  |  |  | 	d1 = PREG->y_u.sc.c; | 
					
						
							|  |  |  |  | 	for (; d0 > 0; d0--) | 
					
						
							|  |  |  |  | 	  *SREG++ = d1; | 
					
						
							|  |  |  |  | 	ENDD(d1); | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, sc); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_list, e); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = AbsPair(HR); | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	/* I will not actually store the mode in the stack */ | 
					
						
							|  |  |  |  | 	SP[-1] = Unsigned(SREG); | 
					
						
							|  |  |  |  | 	SP[-2] = 1;           /* Put instructions follow the main stream */ | 
					
						
							|  |  |  |  | 	SP -= 2; | 
					
						
							|  |  |  |  | 	SREG = HR; | 
					
						
							|  |  |  |  | 	HR += 2; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, e); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_l_list, e); | 
					
						
							|  |  |  |  | 	ALWAYS_START_PREFETCH(e); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, e); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	CACHE_S(); | 
					
						
							|  |  |  |  | 	READ_IN_S(); | 
					
						
							|  |  |  |  | 	d0 = AbsPair(HR); | 
					
						
							|  |  |  |  | 	*S_SREG = d0; | 
					
						
							|  |  |  |  | 	WRITEBACK_S(HR); | 
					
						
							|  |  |  |  | 	HR += 2; | 
					
						
							|  |  |  |  | 	ENDCACHE_S(); | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	ALWAYS_GONext(); | 
					
						
							|  |  |  |  | 	ALWAYS_END_PREFETCH(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_struct, fa); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = AbsAppl(HR); | 
					
						
							|  |  |  |  | 	*SREG++ = d0; | 
					
						
							|  |  |  |  | 	SP[-1] = Unsigned(SREG); | 
					
						
							|  |  |  |  | 	SP[-2] = 1;           /* Put instructions follow the main stream */ | 
					
						
							|  |  |  |  | 	SP -= 2; | 
					
						
							|  |  |  |  | 	d0 = (CELL) (PREG->y_u.fa.f); | 
					
						
							|  |  |  |  | 	*HR++ = d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = PREG->y_u.fa.a; | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, fa); | 
					
						
							|  |  |  |  | 	SREG = HR; | 
					
						
							|  |  |  |  | 	HR += d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(write_l_struc, fa); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = AbsAppl(HR); | 
					
						
							|  |  |  |  | 	*SREG = d0; | 
					
						
							|  |  |  |  | 	d0 = (CELL) (PREG->y_u.fa.f); | 
					
						
							|  |  |  |  | 	*HR++ = d0; | 
					
						
							|  |  |  |  | 	SREG = HR; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	BEGD(d0); | 
					
						
							|  |  |  |  | 	d0 = PREG->y_u.fa.a; | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, fa); | 
					
						
							|  |  |  |  | 	HR += d0; | 
					
						
							|  |  |  |  | 	ENDD(d0); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  | 	/************************************************************************\
 | 
					
						
							|  |  |  |  | 	 *   Save last unified struct or list                                 * | 
					
						
							|  |  |  |  | \************************************************************************/ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	/* vitor: I think I should kill these two instructions, by expanding the
 | 
					
						
							|  |  |  |  | 	 * othe instructions. | 
					
						
							|  |  |  |  | 	 */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(save_pair_x, ox); | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.ox.x) = AbsPair(SREG); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	OpW(save_pair_x_write, ox); | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.ox.x) = AbsPair(SREG); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  | 	ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(save_pair_y, oy); | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsPair(SREG)); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	OpW(save_pair_y_write, oy); | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsPair(SREG)); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  | 	ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(save_appl_x, ox); | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.ox.x) = AbsAppl(SREG - 1); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	OpW(save_appl_x_write, ox); | 
					
						
							|  |  |  |  | 	XREG(PREG->y_u.ox.x) = AbsAppl(SREG - 1); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, ox); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  | 	ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	Op(save_appl_y, oy); | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsAppl(SREG-1)); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  | 	GONext(); | 
					
						
							|  |  |  |  | 	ENDOp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	OpW(save_appl_y_write, oy); | 
					
						
							|  |  |  |  | 	INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsAppl(SREG-1)); | 
					
						
							|  |  |  |  | 	PREG = NEXTOP(PREG, oy); | 
					
						
							|  |  |  |  | 	GONextW(); | 
					
						
							|  |  |  |  | 	ENDOpW(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |        |