14#ifdef MULTI_ASSIGNMENT_VARIABLES
20#ifndef OPT_MAVAR_STATIC
21#define OPT_MAVAR_STATIC inline static
24OPT_MAVAR_STATIC
unsigned int Yap_MAVAR_HASH(CELL *addr USES_REGS);
25OPT_MAVAR_STATIC
struct ma_h_entry * Yap_ALLOC_NEW_MASPACE(USES_REGS1);
26OPT_MAVAR_STATIC
int Yap_lookup_ma_var(CELL *addr USES_REGS);
27OPT_MAVAR_STATIC UInt Yap_NEW_MAHASH(ma_h_inner_struct *top USES_REGS);
29OPT_MAVAR_STATIC
unsigned int
30Yap_MAVAR_HASH(CELL *addr USES_REGS) {
32 return((((
unsigned int)((CELL)(addr)))>>3)%MAVARS_HASH_SIZE);
34 return((((
unsigned int)((CELL)(addr)))>>2)%MAVARS_HASH_SIZE);
38OPT_MAVAR_STATIC
struct ma_h_entry *
39Yap_ALLOC_NEW_MASPACE(USES_REGS1)
41 ma_h_inner_struct *newS = LOCAL_ma_h_top;
47Yap_lookup_ma_var(CELL *addr USES_REGS) {
48 unsigned int i = Yap_MAVAR_HASH(addr PASS_REGS);
49 struct ma_h_entry *nptr, *optr;
51 if (LOCAL_ma_hash_table[i].timestmp != LOCAL_ma_timestamp) {
52 LOCAL_ma_hash_table[i].timestmp = LOCAL_ma_timestamp;
53 LOCAL_ma_hash_table[i].val.addr = addr;
54 LOCAL_ma_hash_table[i].val.next = NULL;
57 if (LOCAL_ma_hash_table[i].val.addr == addr)
59 optr = &(LOCAL_ma_hash_table[i].val);
60 nptr = LOCAL_ma_hash_table[i].val.next;
61 while (nptr != NULL) {
62 if (nptr->addr == addr) {
68 nptr = Yap_ALLOC_NEW_MASPACE(PASS_REGS1);
75Yap_NEW_MAHASH(ma_h_inner_struct *top USES_REGS) {
76 UInt time = ++LOCAL_ma_timestamp;
80 for (i = 0; i < MAVARS_HASH_SIZE; i++)
81 LOCAL_ma_hash_table[i].timestmp = 0;
82 time = ++LOCAL_ma_timestamp;
88#define Yap_MAVAR_HASH(addr)
89#define Yap_ALLOC_NEW_MASPACE()
90#define Yap_lookup_ma_var(addr)
91#define Yap_NEW_MAHASH(top)