YAP 7.1.0
sshift.h
1/*************************************************************************
2* *
3* YAP Prolog %W% %G%
4* *
5* Yap Prolog was developed at NCCUP - Universidade do Porto *
6* *
7* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
8* *
9**************************************************************************
10* *
11* File: sshift.h *
12* Last rev: 19/2/88 *
13* mods: *
14* comments: stack shifter functionality for YAP *
15* *
16*************************************************************************/
17
18#ifndef SSHIFT_H
19#define SSHIFT_H
20
21#define REINIT_LOCK(P) INIT_LOCK(P)
22#define REINIT_RWLOCK(P) INIT_RWLOCK(P)
23
24#include <YapBlobs.h>
25
26#define CharP(ptr) ((char *) (ptr))
27
28
29#define CodeAdjust(ptr) CodeAdjust__(ptr PASS_REGS)
30#define PtoTRAdjust(ptr) PtoTRAdjust__(ptr PASS_REGS)
31#define BaseAddrAdjust(ptr) BaseAddrAdjust__(ptr PASS_REGS)
32#define CutCAdjust(ptr) CutCAdjust__(ptr PASS_REGS)
33#define ChoicePtrAdjust(ptr) ChoicePtrAdjust__(ptr PASS_REGS)
34#define FuncAdjust(ptr) FuncAdjust__(ptr PASS_REGS)
35#define AtomTermAdjust(ptr) AtomTermAdjust__(ptr PASS_REGS)
36#define TermToGlobalOrAtomAdjust(ptr) TermToGlobalOrAtomAdjust__(ptr PASS_REGS)
37#define AtomAdjust(ptr) AtomAdjust__(ptr PASS_REGS)
38#define IsOldCode(ptr) IsOldCode__(ptr PASS_REGS)
39#define IsOldLocal(ptr) IsOldLocal__(ptr PASS_REGS)
40#define IsOldLocalPtr(ptr) IsOldLocalPtr__(ptr PASS_REGS)
41#define IsOldCodeCellPtr(ptr) IsOldCodeCellPtr__(ptr PASS_REGS)
42#define IsOldDelay(ptr) IsOldDelay__(ptr PASS_REGS)
43#define IsOldDelayPtr(ptr) IsOldDelayPtr__(ptr PASS_REGS)
44#define IsOldLocalInTR(ptr) IsOldLocalInTR__(ptr PASS_REGS)
45#define IsOldLocalInTRPtr(ptr) IsOldLocalInTRPtr__(ptr PASS_REGS)
46#define IsOldGlobal(ptr) IsOldGlobal__(ptr PASS_REGS)
47#define IsOldGlobalPtr(ptr) IsOldGlobalPtr__(ptr PASS_REGS)
48#define IsOldTrail(ptr) IsOldTrail__(ptr PASS_REGS)
49#define IsOldTrailPtr(ptr) IsOldTrailPtr__(ptr PASS_REGS)
50#define NoAGCAtomAdjust(ptr) NoAGCAtomAdjust__(ptr PASS_REGS)
51// #define OrArgAdjust(ptr) OrArgAdjust__(ptr PASS_REGS)
52// #define TabEntryAdjust(ptr) TabEntryAdjust__(ptr PASS_REGS)
53// #define IntegerAdjust(D) IntegerAdjust__(ptr PASS_REGS)
54#define AddrAdjust(ptr) AddrAdjust__(ptr PASS_REGS)
55#define BlockAdjust(ptr) BlockAdjust__(ptr PASS_REGS)
56#define CodeVarAdjust(ptr) CodeVarAdjust__(ptr PASS_REGS)
57#define ConstantAdjust(ptr) ConstantAdjust__(ptr PASS_REGS)
58#define ArityAdjust(ptr) ArityAdjust__(ptr PASS_REGS)
59// #define DoubleInCodeAdjust(ptr) DoubleInCodeAdjust__(ptr PASS_REGS)
60// #define IntegerInCodeAdjust(ptr) IntegerInCodeAdjust__(ptr PASS_REGS)
61#define OpcodeAdjust(ptr) OpcodeAdjust__(ptr PASS_REGS)
62#define ModuleAdjust(ptr) ModuleAdjust__(ptr PASS_REGS)
63// #define ExternalFunctionAdjust(ptr) ExternalFunctionAdjust__(ptr PASS_REGS)
64#define DBRecordAdjust(ptr) DBRecordAdjust__(ptr PASS_REGS)
65#define PredEntryAdjust(ptr) PredEntryAdjust__(ptr PASS_REGS)
66#define ModEntryPtrAdjust(ptr) ModEntryPtrAdjust__(ptr PASS_REGS)
67#define AtomEntryAdjust(ptr) AtomEntryAdjust__(ptr PASS_REGS)
68#define GlobalEntryAdjust(ptr) GlobalEntryAdjust__(ptr PASS_REGS)
69#define BlobTermInCodeAdjust(ptr) BlobTermInCodeAdjust__(ptr PASS_REGS)
70#define CellPtoHeapAdjust(ptr) CellPtoHeapAdjust__(ptr PASS_REGS)
71#define PtoAtomHashEntryAdjust(ptr) PtoAtomHashEntryAdjust__(ptr PASS_REGS)
72#define CellPtoHeapCellAdjust(ptr) CellPtoHeapCellAdjust__(ptr PASS_REGS)
73#define CellPtoTRAdjust(ptr) CellPtoTRAdjust__(ptr PASS_REGS)
74#define CodeAddrAdjust(ptr) CodeAddrAdjust__(ptr PASS_REGS)
75#define ConsultObjAdjust(ptr) ConsultObjAdjust__(ptr PASS_REGS)
76#define DelayAddrAdjust(ptr) DelayAddrAdjust__(ptr PASS_REGS)
77#define DelayAdjust(ptr) DelayAdjust__(ptr PASS_REGS)
78#define GlobalAdjust(ptr) GlobalAdjust__(ptr PASS_REGS)
79#define DBRefAdjust(ptr,C) DBRefAdjust__(ptr PASS_REGS)
80#define DBRefPAdjust(ptr) DBRefPAdjust__(ptr PASS_REGS)
81#define DBTermAdjust(ptr) DBTermAdjust__(ptr PASS_REGS)
82#define LUIndexAdjust(ptr) LUIndexAdjust__(ptr PASS_REGS)
83#define SIndexAdjust(ptr) SIndexAdjust__(ptr PASS_REGS)
84#define LocalAddrAdjust(ptr) LocalAddrAdjust__(ptr PASS_REGS)
85#define GlobalAddrAdjust(ptr) GlobalAddrAdjust__(ptr PASS_REGS)
86#define OpListAdjust(ptr) OpListAdjust__(ptr PASS_REGS)
87#define PtoLUCAdjust(ptr) PtoLUCAdjust__(ptr PASS_REGS)
88#define PtoStCAdjust(ptr) PtoStCAdjust__(ptr PASS_REGS)
89#define PtoArrayEAdjust(ptr) PtoArrayEAdjust__(ptr PASS_REGS)
90#define PtoArraySAdjust(ptr) PtoArraySAdjust__(ptr PASS_REGS)
91#define PtoGlobalEAdjust(ptr) PtoGlobalEAdjust__(ptr PASS_REGS)
92#define PtoDelayAdjust(ptr) PtoDelayAdjust__(ptr PASS_REGS)
93#define PtoGloAdjust(ptr) PtoGloAdjust__(ptr PASS_REGS)
94#define PtoLocAdjust(ptr) PtoLocAdjust__(ptr PASS_REGS)
95#define PtoHeapCellAdjust(ptr) PtoHeapCellAdjust__(ptr PASS_REGS)
96#define TermToGlobalAdjust(ptr) TermToGlobalAdjust__(ptr PASS_REGS)
97#define PtoOpAdjust(ptr) PtoOpAdjust__(ptr PASS_REGS)
98#define PtoLUClauseAdjust(ptr) PtoLUClauseAdjust__(ptr PASS_REGS)
99#define PtoLUIndexAdjust(ptr) PtoLUIndexAdjust__(ptr PASS_REGS)
100#define PtoDBTLAdjust(ptr) PtoDBTLAdjust__(ptr PASS_REGS)
101#define PtoPredAdjust(ptr) PtoPredAdjust__(ptr PASS_REGS)
102#define PtoPtoPredAdjust(ptr) PtoPtoPredAdjust__(ptr PASS_REGS)
103#define OpRTableAdjust(ptr) OpRTableAdjust__(ptr PASS_REGS)
104#define OpEntryAdjust(ptr) OpEntryAdjust__(ptr PASS_REGS)
105#define PropAdjust(ptr) PropAdjust__(ptr PASS_REGS)
106#define BlobTypeAdjust(ptr) BlobTypeAdjust__(ptr PASS_REGS)
107#define TrailAddrAdjust(ptr) TrailAddrAdjust__(ptr PASS_REGS)
108#define XAdjust(ptr) XAdjust__(ptr PASS_REGS)
109#define YAdjust(ptr) YAdjust__(ptr PASS_REGS)
110#define LocalAdjust(ptr) LocalAdjust__(ptr PASS_REGS)
111#define TrailAdjust(ptr) TrailAdjust__(ptr PASS_REGS)
112#define HoldEntryAdjust(ptr) HoldEntryAdjust__(ptr PASS_REGS)
113#define CodeCharPAdjust(ptr) CodeCharPAdjust__(ptr PASS_REGS)
114#define CodeConstCharPAdjust(ptr) CodeConstCharPAdjust__(ptr PASS_REGS)
115#define CodeVoidPAdjust(ptr) CodeVoidPAdjust__(ptr PASS_REGS)
116#define HaltHookAdjust(ptr) HaltHookAdjust__(ptr PASS_REGS)
117#define TokEntryAdjust(ptr) TokEntryAdjust__(ptr PASS_REGS)
118#define VarEntryAdjust(ptr) VarEntryAdjust__(ptr PASS_REGS)
119#define ConsumerChoicePtrAdjust(ptr) ConsumerChoicePtrAdjust__(ptr PASS_REGS)
120#define GeneratorChoicePtrAdjust(ptr) GeneratorChoicePtrAdjust__(ptr PASS_REGS)
121#define IsHeapP(ptr) IsHeapP__(ptr PASS_REGS)
122#define IsOldVarTableTrailPtr(ptr) IsOldVarTableTrailPtr__(ptr PASS_REGS)
123#define IsOldTokenTrailPtr(ptr) IsOldTokenTrailPtr__(ptr PASS_REGS)
124
125#include "inline-only.h"
126INLINE_ONLY int IsHeapP__ (CELL * CACHE_TYPE);
127
128INLINE_ONLY int
129IsHeapP__ (CELL * ptr USES_REGS)
130{
131#if USE_SYSTEM_MALLOC
132 return (int) ((ptr < (CELL *) LOCAL_GlobalBase || ptr > (CELL *) LOCAL_TrailTop));
133#else
134 return (int) ((ptr >= (CELL *) Yap_HeapBase && ptr <= (CELL *) HeapTop));
135#endif
136}
137
138#define OrArgAdjust(ptr)
139#define TabEntryAdjust(ptr)
140
141/* Adjusting cells and pointers to cells */
142
143INLINE_ONLY CELL *PtoGloAdjust__ (CELL * CACHE_TYPE);
144
145INLINE_ONLY CELL *
146PtoGloAdjust__ (CELL * ptr USES_REGS)
147{
148 if (LOCAL_GSplit && ptr >= LOCAL_GSplit) {
149 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_GDiff)));
150 } else {
151 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_GDiff0)));
152 }
153}
154
155
156
157INLINE_ONLY CELL *PtoDelayAdjust__ (CELL * CACHE_TYPE);
158
159INLINE_ONLY CELL *
160PtoDelayAdjust__ (CELL * ptr USES_REGS)
161{
162 if (!LOCAL_GSplit || ptr < LOCAL_GSplit)
163 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_DelayDiff)));
164 else
165 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_GDiff0)));
166}
167
168INLINE_ONLY CELL *PtoBaseAdjust__ (CELL * CACHE_TYPE);
169
170INLINE_ONLY CELL *
171PtoBaseAdjust__ (CELL * ptr USES_REGS)
172{
173 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_BaseDiff)));
174}
175
176
177
178INLINE_ONLY tr_fr_ptr PtoTRAdjust__ (tr_fr_ptr CACHE_TYPE);
179
180INLINE_ONLY tr_fr_ptr
181PtoTRAdjust__ (tr_fr_ptr ptr USES_REGS)
182{
183 return (tr_fr_ptr) (((tr_fr_ptr) (CharP (ptr) + LOCAL_TrDiff)));
184}
185
186
187
188INLINE_ONLY CELL *CellPtoTRAdjust__ (CELL * CACHE_TYPE);
189
190INLINE_ONLY CELL *
191CellPtoTRAdjust__ (CELL * ptr USES_REGS)
192{
193 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_TrDiff)));
194}
195
196
197
198INLINE_ONLY CELL *PtoLocAdjust__ (CELL * CACHE_TYPE);
199
200INLINE_ONLY CELL *
201PtoLocAdjust__ (CELL * ptr USES_REGS)
202{
203 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_LDiff)));
204}
205
206
207INLINE_ONLY struct cut_c_str *CutCAdjust__ (struct cut_c_str * CACHE_TYPE);
208
209INLINE_ONLY struct cut_c_str *
210CutCAdjust__ (struct cut_c_str * ptr USES_REGS)
211{
212 return (struct cut_c_str *) (CharP (ptr) + LOCAL_LDiff);
213}
214
215
216
217INLINE_ONLY choiceptr ChoicePtrAdjust__ (choiceptr CACHE_TYPE);
218
219INLINE_ONLY choiceptr
220ChoicePtrAdjust__ (choiceptr ptr USES_REGS)
221{
222 return (choiceptr) (((choiceptr) (CharP (ptr) + LOCAL_LDiff)));
223}
224
225
226#ifdef TABLING
227
228INLINE_ONLY choiceptr ConsumerChoicePtrAdjust__ (choiceptr CACHE_TYPE);
229
230INLINE_ONLY choiceptr
231ConsumerChoicePtrAdjust__ (choiceptr ptr USES_REGS)
232{
233 return (choiceptr) (((choiceptr) (CharP (ptr) + LOCAL_LDiff)));
234}
235
236
237
238INLINE_ONLY choiceptr GeneratorChoicePtrAdjust__ (choiceptr CACHE_TYPE);
239
240INLINE_ONLY choiceptr
241GeneratorChoicePtrAdjust__ (choiceptr ptr USES_REGS)
242{
243 return (choiceptr) (((choiceptr) (CharP (ptr) + LOCAL_LDiff)));
244}
245
246
247#endif /* TABLING */
248
249
250INLINE_ONLY CELL GlobalAdjust__ (CELL CACHE_TYPE);
251
252INLINE_ONLY CELL
253GlobalAdjust__ (CELL val USES_REGS)
254{
255 if ((CELL *)val <= LOCAL_GSplit) {
256 return (CELL) (val + LOCAL_GDiff0);
257 } else {
258 return (CELL) (val + LOCAL_GDiff);
259 }
260}
261
262
263
264INLINE_ONLY CELL DelayAdjust__ (CELL CACHE_TYPE);
265
266INLINE_ONLY CELL
267DelayAdjust__ (CELL val USES_REGS)
268{
269 if (!LOCAL_GSplit || (CELL *)val < LOCAL_GSplit)
270 return (CELL) (val + LOCAL_DelayDiff);
271 else
272 return (CELL) (val + LOCAL_GDiff0);
273}
274
275
276INLINE_ONLY ADDR GlobalAddrAdjust__ (ADDR CACHE_TYPE);
277
278INLINE_ONLY ADDR
279GlobalAddrAdjust__ (ADDR ptr USES_REGS)
280{
281 if ((CELL *)ptr < LOCAL_GSplit) {
282 if ((CELL *)ptr < H0)
283 return (ADDR) (ptr + LOCAL_DelayDiff);
284 else
285 return (ADDR) ((ptr + LOCAL_GDiff0));
286 } else {
287 return (ADDR) ((ptr + LOCAL_GDiff));
288 }
289}
290
291
292
293
294INLINE_ONLY ADDR DelayAddrAdjust__ (ADDR CACHE_TYPE);
295
296INLINE_ONLY ADDR
297DelayAddrAdjust__ (ADDR ptr USES_REGS)
298{
299 if (!LOCAL_GSplit || (CELL *)ptr < LOCAL_GSplit)
300 return (ADDR) ((ptr + LOCAL_DelayDiff));
301 else
302 return (ADDR) ((ptr + LOCAL_GDiff0));
303}
304
305
306INLINE_ONLY ADDR BaseAddrAdjust__ (ADDR CACHE_TYPE);
307
308INLINE_ONLY ADDR
309BaseAddrAdjust__ (ADDR ptr USES_REGS)
310{
311 return (ADDR) ((ptr + LOCAL_BaseDiff));
312}
313
314
315
316INLINE_ONLY CELL LocalAdjust__ (CELL CACHE_TYPE);
317
318INLINE_ONLY CELL
319LocalAdjust__ (CELL val USES_REGS)
320{
321 return (CELL) ((val + LOCAL_LDiff));
322}
323
324
325
326INLINE_ONLY ADDR LocalAddrAdjust__ (ADDR CACHE_TYPE);
327
328INLINE_ONLY ADDR
329LocalAddrAdjust__ (ADDR ptr USES_REGS)
330{
331 return (ADDR) ((ptr + LOCAL_LDiff));
332}
333
334
335
336INLINE_ONLY CELL TrailAdjust__ (CELL CACHE_TYPE);
337
338INLINE_ONLY CELL
339TrailAdjust__ (CELL val USES_REGS)
340{
341 return (CELL) ((val + LOCAL_TrDiff));
342}
343
344
345
346INLINE_ONLY ADDR TrailAddrAdjust__ (ADDR CACHE_TYPE);
347
348INLINE_ONLY ADDR
349TrailAddrAdjust__ (ADDR ptr USES_REGS)
350{
351 return (ADDR) ((ptr + LOCAL_TrDiff));
352}
353
354
355
356INLINE_ONLY TokEntry *TokEntryAdjust__ (TokEntry * CACHE_TYPE);
357
358INLINE_ONLY TokEntry *
359TokEntryAdjust__ (TokEntry * ptr USES_REGS)
360{
361 return (TokEntry *) (((CELL) ptr + LOCAL_TrDiff));
362}
363
364
365
366INLINE_ONLY VarEntry *VarEntryAdjust__ (VarEntry * CACHE_TYPE);
367
368INLINE_ONLY VarEntry *
369VarEntryAdjust__ (VarEntry * ptr USES_REGS)
370{
371 return (VarEntry *) (((CELL) ptr + LOCAL_TrDiff));
372}
373
374
375/* heap data structures */
376
377INLINE_ONLY Functor FuncAdjust__ (Functor CACHE_TYPE);
378
379INLINE_ONLY Functor
380FuncAdjust__ (Functor f USES_REGS)
381{
382 if (!IsExtensionFunctor(f))
383 return (Functor) ((CharP (f) + LOCAL_HDiff));
384 return f;
385}
386
387INLINE_ONLY CELL *CellPtoHeapAdjust__ (CELL * CACHE_TYPE);
388
389INLINE_ONLY CELL *
390CellPtoHeapAdjust__ (CELL * ptr USES_REGS)
391{
392 if (!ptr)
393 return ptr;
394 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_HDiff)));
395}
396
397INLINE_ONLY HoldEntry *HoldEntryAdjust__ (HoldEntry * CACHE_TYPE);
398
399INLINE_ONLY HoldEntry *
400HoldEntryAdjust__ (HoldEntry * ptr USES_REGS)
401{
402 return (HoldEntry *) (((HoldEntry *) (CharP (ptr) + LOCAL_HDiff)));
403}
404
405INLINE_ONLY struct record_list *DBRecordAdjust__ (struct record_list * CACHE_TYPE);
406
407INLINE_ONLY struct record_list *
408DBRecordAdjust__ (struct record_list * ptr USES_REGS)
409{
410 if (!ptr)
411 return ptr;
412 return (struct record_list *) (CharP (ptr) + LOCAL_HDiff);
413}
414
415
416#if USE_OFFSETS
417
418INLINE_ONLY Atom AtomAdjust__ (Atom CACHE_TYPE);
419
420INLINE_ONLY Atom
421AtomAdjust__ (Atom at USES_REGS)
422{
423 return (Atom) ((at));
424}
425
426INLINE_ONLY Atom NoAGCAtomAdjust__ (Atom CACHE_TYPE);
427
428INLINE_ONLY Atom
429NoAGCAtomAdjust__ (Atom at USES_REGS)
430{
431 return (Atom) ((at));
432}
433
434
435
436INLINE_ONLY Prop PropAdjust__ (Prop CACHE_TYPE);
437
438INLINE_ONLY Prop
439PropAdjust__ (Prop p USES_REGS)
440{
441 return (Prop) ((p));
442}
443
444#else
445
446INLINE_ONLY Atom AtomAdjust__ (Atom CACHE_TYPE);
447
448INLINE_ONLY Atom
449AtomAdjust__ (Atom at USES_REGS)
450{
451 return (Atom) ((at == NULL ? (at) : (Atom) (CharP (at) + LOCAL_HDiff)));
452}
453
454INLINE_ONLY Atom NoAGCAtomAdjust__ (Atom CACHE_TYPE);
455
456INLINE_ONLY Atom
457NoAGCAtomAdjust__ (Atom at USES_REGS)
458{
459 return (Atom) ((at == NULL ? (at) : (Atom) (CharP (at) + LOCAL_HDiff)));
460}
461
462INLINE_ONLY Prop PropAdjust__ (Prop CACHE_TYPE);
463
464INLINE_ONLY Prop
465PropAdjust__ (Prop p USES_REGS)
466{
467 return (Prop) ((p == NULL ? (p) : (Prop) (CharP (p) + LOCAL_HDiff)));
468}
469
470
471#endif
472
473INLINE_ONLY YAP_blob_t *BlobTypeAdjust__ (YAP_blob_t *CACHE_TYPE);
474
475INLINE_ONLY YAP_blob_t *
476BlobTypeAdjust__ ( YAP_blob_t *at USES_REGS)
477{
478 return ( YAP_blob_t *) ((at == NULL ? (at) : ( YAP_blob_t *) (CharP (at) + LOCAL_HDiff)));
479}
480
481INLINE_ONLY PredEntry *PredEntryAdjust__ (PredEntry * CACHE_TYPE);
482
483INLINE_ONLY PredEntry *
484PredEntryAdjust__ (PredEntry *p USES_REGS)
485{
486 return (PredEntry *) ((p == NULL ? (p) : (PredEntry *) (CharP (p) + LOCAL_HDiff)));
487}
488
489INLINE_ONLY struct mod_entry *ModEntryPtrAdjust__ (struct mod_entry * CACHE_TYPE);
490
491INLINE_ONLY struct mod_entry *
492ModEntryPtrAdjust__ (struct mod_entry *p USES_REGS)
493{
494 return (struct mod_entry *) ((p == NULL ? (p) : (struct mod_entry *) (CharP (p) + LOCAL_HDiff)));
495}
496
497INLINE_ONLY COUNT ConstantAdjust__ (COUNT CACHE_TYPE);
498
499INLINE_ONLY COUNT
500ConstantAdjust__ (COUNT val USES_REGS)
501{
502 return val;
503}
504
505INLINE_ONLY Int ArityAdjust__ (Int CACHE_TYPE);
506
507INLINE_ONLY Int
508ArityAdjust__ (Int val USES_REGS)
509{
510 return val;
511}
512
513INLINE_ONLY OPCODE OpcodeAdjust__ (OPCODE CACHE_TYPE);
514
515INLINE_ONLY OPCODE
516OpcodeAdjust__ (OPCODE val USES_REGS)
517{
518 return Yap_opcode(Yap_op_from_opcode(val));
519}
520
521#define DoubleInCodeAdjust(D)
522
523#define IntegerInCodeAdjust(D)
524
525#define IntegerAdjust(D) (D)
526
527#define ExternalFunctionAdjust(D) (D);
528
529INLINE_ONLY Term AtomTermAdjust__ (Term CACHE_TYPE);
530
531
532INLINE_ONLY int
533IsOldGlobal__ (CELL reg USES_REGS)
534{
535 return (int) (IN_BETWEEN (LOCAL_OldGlobalBase, reg, LOCAL_OldH));
536}
537
538INLINE_ONLY Term
539AtomTermAdjust__ (Term at USES_REGS)
540{
541 if (at == 0L)
542 return at;
543 Atom a = AtomOfTerm(at);
544 if (IsOldGlobal((CELL)a)) {
545 return MkAtomTerm((Atom)PtoGloAdjust((CELL*)a));
546 }
547 return (Term)(CharP(at) + LOCAL_HDiff);
548}
549
550INLINE_ONLY Term ModuleAdjust__ (Term CACHE_TYPE);
551
552INLINE_ONLY Term
553ModuleAdjust__ (Term t USES_REGS)
554{
555 return AtomTermAdjust(t);
556}
557
558INLINE_ONLY Term CodeVarAdjust__ (Term CACHE_TYPE);
559
560INLINE_ONLY Term
561CodeVarAdjust__ (Term var USES_REGS)
562{
563 if (var == 0L)
564 return var;
565 return (Term)(CharP(var) + LOCAL_HDiff);
566}
567
568
569#if TAGS_FAST_OPS
570
571INLINE_ONLY Term BlobTermInCodeAdjust__ (Term CACHE_TYPE);
572
573INLINE_ONLY Term
574BlobTermInCodeAdjust__ (Term t USES_REGS)
575{
576 return (Term) (CharP(t) - LOCAL_HDiff);
577}
578
579
580INLINE_ONLY Term CodeComposedTermAdjust__ (Term CACHE_TYPE);
581
582INLINE_ONLY Term
583CodeComposedTermAdjust__ (Term t USES_REGS)
584{
585 return (Term) (CharP(t) - LOCAL_HDiff);
586}
587
588
589#else
590
591INLINE_ONLY Term BlobTermInCodeAdjust__ (Term CACHE_TYPE);
592
593INLINE_ONLY Term
594BlobTermInCodeAdjust__ (Term t USES_REGS)
595{
596 return (Term) (CharP(t) + LOCAL_HDiff);
597}
598
599INLINE_ONLY Term CodeComposedTermAdjust__ (Term CACHE_TYPE);
600
601INLINE_ONLY Term
602CodeComposedTermAdjust__ (Term t USES_REGS)
603{
604 return (Term) (CharP(t) + LOCAL_HDiff);
605}
606
607
608#endif
609
610INLINE_ONLY AtomEntry *AtomEntryAdjust__ (AtomEntry * CACHE_TYPE);
611
612INLINE_ONLY AtomEntry *
613AtomEntryAdjust__ (AtomEntry * at USES_REGS)
614{
615 return (AtomEntry *) ((AtomEntry *) (CharP (at) + LOCAL_HDiff));
616}
617
618INLINE_ONLY GlobalEntry *GlobalEntryAdjust__ (GlobalEntry * CACHE_TYPE);
619
620INLINE_ONLY GlobalEntry *
621GlobalEntryAdjust__ (GlobalEntry * at USES_REGS)
622{
623 return (GlobalEntry *) ((GlobalEntry *) (CharP (at) + LOCAL_HDiff));
624}
625
626
627
628INLINE_ONLY union CONSULT_OBJ *ConsultObjAdjust__ (union CONSULT_OBJ * CACHE_TYPE);
629
630INLINE_ONLY union CONSULT_OBJ *
631ConsultObjAdjust__ (union CONSULT_OBJ *co USES_REGS)
632{
633 return (union CONSULT_OBJ *) ((union CONSULT_OBJ *) (CharP (co) + LOCAL_HDiff));
634}
635
636
637
638INLINE_ONLY DBRef DBRefAdjust__ (DBRef CACHE_TYPE);
639
640INLINE_ONLY DBRef
641DBRefAdjust__ (DBRef dbr USES_REGS)
642{
643 return (DBRef) ((DBRef) (CharP (dbr) + LOCAL_HDiff));
644}
645
646
647
648INLINE_ONLY DBRef *DBRefPAdjust__ (DBRef * CACHE_TYPE);
649
650INLINE_ONLY DBRef *
651DBRefPAdjust__ (DBRef * dbrp USES_REGS)
652{
653 return (DBRef *) ((DBRef *) (CharP (dbrp) + LOCAL_HDiff));
654}
655
656
657
658INLINE_ONLY DBTerm *DBTermAdjust__ (DBTerm * CACHE_TYPE);
659
660INLINE_ONLY DBTerm *
661DBTermAdjust__ (DBTerm * dbtp USES_REGS)
662{
663 return (DBTerm *) ((DBTerm *) (CharP (dbtp) + LOCAL_HDiff));
664}
665
666
667
668INLINE_ONLY struct static_index *SIndexAdjust__ (struct static_index * CACHE_TYPE);
669
670INLINE_ONLY struct static_index *
671SIndexAdjust__ (struct static_index *si USES_REGS)
672{
673 return (struct static_index
674 *) ((struct static_index *) (CharP (si) + LOCAL_HDiff));
675}
676
677
678
679INLINE_ONLY struct logic_upd_index *LUIndexAdjust__ (struct logic_upd_index
680 * CACHE_TYPE);
681
682INLINE_ONLY struct logic_upd_index *
683LUIndexAdjust__ (struct logic_upd_index *lui USES_REGS)
684{
685 return (struct logic_upd_index
686 *) ((struct logic_upd_index *) (CharP (lui) + LOCAL_HDiff));
687}
688
689
690
691INLINE_ONLY Term CodeAdjust__ (Term CACHE_TYPE);
692
693INLINE_ONLY Term
694CodeAdjust__ (Term dbr USES_REGS)
695{
696 return (Term) (CharP(dbr) + LOCAL_HDiff);
697}
698
699
700
701INLINE_ONLY ADDR AddrAdjust__ (ADDR CACHE_TYPE);
702
703INLINE_ONLY ADDR
704AddrAdjust__ (ADDR addr USES_REGS)
705{
706 return (ADDR) ((ADDR) (CharP (addr) + LOCAL_HDiff));
707}
708
709
710
711INLINE_ONLY CODEADDR CodeAddrAdjust__ (CODEADDR CACHE_TYPE);
712
713INLINE_ONLY CODEADDR
714CodeAddrAdjust__ (CODEADDR addr USES_REGS)
715{
716 return (CODEADDR) ((CODEADDR) (CharP (addr) + LOCAL_HDiff));
717}
718
719
720INLINE_ONLY char * CodeCharPAdjust__ (char * CACHE_TYPE);
721
722INLINE_ONLY char *
723CodeCharPAdjust__ (char * addr USES_REGS)
724{
725 if (!addr)
726 return NULL;
727 return addr + LOCAL_HDiff;
728}
729
730INLINE_ONLY const char * CodeConstCharPAdjust__ (const char * CACHE_TYPE);
731
732INLINE_ONLY const char *
733CodeConstCharPAdjust__ (const char * addr USES_REGS)
734{
735 if (!addr)
736 return NULL;
737 return addr + LOCAL_HDiff;
738}
739
740INLINE_ONLY void * CodeVoidPAdjust__ (void * CACHE_TYPE);
741
742INLINE_ONLY void *
743CodeVoidPAdjust__ (void * addr USES_REGS)
744{
745 if (!addr)
746 return NULL;
747 return (void *)((char *)addr + LOCAL_HDiff);
748}
749
750INLINE_ONLY struct halt_hook *HaltHookAdjust__ (struct halt_hook * CACHE_TYPE);
751
752INLINE_ONLY struct halt_hook *
753HaltHookAdjust__ (struct halt_hook * addr USES_REGS)
754{
755 if (!addr)
756 return NULL;
757 return (struct halt_hook *) (CharP (addr) + LOCAL_HDiff);
758}
759
760INLINE_ONLY BlockHeader *BlockAdjust__ (BlockHeader * CACHE_TYPE);
761
762INLINE_ONLY BlockHeader *
763BlockAdjust__ (BlockHeader * addr USES_REGS)
764{
765 return (BlockHeader *) ((BlockHeader *) (CharP (addr) + LOCAL_HDiff));
766}
767
768INLINE_ONLY yamop *PtoOpAdjust__ (yamop * CACHE_TYPE);
769
770INLINE_ONLY yamop *
771PtoOpAdjust__ (yamop * ptr USES_REGS)
772{
773 if (ptr)
774 return (yamop *) (CharP (ptr) + LOCAL_HDiff);
775 return ptr;
776}
777
778INLINE_ONLY struct operator_entry *OpListAdjust__ (struct operator_entry * CACHE_TYPE);
779
780INLINE_ONLY struct operator_entry *
781OpListAdjust__ (struct operator_entry * ptr USES_REGS)
782{
783 if (!ptr)
784 return ptr;
785 return (struct operator_entry *) (CharP (ptr) + LOCAL_HDiff);
786}
787
788
789INLINE_ONLY struct logic_upd_clause *PtoLUClauseAdjust__ (struct logic_upd_clause * CACHE_TYPE);
790
791INLINE_ONLY struct logic_upd_clause *
792PtoLUClauseAdjust__ (struct logic_upd_clause * ptr USES_REGS)
793{
794 return (struct logic_upd_clause *) (CharP (ptr) + LOCAL_HDiff);
795}
796
797INLINE_ONLY struct logic_upd_index *PtoLUIndexAdjust__ (struct logic_upd_index * CACHE_TYPE);
798
799INLINE_ONLY struct logic_upd_index *
800PtoLUIndexAdjust__ (struct logic_upd_index * ptr USES_REGS)
801{
802 return (struct logic_upd_index *) (CharP (ptr) + LOCAL_HDiff);
803}
804
805
806
807INLINE_ONLY CELL *PtoHeapCellAdjust__ (CELL * CACHE_TYPE);
808
809INLINE_ONLY CELL *
810PtoHeapCellAdjust__ (CELL * ptr USES_REGS)
811{
812 return (CELL *) (((CELL *) (CharP (ptr) + LOCAL_HDiff)));
813}
814
815INLINE_ONLY AtomHashEntry *PtoAtomHashEntryAdjust__ (AtomHashEntry * CACHE_TYPE);
816
817INLINE_ONLY AtomHashEntry *
818PtoAtomHashEntryAdjust__ (AtomHashEntry * ptr USES_REGS)
819{
820 return (AtomHashEntry *) (((AtomHashEntry *) (CharP (ptr) + LOCAL_HDiff)));
821}
822
823INLINE_ONLY Term TermToGlobalAdjust__ (Term CACHE_TYPE);
824
825INLINE_ONLY Term
826TermToGlobalAdjust__ (Term t USES_REGS)
827{
828 if (t == 0L)
829 return t;
830 return AbsAppl(PtoGloAdjust(RepAppl(t)));
831}
832
833INLINE_ONLY Term TermToGlobalOrAtomAdjust__ (Term CACHE_TYPE);
834
835INLINE_ONLY Term
836TermToGlobalOrAtomAdjust__ (Term t USES_REGS)
837{
838 if (t == 0L)
839 return t;
840 if (IsAtomTerm(t))
841 return AtomTermAdjust(t);
842 if (IsApplTerm(t))
843 return AbsAppl(PtoGloAdjust(RepAppl(t)));
844 if (IsPairTerm(t))
845 return AbsPair(PtoGloAdjust(RepPair(t)));
846 return t;
847}
848
849#if USE_THREADED_CODE
850
851INLINE_ONLY op_entry *OpRTableAdjust__ (op_entry * CACHE_TYPE);
852
853INLINE_ONLY op_entry *
854OpRTableAdjust__ (op_entry * ptr USES_REGS)
855{
856 return (op_entry *) (((op_entry *) (CharP (ptr) + LOCAL_HDiff)));
857}
858
859#endif // USE_THREADED_CODE
860
861INLINE_ONLY OpEntry *OpEntryAdjust__ (OpEntry * CACHE_TYPE);
862
863INLINE_ONLY OpEntry *
864OpEntryAdjust__ (OpEntry * ptr USES_REGS)
865{
866 return (OpEntry *) (((OpEntry *) (CharP (ptr) + LOCAL_HDiff)));
867}
868
869INLINE_ONLY PredEntry *PtoPredAdjust__ (PredEntry * CACHE_TYPE);
870
871INLINE_ONLY PredEntry *
872PtoPredAdjust__ (PredEntry * ptr USES_REGS)
873{
874 return (PredEntry *) (((PredEntry *) (CharP (ptr) + LOCAL_HDiff)));
875}
876
877INLINE_ONLY PredEntry **PtoPtoPredAdjust__ (PredEntry ** CACHE_TYPE);
878
879INLINE_ONLY PredEntry **
880PtoPtoPredAdjust__ (PredEntry **ptr USES_REGS)
881{
882 if (!ptr)
883 return NULL;
884 return (PredEntry **) (((PredEntry **) (CharP (ptr) + LOCAL_HDiff)));
885}
886
887
888
889INLINE_ONLY ArrayEntry *PtoArrayEAdjust__ (ArrayEntry * CACHE_TYPE);
890
891INLINE_ONLY ArrayEntry *
892PtoArrayEAdjust__ (ArrayEntry * ptr USES_REGS)
893{
894 if (!ptr)
895 return NULL;
896 return (ArrayEntry *) (((ArrayEntry *) (CharP (ptr) + LOCAL_HDiff)));
897}
898
899
900INLINE_ONLY GlobalEntry *PtoGlobalEAdjust__ (GlobalEntry * CACHE_TYPE);
901
902INLINE_ONLY GlobalEntry *
903PtoGlobalEAdjust__ (GlobalEntry * ptr USES_REGS)
904{
905 if (!ptr)
906 return NULL;
907 return (GlobalEntry *) (((GlobalEntry *) (CharP (ptr) + LOCAL_HDiff)));
908}
909
910
911INLINE_ONLY StaticArrayEntry *PtoArraySAdjust__ (StaticArrayEntry * CACHE_TYPE);
912
913INLINE_ONLY StaticArrayEntry *
914PtoArraySAdjust__ (StaticArrayEntry * ptr USES_REGS)
915{
916 if (!ptr)
917 return NULL;
918 return (StaticArrayEntry *) (((StaticArrayEntry *) (CharP (ptr) + LOCAL_HDiff)));
919}
920
921
922
923INLINE_ONLY struct logic_upd_clause *PtoLUCAdjust__ (struct logic_upd_clause* CACHE_TYPE);
924
925INLINE_ONLY struct logic_upd_clause *
926PtoLUCAdjust__ (struct logic_upd_clause *ptr USES_REGS)
927{
928 return (struct logic_upd_clause
929 *) (((struct logic_upd_clause *) (CharP (ptr) + LOCAL_HDiff)));
930}
931
932
933
934INLINE_ONLY struct static_clause *PtoStCAdjust__ (struct static_clause * CACHE_TYPE);
935
936INLINE_ONLY struct static_clause *
937PtoStCAdjust__ (struct static_clause *ptr USES_REGS)
938{
939 return (struct static_clause
940 *) (((struct static_upd_clause *) (CharP (ptr) + LOCAL_HDiff)));
941}
942
943
944INLINE_ONLY struct dbterm_list *PtoDBTLAdjust__ (struct dbterm_list * CACHE_TYPE);
945
946INLINE_ONLY struct dbterm_list *
947PtoDBTLAdjust__ (struct dbterm_list * addr USES_REGS)
948{
949 return (struct dbterm_list *) ((ADDR) (CharP (addr) + LOCAL_HDiff));
950}
951
952
953#if PRECOMPUTE_REGADDRESS
954
955INLINE_ONLY wamreg XAdjust__ (wamreg CACHE_TYPE);
956
957INLINE_ONLY wamreg
958XAdjust__ (wamreg reg USES_REGS)
959{
960 return (wamreg) ((wamreg) ((reg) + LOCAL_XDiff));
961}
962
963
964#else
965
966INLINE_ONLY wamreg XAdjust__ (wamreg CACHE_TYPE);
967
968INLINE_ONLY wamreg
969XAdjust__ (wamreg reg USES_REGS)
970{
971 return (wamreg) ((reg));
972}
973
974
975#endif
976
977INLINE_ONLY yslot YAdjust__ (yslot CACHE_TYPE);
978
979INLINE_ONLY yslot
980YAdjust__ (yslot reg USES_REGS)
981{
982 return (yslot) ((reg));
983}
984
985
986
987INLINE_ONLY int IsOldLocal__ (CELL CACHE_TYPE);
988
989INLINE_ONLY int
990IsOldLocal__ (CELL reg USES_REGS)
991{
992 return (int) (IN_BETWEEN (LOCAL_OldASP, reg, LOCAL_OldLCL0));
993}
994
995
996
997INLINE_ONLY int IsOldLocalPtr__ (CELL * CACHE_TYPE);
998
999INLINE_ONLY int
1000IsOldLocalPtr__ (CELL * ptr USES_REGS)
1001{
1002 return (int) (IN_BETWEEN (LOCAL_OldASP, ptr, LOCAL_OldLCL0));
1003}
1004
1005
1006
1007/* require because the trail might contain dangling pointers */
1008
1009INLINE_ONLY int IsOldLocalInTR__ (CELL CACHE_TYPE);
1010
1011INLINE_ONLY int
1012IsOldLocalInTR__ (CELL reg USES_REGS)
1013{
1014 return (int) (IN_BETWEEN (LOCAL_OldASP, reg, LOCAL_OldLCL0));
1015}
1016
1017
1018
1019INLINE_ONLY int IsOldLocalInTRPtr__ (CELL * CACHE_TYPE);
1020
1021INLINE_ONLY int
1022IsOldLocalInTRPtr__ (CELL * ptr USES_REGS)
1023{
1024 return (int) (IN_BETWEEN (LOCAL_OldASP, ptr, LOCAL_OldLCL0));
1025}
1026
1027
1028
1029
1030INLINE_ONLY int IsOldH__ (CELL CACHE_TYPE);
1031
1032INLINE_ONLY int
1033IsOldH__ (CELL reg USES_REGS)
1034{
1035 return (int) ((CharP (reg) == CharP (LOCAL_OldH)));
1036}
1037
1038
1039
1040
1041
1042
1043
1044INLINE_ONLY int IsOldDelay__ (CELL CACHE_TYPE);
1045
1046INLINE_ONLY int
1047IsOldDelay__ (CELL reg USES_REGS)
1048{
1049 return (int) (IN_BETWEEN (LOCAL_OldGlobalBase, reg, LOCAL_OldH0));
1050}
1051
1052
1053
1054INLINE_ONLY int IsOldGlobalPtr__ (CELL * CACHE_TYPE);
1055
1056INLINE_ONLY int
1057IsOldGlobalPtr__ (CELL * ptr USES_REGS)
1058{
1059 return (int) (IN_BETWEEN (LOCAL_OldGlobalBase, ptr, LOCAL_OldH));
1060}
1061
1062
1063
1064INLINE_ONLY int IsOldTrail__ (CELL CACHE_TYPE);
1065
1066INLINE_ONLY int
1067IsOldTrail__ (CELL reg USES_REGS)
1068{
1069 return (int) (IN_BETWEEN (LOCAL_OldTrailBase, reg, LOCAL_OldTR));
1070}
1071
1072
1073
1074INLINE_ONLY int IsOldTrailPtr__ (CELL * CACHE_TYPE);
1075
1076INLINE_ONLY int
1077IsOldTrailPtr__ (CELL * ptr USES_REGS)
1078{
1079 return (int) (IN_BETWEEN (LOCAL_OldTrailBase, ptr, LOCAL_OldTR));
1080}
1081
1082
1083
1084INLINE_ONLY int IsOldVarTableTrailPtr__ (struct VARSTRUCT * CACHE_TYPE);
1085
1086INLINE_ONLY int
1087IsOldVarTableTrailPtr__ (struct VARSTRUCT *ptr USES_REGS)
1088{
1089 return (int) (IN_BETWEEN (LOCAL_OldTrailBase, ptr, LOCAL_OldTR));
1090}
1091
1092
1093
1094INLINE_ONLY int IsOldTokenTrailPtr__ (struct TOKEN * CACHE_TYPE);
1095
1096INLINE_ONLY int
1097IsOldTokenTrailPtr__ (struct TOKEN *ptr USES_REGS)
1098{
1099 return (int) (IN_BETWEEN (LOCAL_OldTrailBase, ptr, LOCAL_OldTR));
1100}
1101
1102
1103
1104INLINE_ONLY int IsOldCode__ (CELL CACHE_TYPE);
1105
1106INLINE_ONLY int
1107IsOldCode__ (CELL reg USES_REGS)
1108{
1109#if USE_SYSTEM_MALLOC
1110 return reg < (CELL)LOCAL_OldGlobalBase || reg > (CELL)LOCAL_OldTrailTop;
1111#else
1112 return (int) (IN_BETWEEN (LOCAL_OldHeapBase, reg, LOCAL_OldHeapTop));
1113#endif
1114}
1115
1116
1117
1118INLINE_ONLY int IsOldCodeCellPtr__ (CELL * CACHE_TYPE);
1119
1120INLINE_ONLY int
1121IsOldCodeCellPtr__ (CELL * ptr USES_REGS)
1122{
1123 return (int) (IN_BETWEEN (LOCAL_OldHeapBase, ptr, LOCAL_OldHeapTop));
1124}
1125
1126
1127
1128INLINE_ONLY int IsGlobal__ (CELL CACHE_TYPE);
1129
1130INLINE_ONLY int
1131IsGlobal__ (CELL reg USES_REGS)
1132{
1133 return (int) (IN_BETWEEN (LOCAL_GlobalBase, reg, HR));
1134}
1135
1136
1137void Yap_AdjustStacksAndTrail(void);
1138void Yap_AdjustRegs(int);
1139
1140#endif
Definition: alloc.h:63
Definition: Yatom.h:689
Definition: arrays.h:92
Definition: YapHeap.h:81
Definition: Yatom.h:151
Definition: Yatom.h:917
Module property: low-level data used to manage modes.
Definition: Yatom.h:209
Definition: Yatom.h:295
Definition: Yatom.h:544
Definition: arrays.h:76
Definition: amidefs.h:264