13 d0 = XREG(PREG->y_u.xx.xr);
14 XREG(PREG->y_u.xx.xl) = d0;
15 PREG = NEXTOP(PREG, xx);
23 pt0 = YREG + PREG->y_u.yx.y;
24 d0 = XREG(PREG->y_u.yx.x);
25 PREG = NEXTOP(PREG, yx);
26 INITIALIZE_PERMVAR(pt0,d0);
36 pt0 = S_YREG + PREG->y_u.yyxx.y1;
37 d0 = XREG(PREG->y_u.yyxx.x1);
40 pt1 = S_YREG + PREG->y_u.yyx.y2;
41 d1 = XREG(PREG->y_u.yyxx.x2);
42 PREG = NEXTOP(PREG, yyxx);
43 INITIALIZE_PERMVAR(pt0,d0);
44 INITIALIZE_PERMVAR(pt1,d1);
59 d0 = XREG(PREG->y_u.xx.xl);
60 deref_head(d0, gvalx_unk);
66 d1 = XREG(PREG->y_u.xx.xr);
67 deref_head(d1, gvalx_nonvar_unk);
72 PREG = NEXTOP(PREG, xx);
77 deref_body(d1, pt0, gvalx_nonvar_unk, gvalx_nonvar_nonvar);
79 PREG = NEXTOP(PREG, xx);
88 deref_body(d0, pt0, gvalx_unk, gvalx_nonvar);
91 d1 = XREG(PREG->y_u.xx.xr);
92 deref_head(d1, gvalx_var_unk);
96 PREG = NEXTOP(PREG, xx);
101 deref_body(d1, pt1, gvalx_var_unk, gvalx_var_nonvar);
103 PREG = NEXTOP(PREG, xx);
104 UnifyCells(pt0, pt1);
119 pt0 = YREG + PREG->y_u.yx.y;
124 deref_head(d0, gvaly_unk);
128 d1 = XREG(PREG->y_u.yx.x);
129 deref_head(d1, gvaly_nonvar_unk);
134 PREG = NEXTOP(PREG, yx);
139 deref_body(d1, pt1, gvaly_nonvar_unk, gvaly_nonvar_nonvar);
141 PREG = NEXTOP(PREG, yx);
148 derefa_body(d0, pt0, gvaly_unk, gvaly_nonvar);
150 d1 = XREG(PREG->y_u.yx.x);
151 deref_head(d1, gvaly_var_unk);
155 PREG = NEXTOP(PREG, yx);
160 deref_body(d1, pt1, gvaly_var_unk, gvaly_var_nonvar);
162 PREG = NEXTOP(PREG, yx);
163 UnifyCells(pt0, pt1);
175 d0 = XREG(PREG->y_u.xc.x);
179 deref_head(d0, gatom_unk);
183 PREG = NEXTOP(PREG, xc);
190 deref_body(d0, pt0, gatom_unk, gatom_nonvar);
192 PREG = NEXTOP(PREG, xc);
204 d0 = XREG(PREG->y_u.x.x);
209 deref_head(d0, gatom_exo_unk);
213 PREG = NEXTOP(PREG, x);
220 deref_body(d0, pt0, gatom_exo_unk, gatom_exo_nonvar);
223 PREG = NEXTOP(PREG, x);
238 deref_head(d0, gatom_2unk);
241 if (d0 == PREG->y_u.cc.c1) {
248 deref_body(d0, pt0, gatom_2unk, gatom_2nonvar);
250 YapBind(pt0, PREG->y_u.cc.c1);
255 d1 = PREG->y_u.cc.c2;
258 deref_head(d0, gatom_2bunk);
262 PREG = NEXTOP(PREG, cc);
269 deref_body(d0, pt0, gatom_2bunk, gatom_2bnonvar);
271 PREG = NEXTOP(PREG, cc);
286 deref_head(d0, gatom_3unk);
289 if (d0 == PREG->y_u.ccc.c1) {
296 deref_body(d0, pt0, gatom_3unk, gatom_3nonvar);
298 YapBind(pt0, PREG->y_u.ccc.c1);
305 deref_head(d0, gatom_3bunk);
308 if (d0 == PREG->y_u.ccc.c2) {
315 deref_body(d0, pt0, gatom_3bunk, gatom_3bnonvar);
317 YapBind(pt0, PREG->y_u.ccc.c2);
322 d1 = PREG->y_u.ccc.c3;
325 deref_head(d0, gatom_3cunk);
329 PREG = NEXTOP(PREG, ccc);
336 deref_body(d0, pt0, gatom_3cunk, gatom_3cnonvar);
338 PREG = NEXTOP(PREG, ccc);
346 Op(get_4atoms, cccc);
353 deref_head(d0, gatom_4unk);
356 if (d0 == PREG->y_u.cccc.c1) {
363 deref_body(d0, pt0, gatom_4unk, gatom_4nonvar);
365 YapBind(pt0, PREG->y_u.cccc.c1);
372 deref_head(d0, gatom_4bunk);
375 if (d0 == PREG->y_u.cccc.c2) {
382 deref_body(d0, pt0, gatom_4bunk, gatom_4bnonvar);
384 YapBind(pt0, PREG->y_u.cccc.c2);
391 deref_head(d0, gatom_4cunk);
394 if (d0 == PREG->y_u.cccc.c3) {
401 deref_body(d0, pt0, gatom_4cunk, gatom_4cnonvar);
403 YapBind(pt0, PREG->y_u.cccc.c3);
408 d1 = PREG->y_u.cccc.c4;
411 deref_head(d0, gatom_4dunk);
415 PREG = NEXTOP(PREG, cccc);
422 deref_body(d0, pt0, gatom_4dunk, gatom_4dnonvar);
424 PREG = NEXTOP(PREG, cccc);
432 Op(get_5atoms, ccccc);
439 deref_head(d0, gatom_5unk);
442 if (d0 == PREG->y_u.ccccc.c1) {
449 deref_body(d0, pt0, gatom_5unk, gatom_5nonvar);
451 YapBind(pt0, PREG->y_u.ccccc.c1);
458 deref_head(d0, gatom_5bunk);
461 if (d0 == PREG->y_u.ccccc.c2) {
468 deref_body(d0, pt0, gatom_5bunk, gatom_5bnonvar);
470 YapBind(pt0, PREG->y_u.ccccc.c2);
477 deref_head(d0, gatom_5cunk);
480 if (d0 == PREG->y_u.ccccc.c3) {
487 deref_body(d0, pt0, gatom_5cunk, gatom_5cnonvar);
489 YapBind(pt0, PREG->y_u.ccccc.c3);
496 deref_head(d0, gatom_5dunk);
499 if (d0 == PREG->y_u.ccccc.c4) {
506 deref_body(d0, pt0, gatom_5dunk, gatom_5dnonvar);
508 YapBind(pt0, PREG->y_u.ccccc.c4);
513 d1 = PREG->y_u.ccccc.c5;
516 deref_head(d0, gatom_5eunk);
520 PREG = NEXTOP(PREG, ccccc);
527 deref_body(d0, pt0, gatom_5eunk, gatom_5enonvar);
529 PREG = NEXTOP(PREG, ccccc);
537 Op(get_6atoms, cccccc);
544 deref_head(d0, gatom_6unk);
547 if (d0 == PREG->y_u.cccccc.c1) {
554 deref_body(d0, pt0, gatom_6unk, gatom_6nonvar);
556 YapBind(pt0, PREG->y_u.cccccc.c1);
563 deref_head(d0, gatom_6bunk);
566 if (d0 == PREG->y_u.cccccc.c2) {
573 deref_body(d0, pt0, gatom_6bunk, gatom_6bnonvar);
575 YapBind(pt0, PREG->y_u.cccccc.c2);
582 deref_head(d0, gatom_6cunk);
585 if (d0 == PREG->y_u.cccccc.c3) {
592 deref_body(d0, pt0, gatom_6cunk, gatom_6cnonvar);
594 YapBind(pt0, PREG->y_u.cccccc.c3);
601 deref_head(d0, gatom_6dunk);
604 if (d0 == PREG->y_u.cccccc.c4) {
611 deref_body(d0, pt0, gatom_6dunk, gatom_6dnonvar);
613 YapBind(pt0, PREG->y_u.cccccc.c4);
620 deref_head(d0, gatom_6eunk);
623 if (d0 == PREG->y_u.cccccc.c5) {
630 deref_body(d0, pt0, gatom_6eunk, gatom_6enonvar);
632 YapBind(pt0, PREG->y_u.cccccc.c5);
637 d1 = PREG->y_u.cccccc.c6;
640 deref_head(d0, gatom_6funk);
644 PREG = NEXTOP(PREG, cccccc);
651 deref_body(d0, pt0, gatom_6funk, gatom_6fnonvar);
653 PREG = NEXTOP(PREG, cccccc);
666 d0 = XREG(PREG->y_u.x.x);
667 deref_head(d0, glist_unk);
671 if (!IsPairTerm(d0)) {
675 PREG = NEXTOP(PREG, x);
682 deref_body(d0, pt0, glist_unk, glist_nonvar);
688 d0 = AbsPair(S_SREG);
690 PREG = NEXTOP(PREG, x);
692 d0 = AbsPair(S_SREG);
709 OpRW(get_struct, xfa);
711 d0 = XREG(PREG->y_u.xfa.x);
712 deref_head(d0, gstruct_unk);
720 S_SREG = RepAppl(d0);
722 d0 = (CELL) (PREG->y_u.xfa.f);
726 WRITEBACK_S(S_SREG+1);
728 PREG = NEXTOP(PREG, xfa);
734 deref_body(d0, pt0, gstruct_unk, gstruct_nonvar);
737 START_PREFETCH_W(xfa);
746 d0 = (CELL) (PREG->y_u.xfa.f);
748 HR = pt0 + PREG->y_u.xfa.a;
749 PREG = NEXTOP(PREG, xfa);
762 d0 = XREG(PREG->y_u.xd.x);
763 deref_head(d0, gfloat_unk);
773 if (*pt0 != (CELL)FunctorDouble) {
777 pt1 = PREG->y_u.xd.d;
778 PREG = NEXTOP(PREG, xd);
781#
if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
792 deref_body(d0, pt0, gfloat_unk, gfloat_nonvar);
797 d1 = AbsAppl(PREG->y_u.xd.d);
798 PREG = NEXTOP(PREG, xd);
810 d0 = XREG(PREG->y_u.xu.x);
811 deref_head(d0, gstring_unk);
821 if (*pt0 != (CELL)FunctorString) {
825 pt1 = RepAppl(PREG->y_u.xu.ut);
826 PREG = NEXTOP(PREG, xu);
829 strcmp((
const char *)(pt1+2), (
const char *)(pt0+2))
838 deref_body(d0, pt0, gstring_unk, gstring_nonvar);
843 d1 = PREG->y_u.xu.ut;
844 PREG = NEXTOP(PREG, xu);
856 d0 = XREG(PREG->y_u.xi.x);
857 deref_head(d0, glongint_unk);
867 if (*pt0 != (CELL)FunctorLongInt) {
870 if (PREG->y_u.xi.i[1] != (CELL)pt0[1]) FAIL();
872 PREG = NEXTOP(PREG, xi);
878 deref_body(d0, pt0, glongint_unk, glongint_nonvar);
883 d1 = AbsAppl(PREG->y_u.xi.i);
884 PREG = NEXTOP(PREG, xi);
897 d0 = XREG(PREG->y_u.xN.x);
898 deref_head(d0, gbigint_unk);
908 if (*pt0 != (CELL)FunctorBigInt)
912 if (Yap_gmp_tcmp_big_big(d0,PREG->y_u.xN.b))
914 PREG = NEXTOP(PREG, xN);
921 deref_body(d0, pt0, gbigint_unk, gbigint_nonvar);
927 PREG = NEXTOP(PREG, xN);
943 d0 = XREG(PREG->y_u.xD.x);
944 deref_head(d0, gdbterm_unk);
950 PREG = NEXTOP(PREG, xD);
955 deref_body(d0, pt0, gdbterm_unk, gdbterm_nonvar);
961 PREG = NEXTOP(PREG, xD);
974 OpRW(glist_valx, xx);
976 d0 = XREG(PREG->y_u.xx.xl);
977 deref_head(d0, glist_valx_write);
989 deref_head(d0, glist_valx_unk);
995 d1 = XREG(PREG->y_u.xx.xr);
996 deref_head(d1, glist_valx_nonvar_unk);
998 glist_valx_nonvar_nonvar:
1001 PREG = NEXTOP(PREG, xx);
1006 deref_body(d1, pt1, glist_valx_nonvar_unk, glist_valx_nonvar_nonvar);
1008 PREG = NEXTOP(PREG, xx);
1017 derefa_body(d0, pt0, glist_valx_unk, glist_valx_nonvar);
1019 d0 = XREG(PREG->y_u.xx.xr);
1020 deref_head(d0, glist_valx_var_unk);
1022 glist_valx_var_nonvar:
1024 PREG = NEXTOP(PREG, xx);
1025 Bind_Global(pt0, d0);
1029 deref_body(d0, pt1, glist_valx_var_unk, glist_valx_var_nonvar);
1031 PREG = NEXTOP(PREG, xx);
1032 UnifyGlobalCellToCell(pt0, pt1);
1039 deref_body(d0, pt0, glist_valx_write, glist_valx_read);
1044 d1 = XREG(PREG->y_u.xx.xr);
1045 d0 = AbsPair(S_SREG);
1048 ALWAYS_START_PREFETCH_W(xx);
1049 PREG = NEXTOP(PREG, xx);
1051 WRITEBACK_S(S_SREG+1);
1054 ALWAYS_END_PREFETCH_W();
1061 OpRW(glist_valy, yx);
1063 d0 = XREG(PREG->y_u.yx.x);
1064 deref_head(d0, glist_valy_write);
1068 if (!IsPairTerm(d0))
1076 deref_head(d0, glist_valy_unk);
1082 pt1 = YREG + PREG->y_u.yx.y;
1084 PREG = NEXTOP(PREG, yx);
1085 deref_head(d1, glist_valy_nonvar_unk);
1087 glist_valy_nonvar_nonvar:
1094 derefa_body(d1, pt1, glist_valy_nonvar_unk, glist_valy_nonvar_nonvar);
1103 derefa_body(d0, pt0, glist_valy_unk, glist_valy_nonvar);
1106 pt1 = YREG+PREG->y_u.yx.y;
1108 deref_head(d1, glist_valy_var_unk);
1109 glist_valy_var_nonvar:
1111 PREG = NEXTOP(PREG, yx);
1112 Bind_Global(pt0, d1);
1115 derefa_body(d1, pt1, glist_valy_var_unk, glist_valy_var_nonvar);
1117 PREG = NEXTOP(PREG, yx);
1118 UnifyGlobalCellToCell(pt0, pt1);
1127 deref_body(d0, pt0, glist_valy_write, glist_valy_read);
1129 START_PREFETCH_W(yx);
1136 d0 = YREG[PREG->y_u.yx.y];
1142 PREG = NEXTOP(PREG, yx);
1150 Op(gl_void_varx, xx);
1152 d0 = XREG(PREG->y_u.xx.xl);
1153 deref_head(d0, glist_void_varx_write);
1154 glist_void_varx_read:
1156 if (!IsPairTerm(d0))
1158 ALWAYS_START_PREFETCH(xx);
1163 XREG(PREG->y_u.xx.xr) = d0;
1164 PREG = NEXTOP(PREG, xx);
1167 ALWAYS_END_PREFETCH();
1170 deref_body(d0, pt0, glist_void_varx_write, glist_void_varx_read);
1175 XREG(PREG->y_u.xx.xr) =
1177 RESET_VARIABLE(pt1);
1178 RESET_VARIABLE(pt1+1);
1183 PREG = NEXTOP(PREG, xx);
1191 Op(gl_void_vary, yx);
1193 d0 = XREG(PREG->y_u.yx.x);
1194 deref_head(d0, glist_void_vary_write);
1195 glist_void_vary_read:
1197 if (!IsPairTerm(d0))
1204 INITIALIZE_PERMVAR(YREG+PREG->y_u.yx.y,d0);
1205 PREG = NEXTOP(PREG, yx);
1209 deref_body(d0, pt0, glist_void_vary_write, glist_void_vary_read);
1214 INITIALIZE_PERMVAR(YREG+PREG->y_u.yx.y,Unsigned(pt1 + 1));
1215 PREG = NEXTOP(PREG, yx);
1216 RESET_VARIABLE(pt1);
1217 RESET_VARIABLE(pt1+1);
1228 Op(gl_void_valx, xx);
1230 d0 = XREG(PREG->y_u.xx.xl);
1231 deref_head(d0, glist_void_valx_write);
1232 glist_void_valx_read:
1235 if (!IsPairTerm(d0))
1238 pt0 = RepPair(d0)+1;
1241 deref_head(d0, glist_void_valx_unk);
1243 glist_void_valx_nonvar:
1246 d1 = XREG(PREG->y_u.xx.xr);
1247 deref_head(d1, glist_void_valx_nonvar_unk);
1249 glist_void_valx_nonvar_nonvar:
1252 PREG = NEXTOP(PREG, xx);
1257 deref_body(d1, pt1, glist_void_valx_nonvar_unk, glist_void_valx_nonvar_nonvar);
1259 PREG = NEXTOP(PREG, xx);
1266 derefa_body(d0, pt0, glist_void_valx_unk, glist_void_valx_nonvar);
1269 d1 = XREG(PREG->y_u.xx.xr);
1270 deref_head(d1, glist_void_valx_var_unk);
1272 glist_void_valx_var_nonvar:
1274 PREG = NEXTOP(PREG, xx);
1275 Bind_Global(pt0, d1);
1279 deref_body(d1, pt1, glist_void_valx_var_unk, glist_void_valx_var_nonvar);
1281 PREG = NEXTOP(PREG, xx);
1282 UnifyGlobalCellToCell(pt0, pt1);
1289 deref_body(d0, pt0, glist_void_valx_write, glist_void_valx_read);
1298 d0 = XREG(PREG->y_u.xx.xr);
1299 RESET_VARIABLE(pt1);
1304 PREG = NEXTOP(PREG, xx);
1311 Op(gl_void_valy, yx);
1313 d0 = XREG(PREG->y_u.yx.x);
1314 deref_head(d0, glist_void_valy_write);
1315 glist_void_valy_read:
1318 if (!IsPairTerm(d0))
1321 pt0 = RepPair(d0)+1;
1324 deref_head(d0, glist_void_valy_unk);
1326 glist_void_valy_nonvar:
1330 pt1 = YREG+PREG->y_u.yx.y;
1332 deref_head(d1, glist_void_valy_nonvar_unk);
1334 glist_void_valy_nonvar_nonvar:
1337 PREG = NEXTOP(PREG, yx);
1341 derefa_body(d1, pt1, glist_void_valy_nonvar_unk, glist_void_valy_nonvar_nonvar);
1343 PREG = NEXTOP(PREG, yx);
1350 derefa_body(d0, pt0, glist_void_valy_unk, glist_void_valy_nonvar);
1353 pt1 = YREG+PREG->y_u.yx.y;
1355 deref_head(d1, glist_void_valy_var_unk);
1357 glist_void_valy_var_nonvar:
1359 PREG = NEXTOP(PREG, yx);
1360 Bind_Global(pt0, d1);
1363 deref_body(d1, pt1, glist_void_valy_var_unk, glist_void_valy_var_nonvar);
1365 PREG = NEXTOP(PREG, yx);
1366 UnifyGlobalCellToCell(pt0, pt1);
1373 deref_body(d0, pt0, glist_void_valy_write, glist_void_valy_read);
1377 d0 = AbsPair(S_SREG);
1382 d1 = YREG[PREG->y_u.yx.y];
1383 RESET_VARIABLE(S_SREG);
1386 PREG = NEXTOP(PREG, yx);
1400 Op(unify_x_var, ox);
1409 WRITEBACK_S(S_SREG+1);
1410 ALWAYS_START_PREFETCH(ox);
1411 XREG(PREG->y_u.ox.x) = d0;
1412 PREG = NEXTOP(PREG, ox);
1414 ALWAYS_END_PREFETCH();
1419 OpW(unify_x_var_write, ox);
1423 pt0 = &XREG(PREG->y_u.ox.x);
1424 PREG = NEXTOP(PREG, ox);
1425 RESET_VARIABLE(S_SREG);
1426 *pt0 = (CELL) S_SREG;
1427 WRITEBACK_S(S_SREG+1);
1433 BOp(unify_l_x_var, ox);
1434 ALWAYS_START_PREFETCH(ox);
1438 pt0 = &XREG(PREG->y_u.ox.x);
1439 PREG = NEXTOP(PREG, ox);
1448 ALWAYS_END_PREFETCH();
1451 BOp(unify_l_x_var_write, ox);
1452 ALWAYS_START_PREFETCH(ox);
1456 pt0 = &XREG(PREG->y_u.ox.x);
1457 PREG = NEXTOP(PREG, ox);
1458 RESET_VARIABLE(S_SREG);
1459 *pt0 = (CELL)S_SREG;
1464 ALWAYS_END_PREFETCH();
1466 BOp(unify_x_var2, oxx);
1468 ALWAYS_START_PREFETCH(oxx);
1471 pt0 = &XREG(PREG->y_u.oxx.xr);
1480 d1 = (CELL)(S_SREG+1);
1482 WRITEBACK_S(S_SREG+2);
1483 XREG(PREG->y_u.oxx.xl) = d0;
1484 PREG = NEXTOP(PREG, oxx);
1491 ALWAYS_END_PREFETCH();
1494 OpW(unify_x_var2_write, oxx);
1498 pt0 = &XREG(PREG->y_u.oxx.xr);
1499 RESET_VARIABLE(S_SREG);
1500 XREG(PREG->y_u.oxx.xl) = (CELL) S_SREG;
1502 PREG = NEXTOP(PREG, oxx);
1503 RESET_VARIABLE(S_SREG);
1504 *pt0 = (CELL) S_SREG;
1506 WRITEBACK_S(S_SREG+1);
1511 BOp(unify_l_x_var2, oxx);
1512 ALWAYS_START_PREFETCH(oxx);
1516 pt0 = &XREG(PREG->y_u.oxx.xr);
1523 XREG(PREG->y_u.oxx.xl) = (CELL)S_SREG;
1526 XREG(PREG->y_u.oxx.xl) = d0;
1527 PREG = NEXTOP(PREG, oxx);
1530 *pt0 = (CELL)(S_SREG+1);
1540 ALWAYS_END_PREFETCH();
1542 Op(unify_l_x_var2_write, oxx);
1546 pt0 = &XREG(PREG->y_u.oxx.xr);
1547 XREG(PREG->y_u.oxx.xl) = (CELL) S_SREG;
1548 RESET_VARIABLE(S_SREG);
1550 *pt0 = (CELL) S_SREG;
1551 PREG = NEXTOP(PREG, oxx);
1552 RESET_VARIABLE(S_SREG);
1558 Op(unify_y_var, oy);
1563 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL)(SREG-1));
1566 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,d0);
1568 PREG = NEXTOP(PREG, oy);
1573 OpW(unify_y_var_write, oy);
1576 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL) S_SREG);
1577 PREG = NEXTOP(PREG, oy);
1578 RESET_VARIABLE(S_SREG);
1579 WRITEBACK_S(S_SREG+1);
1584 Op(unify_l_y_var, oy);
1589 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL)SREG);
1592 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,d0);
1594 PREG = NEXTOP(PREG, oy);
1599 Op(unify_l_y_var_write, oy);
1602 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,(CELL) S_SREG);
1603 PREG = NEXTOP(PREG, oy);
1604 RESET_VARIABLE(S_SREG);
1611 Op(unify_x_val, ox);
1617 deref_head(d0, uvalx_unk);
1621 d1 = XREG(PREG->y_u.ox.x);
1622 deref_head(d1, uvalx_nonvar_unk);
1624 uvalx_nonvar_nonvar:
1627 PREG = NEXTOP(PREG, ox);
1634 deref_body(d1, pt1, uvalx_nonvar_unk, uvalx_nonvar_nonvar);
1636 PREG = NEXTOP(PREG, ox);
1643 derefa_body(d0, pt0, uvalx_unk, uvalx_nonvar);
1645 d1 = XREG(PREG->y_u.ox.x);
1646 deref_head(d1, uvalx_var_unk);
1650 PREG = NEXTOP(PREG, ox);
1652 Bind_Global(pt0, d1);
1656 deref_body(d1, pt1, uvalx_var_unk, uvalx_var_nonvar);
1658 PREG = NEXTOP(PREG, ox);
1660 UnifyGlobalCellToCell(pt0, pt1);
1668 OpW(unify_x_val_write, ox);
1670 *SREG++ = XREG(PREG->y_u.ox.x);
1671 PREG = NEXTOP(PREG, ox);
1677 Op(unify_l_x_val, ox);
1683 deref_head(d0, ulvalx_unk);
1687 d1 = XREG(PREG->y_u.ox.x);
1688 deref_head(d1, ulvalx_nonvar_unk);
1690 ulvalx_nonvar_nonvar:
1693 PREG = NEXTOP(PREG, ox);
1698 deref_body(d1, pt1, ulvalx_nonvar_unk, ulvalx_nonvar_nonvar);
1700 PREG = NEXTOP(PREG, ox);
1706 derefa_body(d0, pt0, ulvalx_unk, ulvalx_nonvar);
1708 d1 = XREG(PREG->y_u.ox.x);
1709 deref_head(d1, ulvalx_var_unk);
1713 PREG = NEXTOP(PREG, ox);
1714 Bind_Global(pt0, d1);
1718 deref_body(d1, pt1, ulvalx_var_unk, ulvalx_var_nonvar);
1720 PREG = NEXTOP(PREG, ox);
1721 UnifyGlobalCellToCell(pt0, pt1);
1729 Op(unify_l_x_val_write, ox);
1731 SREG[0] = XREG(PREG->y_u.ox.x);
1732 PREG = NEXTOP(PREG, ox);
1738 Op(unify_y_val, oy);
1744 deref_head(d0, uvaly_unk);
1749 pt1 = YREG+PREG->y_u.oy.y;
1751 deref_head(d1, uvaly_nonvar_unk);
1753 uvaly_nonvar_nonvar:
1756 PREG = NEXTOP(PREG, oy);
1761 derefa_body(d1, pt1, uvaly_nonvar_unk, uvaly_nonvar_nonvar);
1763 PREG = NEXTOP(PREG, oy);
1770 derefa_body(d0, pt0, uvaly_unk, uvaly_nonvar);
1773 pt1 = YREG+PREG->y_u.oy.y;
1775 deref_head(d1, uvaly_var_unk);
1779 PREG = NEXTOP(PREG, oy);
1781 Bind_Global(pt0, d1);
1784 derefa_body(d1, pt1, uvaly_var_unk, uvaly_var_nonvar);
1786 PREG = NEXTOP(PREG, oy);
1788 UnifyGlobalCellToCell(pt0, pt1);
1796 OpW(unify_y_val_write, oy);
1799 d0 = YREG[PREG->y_u.oy.y];
1802 *SREG++ = (CELL)(YREG+PREG->y_u.oy.y);
1807 PREG = NEXTOP(PREG, oy);
1813 Op(unify_l_y_val, oy);
1819 deref_head(d0, ulvaly_unk);
1824 pt1 = YREG+PREG->y_u.oy.y;
1826 deref_head(d1, ulvaly_nonvar_unk);
1828 ulvaly_nonvar_nonvar:
1831 PREG = NEXTOP(PREG, oy);
1835 derefa_body(d1, pt1, ulvaly_nonvar_unk, ulvaly_nonvar_nonvar);
1837 PREG = NEXTOP(PREG, oy);
1843 derefa_body(d0, pt0, ulvaly_unk, ulvaly_nonvar);
1846 pt1 = YREG+PREG->y_u.oy.y;
1848 deref_head(d1, ulvaly_var_unk);
1852 PREG = NEXTOP(PREG, oy);
1853 Bind_Global(pt0, d1);
1858 derefa_body(d1, pt1, ulvaly_var_unk, ulvaly_var_nonvar);
1860 PREG = NEXTOP(PREG, oy);
1861 UnifyGlobalCellToCell(pt0, pt1);
1869 Op(unify_l_y_val_write, oy);
1872 d0 = YREG[PREG->y_u.oy.y];
1875 SREG[0] = (CELL)(YREG+PREG->y_u.oy.y);
1880 PREG = NEXTOP(PREG, oy);
1886 Op(unify_x_loc, ox);
1892 deref_head(d0, uvalx_loc_unk);
1896 d1 = XREG(PREG->y_u.ox.x);
1897 deref_head(d1, uvalx_loc_nonvar_unk);
1899 uvalx_loc_nonvar_nonvar:
1902 PREG = NEXTOP(PREG, ox);
1908 deref_body(d1, pt1, uvalx_loc_nonvar_unk, uvalx_loc_nonvar_nonvar);
1910 PREG = NEXTOP(PREG, ox);
1918 derefa_body(d0, pt0, uvalx_loc_unk, uvalx_loc_nonvar);
1920 d1 = XREG(PREG->y_u.ox.x);
1921 deref_head(d1, uvalx_loc_var_unk);
1923 uvalx_loc_var_nonvar:
1925 PREG = NEXTOP(PREG, ox);
1927 Bind_Global(pt0, d1);
1933 deref_body(d1, pt1, uvalx_loc_var_unk, uvalx_loc_var_nonvar);
1935 PREG = NEXTOP(PREG, ox);
1937 UnifyCells(pt0, pt1);
1945 OpW(unify_x_loc_write, ox);
1948 d0 = XREG(PREG->y_u.ox.x);
1949 deref_head(d0, unify_x_loc_unk);
1952 PREG = NEXTOP(PREG, ox);
1956 deref_body(d0, pt0, unify_x_loc_unk, unify_x_loc_nonvar);
1958 PREG = NEXTOP(PREG, ox);
1962 *SREG++ = Unsigned(pt0);
1969 Bind_Local(pt0, Unsigned(S_SREG));
1970 RESET_VARIABLE(S_SREG);
1971 WRITEBACK_S(S_SREG+1);
1981 Op(unify_l_x_loc, ox);
1987 deref_head(d0, ulvalx_loc_unk);
1991 d1 = XREG(PREG->y_u.ox.x);
1992 deref_head(d1, ulvalx_loc_nonvar_unk);
1994 ulvalx_loc_nonvar_nonvar:
1997 PREG = NEXTOP(PREG, ox);
2001 deref_body(d1, pt0, ulvalx_loc_nonvar_unk, ulvalx_loc_nonvar_nonvar);
2003 PREG = NEXTOP(PREG, ox);
2008 derefa_body(d0, pt0, ulvalx_loc_unk, ulvalx_loc_nonvar);
2010 d1 = XREG(PREG->y_u.ox.x);
2011 deref_head(d1, ulvalx_loc_var_unk);
2013 ulvalx_loc_var_nonvar:
2015 PREG = NEXTOP(PREG, ox);
2016 Bind_Global(pt0, d1);
2020 deref_body(d1, pt1, ulvalx_loc_var_unk, ulvalx_loc_var_nonvar);
2022 PREG = NEXTOP(PREG, ox);
2023 UnifyGlobalCellToCell(pt0, pt1);
2031 Op(unify_l_x_loc_write, ox);
2034 d0 = XREG(PREG->y_u.ox.x);
2035 deref_head(d0, ulnify_x_loc_unk);
2036 ulnify_x_loc_nonvar:
2038 PREG = NEXTOP(PREG, ox);
2042 deref_body(d0, pt0, ulnify_x_loc_unk, ulnify_x_loc_nonvar);
2044 PREG = NEXTOP(PREG, ox);
2047 SREG[0] = Unsigned(pt0);
2052 Bind_Local(pt0, Unsigned(SREG));
2053 RESET_VARIABLE(SREG);
2060 Op(unify_y_loc, oy);
2067 deref_head(d0, uvaly_loc_unk);
2072 pt1 = YREG+PREG->y_u.oy.y;
2074 deref_head(d1, uvaly_loc_nonvar_unk);
2076 uvaly_loc_nonvar_nonvar:
2079 PREG = NEXTOP(PREG, oy);
2084 derefa_body(d1, pt1, uvaly_loc_nonvar_unk, uvaly_loc_nonvar_nonvar);
2086 PREG = NEXTOP(PREG, oy);
2093 derefa_body(d0, pt0, uvaly_loc_unk, uvaly_loc_nonvar);
2096 pt1 = YREG+PREG->y_u.oy.y;
2098 deref_head(d1, uvaly_loc_var_unk);
2100 uvaly_loc_var_nonvar:
2102 PREG = NEXTOP(PREG, oy);
2104 Bind_Global(pt0, d1);
2109 derefa_body(d1, pt1, uvaly_loc_var_unk, uvaly_loc_var_nonvar);
2111 PREG = NEXTOP(PREG, oy);
2113 UnifyCells(pt0, pt1);
2121 OpW(unify_y_loc_write, oy);
2125 pt0 = YREG+PREG->y_u.oy.y;
2127 deref_head(d0, unify_y_loc_unk);
2130 PREG = NEXTOP(PREG, oy);
2133 derefa_body(d0, pt0, unify_y_loc_unk, unify_y_loc_nonvar);
2135 PREG = NEXTOP(PREG, oy);
2138 *SREG++ = Unsigned(pt0);
2145 Bind_Local(pt0, Unsigned(S_SREG));
2146 RESET_VARIABLE(S_SREG);
2147 WRITEBACK_S(S_SREG+1);
2155 Op(unify_l_y_loc, oy);
2162 deref_head(d0, ulvaly_loc_unk);
2167 pt1 = YREG+PREG->y_u.oy.y;
2169 deref_head(d1, ulvaly_loc_nonvar_unk);
2171 ulvaly_loc_nonvar_nonvar:
2174 PREG = NEXTOP(PREG, oy);
2178 derefa_body(d1, pt1, ulvaly_loc_nonvar_unk, ulvaly_loc_nonvar_nonvar);
2180 PREG = NEXTOP(PREG, oy);
2186 derefa_body(d0, pt0, ulvaly_loc_unk, ulvaly_loc_nonvar);
2189 pt1 = YREG+PREG->y_u.oy.y;
2191 deref_head(d1, ulvaly_loc_var_unk);
2193 ulvaly_loc_var_nonvar:
2195 PREG = NEXTOP(PREG, oy);
2196 Bind_Global(pt0, d1);
2201 derefa_body(d1, pt1, ulvaly_loc_var_unk, ulvaly_loc_var_nonvar);
2203 PREG = NEXTOP(PREG, oy);
2204 UnifyGlobalCellToCell(pt0, pt1);
2212 Op(unify_l_y_loc_write, oy);
2216 pt0 = YREG+PREG->y_u.oy.y;
2218 deref_head(d0, ulunify_y_loc_unk);
2219 ulunify_y_loc_nonvar:
2221 PREG = NEXTOP(PREG, oy);
2224 derefa_body(d0, pt0, ulunify_y_loc_unk, ulunify_y_loc_nonvar);
2226 PREG = NEXTOP(PREG, oy);
2229 SREG[0] = Unsigned(pt0);
2236 Bind_Local(pt0, Unsigned(S_SREG));
2237 RESET_VARIABLE(S_SREG);
2247 PREG = NEXTOP(PREG, o);
2253 OpW(unify_void_write, o);
2256 PREG = NEXTOP(PREG, o);
2257 RESET_VARIABLE(S_SREG);
2258 WRITEBACK_S(S_SREG+1);
2263 Op(unify_l_void, o);
2264 PREG = NEXTOP(PREG, o);
2268 Op(unify_l_void_write, o);
2269 PREG = NEXTOP(PREG, o);
2270 RESET_VARIABLE(SREG);
2274 Op(unify_n_voids, os);
2275 SREG += PREG->y_u.os.s;
2276 PREG = NEXTOP(PREG, os);
2280 OpW(unify_n_voids_write, os);
2283 d0 = PREG->y_u.os.s;
2285 PREG = NEXTOP(PREG, os);
2286 for (; d0 > 0; d0--) {
2287 RESET_VARIABLE(S_SREG);
2290 WRITEBACK_S(S_SREG);
2296 Op(unify_l_n_voids, os);
2297 PREG = NEXTOP(PREG, os);
2301 Op(unify_l_n_voids_write, os);
2303 d0 = PREG->y_u.os.s;
2304 PREG = NEXTOP(PREG, os);
2307 for (; d0 > 0; d0--) {
2308 RESET_VARIABLE(S_SREG);
2321 deref_head(d0, uatom_unk);
2323 if (d0 != PREG->y_u.oc.c) {
2326 PREG = NEXTOP(PREG, oc);
2329 derefa_body(d0, pt0, uatom_unk, uatom_nonvar);
2330 d0 = PREG->y_u.oc.c;
2331 PREG = NEXTOP(PREG, oc);
2332 Bind_Global(pt0, d0);
2338 OpW(unify_atom_write, oc);
2339 * SREG++ = PREG->y_u.oc.c;
2340 PREG = NEXTOP(PREG, oc);
2344 Op(unify_l_atom, oc);
2349 deref_head(d0, ulatom_unk);
2351 if (d0 != PREG->y_u.oc.c) {
2354 PREG = NEXTOP(PREG, oc);
2357 derefa_body(d0, pt0, ulatom_unk, ulatom_nonvar);
2358 d0 = PREG->y_u.oc.c;
2359 PREG = NEXTOP(PREG, oc);
2360 Bind_Global(pt0, d0);
2366 Op(unify_l_atom_write, oc);
2367 SREG[0] = PREG->y_u.oc.c;
2368 PREG = NEXTOP(PREG, oc);
2372 Op(unify_n_atoms, osc);
2374 register Int i = PREG->y_u.osc.s;
2377 d1 = PREG->y_u.osc.c;
2378 for (; i > 0; i--) {
2383 deref_head(d0, uatom_n_var);
2390 derefa_body(d0, pt0, uatom_n_var, uatom_n_nonvar);
2391 Bind_Global(pt0, d1);
2398 PREG = NEXTOP(PREG, osc);
2402 OpW(unify_n_atoms_write, osc);
2405 d0 = PREG->y_u.osc.s;
2406 d1 = PREG->y_u.osc.c;
2410 PREG = NEXTOP(PREG, osc);
2411 for (; d0 > 0; d0--)
2413 WRITEBACK_S(S_SREG);
2420 Op(unify_float, od);
2425 deref_head(d0, ufloat_unk);
2427 if (!IsApplTerm(d0)) {
2435 if (d0 != (CELL)FunctorDouble) {
2440 pt1 = PREG->y_u.od.d;
2441 PREG = NEXTOP(PREG, od);
2444#
if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
2452 derefa_body(d0, pt0, ufloat_unk, ufloat_nonvar);
2454 d1 = AbsAppl(PREG->y_u.od.d);
2455 PREG = NEXTOP(PREG, od);
2456 Bind_Global(pt0, d1);
2463 OpW(unify_float_write, od);
2464 * SREG++ = AbsAppl(PREG->y_u.od.d);
2465 PREG = NEXTOP(PREG, od);
2469 Op(unify_l_float, od);
2474 deref_head(d0, ulfloat_unk);
2476 if (!IsApplTerm(d0)) {
2483 if (d0 != (CELL)FunctorDouble) {
2488 pt1 = PREG->y_u.od.d;
2489 PREG = NEXTOP(PREG, od);
2492#
if SIZEOF_DOUBLE == 2*SIZEOF_INT_P
2500 derefa_body(d0, S_SREG, ulfloat_unk, ulfloat_nonvar);
2502 d1 = AbsAppl(PREG->y_u.od.d);
2503 PREG = NEXTOP(PREG, od);
2504 Bind_Global(S_SREG, d1);
2511 Op(unify_l_float_write, od);
2512 SREG[0] = AbsAppl(PREG->y_u.od.d);
2513 PREG = NEXTOP(PREG, od);
2517 Op(unify_string, ou);
2522 deref_head(d0, ustring_unk);
2524 if (!IsApplTerm(d0)) {
2532 if (d0 != (CELL)FunctorString) {
2537 pt1 = RepAppl(PREG->y_u.ou.ut);
2538 PREG = NEXTOP(PREG, ou);
2541 || strcmp( (
const char *)(pt1 + 2), (
const char *)(pt0+2) )
2547 derefa_body(d0, pt0, ustring_unk, ustring_nonvar);
2549 d1 = PREG->y_u.ou.ut;
2550 PREG = NEXTOP(PREG, ou);
2551 Bind_Global(pt0, d1);
2558 Op(unify_l_string, ou);
2563 deref_head(d0, ulstring_unk);
2565 if (!IsApplTerm(d0)) {
2572 if (d0 != (CELL)FunctorString) {
2577 pt1 = RepAppl(PREG->y_u.ou.ut);
2578 PREG = NEXTOP(PREG, ou);
2581 || strcmp( (
const char *)(pt1 + 2), (
const char *)(pt0+2) )
2587 derefa_body(d0, S_SREG, ulstring_unk, ulstring_nonvar);
2589 d1 = PREG->y_u.ou.ut;
2590 PREG = NEXTOP(PREG, ou);
2591 Bind_Global(S_SREG, d1);
2598 Op(unify_longint, oi);
2603 deref_head(d0, ulongint_unk);
2606 if (!IsApplTerm(d0)) {
2613 if (d0 != (CELL)FunctorLongInt) {
2618 pt1 = PREG->y_u.oi.i;
2619 PREG = NEXTOP(PREG, oi);
2620 if (pt1[1] != pt0[1]) FAIL();
2625 derefa_body(d0, pt0, ulongint_unk, ulongint_nonvar);
2627 d1 = AbsAppl(PREG->y_u.oi.i);
2628 PREG = NEXTOP(PREG, oi);
2629 Bind_Global(pt0, d1);
2636 OpW(unify_longint_write, oi);
2637 * SREG++ = AbsAppl(PREG->y_u.oi.i);
2638 PREG = NEXTOP(PREG, oi);
2642 Op(unify_l_longint, oi);
2647 deref_head(d0, ullongint_unk);
2649 if (!IsApplTerm(d0)) {
2656 if (d0 != (CELL)FunctorLongInt) {
2661 pt1 = PREG->y_u.oi.i;
2662 PREG = NEXTOP(PREG, oi);
2663 if (pt1[1] != pt0[1]) FAIL();
2668 derefa_body(d0, S_SREG, ullongint_unk, ullongint_nonvar);
2670 d1 = AbsAppl(PREG->y_u.oi.i);
2671 PREG = NEXTOP(PREG, oi);
2672 Bind_Global(S_SREG, d1);
2679 Op(unify_l_longint_write, oi);
2680 SREG[0] = AbsAppl(PREG->y_u.oi.i);
2681 PREG = NEXTOP(PREG, oi);
2685 Op(unify_bigint, oN);
2691 deref_head(d0, ubigint_unk);
2694 if (!IsApplTerm(d0)) {
2701 if (d1 != (CELL)FunctorBigInt)
2706 if (Yap_gmp_tcmp_big_big(d0,PREG->y_u.oN.b))
2708 PREG = NEXTOP(PREG, oN);
2712 derefa_body(d0, pt0, ubigint_unk, ubigint_nonvar);
2714 d1 = PREG->y_u.oN.b;
2715 PREG = NEXTOP(PREG, oN);
2716 Bind_Global(pt0, d1);
2726 Op(unify_l_bigint, oN);
2732 deref_head(d0, ulbigint_unk);
2734 if (!IsApplTerm(d0)) {
2741 if (d0 != (CELL)FunctorBigInt)
2746 if (Yap_gmp_tcmp_big_big(d0,PREG->y_u.oN.b))
2748 PREG = NEXTOP(PREG, oN);
2752 derefa_body(d0, S_SREG, ulbigint_unk, ulbigint_nonvar);
2754 d1 = PREG->y_u.oN.b;
2755 PREG = NEXTOP(PREG, oN);
2756 Bind_Global(S_SREG, d1);
2766 Op(unify_dbterm, oD);
2771 deref_head(d0, udbterm_unk);
2775 d1 = PREG->y_u.oD.D;
2776 PREG = NEXTOP(PREG, oD);
2780 derefa_body(d0, pt0, udbterm_unk, udbterm_nonvar);
2782 d1 = PREG->y_u.oD.D;
2783 PREG = NEXTOP(PREG, oD);
2784 Bind_Global(pt0, d1);
2791 Op(unify_l_dbterm, oD);
2796 deref_head(d0, uldbterm_unk);
2800 d1 = PREG->y_u.oD.D;
2801 PREG = NEXTOP(PREG, oD);
2805 derefa_body(d0, S_SREG, uldbterm_unk, uldbterm_nonvar);
2807 d1 = PREG->y_u.oD.D;
2808 PREG = NEXTOP(PREG, oD);
2809 Bind_Global(S_SREG, d1);
2816 OpRW(unify_list, o);
2817 *--SP = Unsigned(SREG + 1);
2823 deref_head(d0, ulist_unk);
2825 if (!IsPairTerm(d0)) {
2831 PREG = NEXTOP(PREG, o);
2835 derefa_body(d0, pt0, ulist_unk, ulist_nonvar);
2837 START_PREFETCH_W(o);
2841 PREG = NEXTOP(PREG, o);
2843 d0 = AbsPair(S_SREG);
2844 WRITEBACK_S(S_SREG);
2846 Bind_Global(pt0, d0);
2855 OpW(unify_list_write, o);
2856 PREG = NEXTOP(PREG, o);
2863 SP[1] = Unsigned(S_SREG + 1);
2867 WRITEBACK_S(S_SREG);
2873 OpRW(unify_l_list, o);
2878 deref_head(d0, ullist_unk);
2881 if (!IsPairTerm(d0)) {
2885 PREG = NEXTOP(PREG, o);
2890 derefa_body(d0, pt0, ullist_unk, ullist_nonvar);
2892 START_PREFETCH_W(o);
2893 PREG = NEXTOP(PREG, o);
2898 d0 = AbsPair(S_SREG);
2899 WRITEBACK_S(S_SREG);
2901 Bind_Global(pt0, d0);
2909 OpW(unify_l_list_write, o);
2913 PREG = NEXTOP(PREG, o);
2919 WRITEBACK_S(S_SREG);
2925 OpRW(unify_struct, ofa);
2926 *--SP = Unsigned(SREG + 1);
2932 START_PREFETCH(ofa);
2933 deref_head(d0, ustruct_unk);
2936 if (!IsApplTerm(d0)) {
2942 S_SREG = RepAppl(d0);
2944 d0 = (CELL) (PREG->y_u.ofa.f);
2945 if (*S_SREG != d0) {
2948 PREG = NEXTOP(PREG, ofa);
2949 WRITEBACK_S(S_SREG+1);
2954 derefa_body(d0, pt0, ustruct_unk, ustruct_nonvar);
2956 START_PREFETCH_W(ofa);
2961 Bind_Global(pt0, d1);
2967 d0 = (CELL) (PREG->y_u.ofa.f);
2969 HR = pt0 + PREG->y_u.ofa.a;
2970 PREG = NEXTOP(PREG, ofa);
2982 OpW(unify_struct_write, ofa);
2985 *--SP = Unsigned(S_SREG + 1);
2992 d0 = (CELL) (PREG->y_u.ofa.f);
2994 HR = S_SREG + PREG->y_u.ofa.a;
2995 PREG = NEXTOP(PREG, ofa);
2996 WRITEBACK_S(S_SREG);
3002 OpRW(unify_l_struc, ofa);
3007 deref_head(d0, ulstruct_unk);
3010 START_PREFETCH(ofa);
3011 if (!IsApplTerm(d0)) {
3017 d0 = (CELL) (PREG->y_u.ofa.f);
3018 if (*SREG++ != d0) {
3021 PREG = NEXTOP(PREG, ofa);
3025 derefa_body(d0, pt0, ulstruct_unk, ulstruct_nonvar);
3028 START_PREFETCH_W(ofa);
3032 Bind_Global(pt0, d1);
3038 d0 = (CELL) (PREG->y_u.ofa.f);
3040 HR = pt0 + PREG->y_u.ofa.a;
3041 PREG = NEXTOP(PREG, ofa);
3052 OpW(unify_l_struc_write, ofa);
3059 d0 = (CELL) (PREG->y_u.ofa.f);
3061 HR = S_SREG + PREG->y_u.ofa.a;
3062 PREG = NEXTOP(PREG, ofa);
3063 WRITEBACK_S(S_SREG);
3077 XREG(PREG->y_u.xx.xl) = Unsigned(pt0);
3079 XREG(PREG->y_u.xx.xr) = Unsigned(pt0);
3080 PREG = NEXTOP(PREG, xx);
3081 RESET_VARIABLE(pt0);
3088 pt0 = YREG + PREG->y_u.yx.y;
3089 XREG(PREG->y_u.yx.x) = (CELL) pt0;
3090 PREG = NEXTOP(PREG, yx);
3091#if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
3093 if (Unsigned((Int)(pt0)-(Int)(H_FZ)) >
3094 Unsigned((Int)(B_FZ)-(Int)(H_FZ))) {
3095 *pt0 = (CELL)STACK_TO_SBA(pt0);
3098 INITIALIZE_PERMVAR(pt0, (CELL)pt0);
3105 d0 = XREG(PREG->y_u.xx.xl);
3106 XREG(PREG->y_u.xx.xr) = d0;
3108 PREG = NEXTOP(PREG, xx);
3112 Op(put_xx_val, xxxx);
3115 d0 = XREG(PREG->y_u.xxxx.xl1);
3116 d1 = XREG(PREG->y_u.xxxx.xl2);
3117 XREG(PREG->y_u.xxxx.xr1) = d0;
3118 XREG(PREG->y_u.xxxx.xr2) = d1;
3121 PREG = NEXTOP(PREG, xxxx);
3127 d0 = YREG[PREG->y_u.yx.y];
3130 XREG(PREG->y_u.yx.x) = (CELL)(YREG+PREG->y_u.yx.y);
3133 XREG(PREG->y_u.yx.x) = d0;
3135 PREG = NEXTOP(PREG, yx);
3139 Op(put_y_vals, yyxx);
3140 ALWAYS_START_PREFETCH(yyxx);
3142 d0 = YREG[PREG->y_u.yyxx.y1];
3145 XREG(PREG->y_u.yyxx.x1) = (CELL)(YREG+PREG->y_u.yyxx.y1);
3148 XREG(PREG->y_u.yyxx.x1) = d0;
3151 PREG = NEXTOP(PREG, yyxx);
3153 d1 = YREG[PREVOP(PREG,yyxx)->y_u.yyxx.y2];
3156 XREG(PREVOP(PREG->y_u.yyxx,yyxx).x2) = (CELL)(YREG+PREG->y_u.yyxx.y2);
3159 XREG(PREVOP(PREG,yyxx)->y_u.yyxx.x2) = d1;
3162 ALWAYS_END_PREFETCH();
3168 pt0 = YREG+PREG->y_u.yx.y;
3170 deref_head(d0, punsafe_unk);
3172 XREG(PREG->y_u.yx.x) = d0;
3173 PREG = NEXTOP(PREG, yx);
3177 derefa_body(d0, pt0, punsafe_unk, punsafe_nonvar);
3179 if (pt0 <= HR || pt0 >= YREG) {
3181 XREG(PREG->y_u.yx.x) = Unsigned(pt0);
3182 PREG = NEXTOP(PREG, yx);
3187 Bind_Local(pt0, Unsigned(HR));
3188 XREG(PREG->y_u.yx.x) = (CELL) HR;
3191 PREG = NEXTOP(PREG, yx);
3200 d0 = PREG->y_u.xc.c;
3201 XREG(PREG->y_u.xc.x) = d0;
3202 PREG = NEXTOP(PREG, xc);
3209 d0 = PREG->y_u.xD.D;
3210 XREG(PREG->y_u.xD.x) = d0;
3211 PREG = NEXTOP(PREG, xD);
3218 d0 = PREG->y_u.xN.b;
3219 XREG(PREG->y_u.xN.x) = d0;
3220 PREG = NEXTOP(PREG, xN);
3227 d0 = AbsAppl(PREG->y_u.xd.d);
3228 XREG(PREG->y_u.xd.x) = d0;
3229 PREG = NEXTOP(PREG, xd);
3234 Op(put_longint, xi);
3236 d0 = AbsAppl(PREG->y_u.xi.i);
3237 XREG(PREG->y_u.xi.x) = d0;
3238 PREG = NEXTOP(PREG, xi);
3249 d0 = AbsPair(S_SREG);
3250 XREG(PREG->y_u.x.x) = d0;
3251 PREG = NEXTOP(PREG, x);
3253 WRITEBACK_S(S_SREG);
3258 Op(put_struct, xfa);
3261 XREG(PREG->y_u.xfa.x) = d0;
3262 d0 = (CELL) (PREG->y_u.xfa.f);
3265 HR += PREG->y_u.xfa.a;
3267 PREG = NEXTOP(PREG, xfa);
3276 XREG(PREG->y_u.x.x) = Unsigned(SREG);
3277 PREG = NEXTOP(PREG, x);
3278 RESET_VARIABLE(SREG);
3284 PREG = NEXTOP(PREG, e);
3285 RESET_VARIABLE(SREG);
3290 Op(write_n_voids, s);
3293 PREG = NEXTOP(PREG, s);
3294 for (; d0 > 0; d0--) {
3295 RESET_VARIABLE(SREG);
3303 INITIALIZE_PERMVAR(YREG+PREG->y_u.y.y,Unsigned(SREG));
3304 PREG = NEXTOP(PREG, y);
3305 RESET_VARIABLE(SREG);
3312 d0 = XREG(PREG->y_u.x.x);
3315 PREG = NEXTOP(PREG, x);
3321 d0 = XREG(PREG->y_u.x.x);
3322 PREG = NEXTOP(PREG, x);
3323 deref_head(d0, w_x_unk);
3329 deref_body(d0, pt0, w_x_unk, w_x_bound);
3330#if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
3331 if (pt0 > HR && pt0<(CELL *)B_FZ) {
3337 Bind_Local(pt0, Unsigned(SREG));
3339 TRAIL_LOCAL(pt0, Unsigned(SREG));
3340 *pt0 = Unsigned(SREG);
3342 RESET_VARIABLE(SREG);
3347 *SREG++ = Unsigned(pt0);
3356 d0 = YREG[PREG->y_u.y.y];
3359 *SREG++ = (CELL)(YREG+PREG->y_u.y.y);
3364 PREG = NEXTOP(PREG, y);
3371 pt0 = YREG+PREG->y_u.y.y;
3373 deref_head(d0, w_y_unk);
3375 PREG = NEXTOP(PREG, y);
3379 derefa_body(d0, pt0, w_y_unk, w_y_bound);
3381#
if defined(YAPOR_SBA) && defined(FROZEN_STACKS)
3385 PREG = NEXTOP(PREG, y);
3388 Bind_Local(pt0, Unsigned(SREG));
3390 *pt0 = Unsigned(SREG);
3391 TRAIL_LOCAL(pt0, Unsigned(SREG));
3393 RESET_VARIABLE(SREG);
3397 PREG = NEXTOP(PREG, y);
3398 *SREG++ = Unsigned(pt0);
3410 PREG = NEXTOP(PREG, c);
3414 Op(write_bigint, N);
3419 PREG = NEXTOP(PREG, N);
3423 Op(write_dbterm, D);
3428 PREG = NEXTOP(PREG, D);
3434 d0 = AbsAppl(PREG->y_u.d.d);
3437 PREG = NEXTOP(PREG, d);
3441 Op(write_longint, i);
3443 d0 = AbsAppl(PREG->y_u.i.i);
3446 PREG = NEXTOP(PREG, i);
3450 Op(write_n_atoms, sc);
3453 d0 = PREG->y_u.sc.s;
3454 d1 = PREG->y_u.sc.c;
3455 for (; d0 > 0; d0--)
3459 PREG = NEXTOP(PREG, sc);
3468 SP[-1] = Unsigned(SREG);
3474 PREG = NEXTOP(PREG, e);
3478 Op(write_l_list, e);
3479 ALWAYS_START_PREFETCH(e);
3480 PREG = NEXTOP(PREG, e);
3491 ALWAYS_END_PREFETCH();
3494 Op(write_struct, fa);
3498 SP[-1] = Unsigned(SREG);
3501 d0 = (CELL) (PREG->y_u.fa.f);
3505 d0 = PREG->y_u.fa.a;
3506 PREG = NEXTOP(PREG, fa);
3513 Op(write_l_struc, fa);
3517 d0 = (CELL) (PREG->y_u.fa.f);
3522 d0 = PREG->y_u.fa.a;
3523 PREG = NEXTOP(PREG, fa);
3537 Op(save_pair_x, ox);
3538 XREG(PREG->y_u.ox.x) = AbsPair(SREG);
3539 PREG = NEXTOP(PREG, ox);
3543 OpW(save_pair_x_write, ox);
3544 XREG(PREG->y_u.ox.x) = AbsPair(SREG);
3545 PREG = NEXTOP(PREG, ox);
3549 Op(save_pair_y, oy);
3550 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsPair(SREG));
3551 PREG = NEXTOP(PREG, oy);
3555 OpW(save_pair_y_write, oy);
3556 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsPair(SREG));
3557 PREG = NEXTOP(PREG, oy);
3561 Op(save_appl_x, ox);
3562 XREG(PREG->y_u.ox.x) = AbsAppl(SREG - 1);
3563 PREG = NEXTOP(PREG, ox);
3567 OpW(save_appl_x_write, ox);
3568 XREG(PREG->y_u.ox.x) = AbsAppl(SREG - 1);
3569 PREG = NEXTOP(PREG, ox);
3573 Op(save_appl_y, oy);
3574 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsAppl(SREG-1));
3575 PREG = NEXTOP(PREG, oy);
3579 OpW(save_appl_y_write, oy);
3580 INITIALIZE_PERMVAR(YREG+PREG->y_u.oy.y,AbsAppl(SREG-1));
3581 PREG = NEXTOP(PREG, oy);