13 yamop *
new = Yap_udi_search(PREG->y_u.lp.p);
15 PREG = PREG->y_u.lp.l;
23 BOp(switch_on_type, llll);
26 deref_head(d0, swt_unk);
32 copy_jmp_address(PREG->y_u.llll.l1);
33 PREG = PREG->y_u.llll.l1;
36 else if (!IsApplTerm(d0)) {
38 copy_jmp_address(PREG->y_u.llll.l2);
39 PREG = PREG->y_u.llll.l2;
45 copy_jmp_address(PREG->y_u.llll.l3);
46 PREG = PREG->y_u.llll.l3;
52 deref_body(d0, pt0, swt_unk, swt_nvar);
54 copy_jmp_address(PREG->y_u.llll.l4);
55 PREG = PREG->y_u.llll.l4;
68 BOp(switch_list_nl, ollll);
69 ALWAYS_LOOKAHEAD(PREG->y_u.ollll.pop);
72#if UNIQUE_TAG_FOR_PAIRS
73 deref_list_head(d0, swlnl_unk_p);
77 deref_head(d0, swlnl_unk_p);
80 if (__builtin_expect(IsPairTerm(d0),1)) {
83 copy_jmp_address(PREG->y_u.ollll.l1);
84 PREG = PREG->y_u.ollll.l1;
88#if UNIQUE_TAG_FOR_PAIRS
93 PREG = PREG->y_u.ollll.l2;
99 copy_jmp_address(PREG->y_u.ollll.l3);
100 PREG = PREG->y_u.ollll.l3;
104 copy_jmp_address(PREG->y_u.ollll.l3);
105 PREG = PREG->y_u.ollll.l3;
112#if UNIQUE_TAG_FOR_PAIRS
114 deref_list_body(d0, pt0, swlnl_list_p, swlnl_nlist_p);
116 deref_body(d0, pt0, swlnl_unk_p, swlnl_nvar_p);
120 copy_jmp_address(PREG->y_u.ollll.l4);
121 PREG = PREG->y_u.ollll.l4;
127 BOp(switch_on_arg_type, xllll);
129 d0 = XREG(PREG->y_u.xllll.x);
130 deref_head(d0, arg_swt_unk);
133 if (IsPairTerm(d0)) {
135 copy_jmp_address(PREG->y_u.xllll.l1);
136 PREG = PREG->y_u.xllll.l1;
140 else if (!IsApplTerm(d0)) {
142 copy_jmp_address(PREG->y_u.xllll.l2);
143 PREG = PREG->y_u.xllll.l2;
149 copy_jmp_address(PREG->y_u.xllll.l3);
150 PREG = PREG->y_u.xllll.l3;
156 deref_body(d0, pt0, arg_swt_unk, arg_swt_nvar);
158 copy_jmp_address(PREG->y_u.xllll.l4);
159 PREG = PREG->y_u.xllll.l4;
165 BOp(switch_on_sub_arg_type, sllll);
167 d0 = SREG[PREG->y_u.sllll.s];
168 deref_head(d0, sub_arg_swt_unk);
171 if (IsPairTerm(d0)) {
173 copy_jmp_address(PREG->y_u.sllll.l1);
174 PREG = PREG->y_u.sllll.l1;
178 else if (!IsApplTerm(d0)) {
180 copy_jmp_address(PREG->y_u.sllll.l2);
181 PREG = PREG->y_u.sllll.l2;
187 copy_jmp_address(PREG->y_u.sllll.l3);
188 PREG = PREG->y_u.sllll.l3;
194 deref_body(d0, pt0, sub_arg_swt_unk, sub_arg_swt_nvar);
196 copy_jmp_address(PREG->y_u.sllll.l4);
197 PREG = PREG->y_u.sllll.l4;
206 deref_head(d0, jump_if_unk);
209 PREG = NEXTOP(PREG, l);
213 deref_body(d0, pt0, jump_if_unk, jump0_if_nonvar);
215 copy_jmp_address(PREG->y_u.l.l);
216 PREG = PREG->y_u.l.l;
222 BOp(jump_if_nonvar, xll);
224 d0 = XREG(PREG->y_u.xll.x);
225 deref_head(d0, jump2_if_unk);
228 copy_jmp_address(PREG->y_u.xll.l1);
229 PREG = PREG->y_u.xll.l1;
233 deref_body(d0, pt0, jump2_if_unk, jump2_if_nonvar);
235 PREG = NEXTOP(PREG, xll);
241 BOp(if_not_then, clll);
244 deref_head(d0, if_n_unk);
247 if (d0 == PREG->y_u.clll.c) {
249 copy_jmp_address(PREG->y_u.clll.l2);
250 PREG = PREG->y_u.clll.l2;
256 copy_jmp_address(PREG->y_u.clll.l1);
257 PREG = PREG->y_u.clll.l1;
262 deref_body(d0, pt0, if_n_unk, if_n_nvar);
265 copy_jmp_address(PREG->y_u.clll.l3);
266 PREG = PREG->y_u.clll.l3;
277 BOp(switch_on_func, sssl);
285 Mask = (PREG->y_u.sssl.s - 1) << 1,
286 hash = d1 >> (HASH_SHIFT - 1) & Mask;
289 base = (CELL *)PREG->y_u.sssl.l;
298 if (d0 == d1 || d0 == 0) {
299 copy_jmp_addressa(pt0+1);
300 PREG = (
yamop *) (pt0[1]);
305 register CELL d = ((d1 | 1) << 1) & Mask;
308 hash = (hash + d) & Mask;
311 if (d0 == d1 || d0 == 0) {
312 copy_jmp_addressa(pt0+1);
313 PREG = (
yamop *) pt0[1];
324 BOp(switch_on_cons, sssl);
332 Mask = (PREG->y_u.sssl.s - 1) << 1,
333 hash = d1 >> (HASH_SHIFT - 1) & Mask;
336 base = (CELL *)PREG->y_u.sssl.l;
345 if (d0 == d1 || d0 == 0) {
346 copy_jmp_addressa(pt0+1);
347 PREG = (
yamop *) (pt0[1]);
352 register CELL d = ((d1 | 1) << 1) & Mask;
355 hash = (hash + d) & Mask;
358 if (d0 == d1 || d0 == 0) {
359 copy_jmp_addressa(pt0+1);
360 PREG = (
yamop *) pt0[1];
371 BOp(go_on_func, sssl);
374 CELL *pt = (CELL *)(PREG->y_u.sssl.l);
378 copy_jmp_addressa(pt+1);
379 PREG = (
yamop *) pt[1];
382 copy_jmp_addressa(pt+3);
383 PREG = (
yamop *) pt[3];
390 BOp(go_on_cons, sssl);
393 CELL *pt = (CELL *)(PREG->y_u.sssl.l);
397 copy_jmp_addressa(pt+1);
398 PREG = (
yamop *) pt[1];
401 copy_jmp_addressa(pt+3);
402 PREG = (
yamop *) pt[3];
412 pt0 = (CELL *) PREG->y_u.sssl.l;
414 while (pt0[0] != d1 && pt0[0] != (CELL)NULL ) {
417 copy_jmp_addressa(pt0+1);
418 PREG = (
yamop *) (pt0[1]);
427 pt0 = (CELL *) PREG->y_u.sssl.l;
429 while (pt0[0] != d1 && pt0[0] != 0L ) {
432 copy_jmp_addressa(pt0+1);
433 PREG = (
yamop *) (pt0[1]);
440 PREG = NEXTOP(PREG, e);
441 I_R = AbsAppl(SREG-1);
446 PREG = NEXTOP(PREG, e);
447 I_R = Yap_DoubleP_key(SREG);
452 PREG = NEXTOP(PREG, e);
453 I_R = Yap_IntP_key(SREG);