4 //There is probably a better way for these...but we'll just hardcode
5 //them for now..probably a real implementation would page protect the
6 //page after...then default to something simpler
8 #define MAXPOINTERS 1024*1024*16
9 #define MAXVALUES 1024*1024*16
14 void * array[MAXPOINTERS];
17 struct primitivelist {
22 extern __thread pointerlist ptrstack;
23 extern __thread primitivelist primstack;
27 #define RESTOREPTR(x) x=ptrstack.array[--ptrstack.count]
29 #define STOREPTR(x) ptrstack.array[ptrstack.count++]=x
33 #define RESTOREANDBRANCH(loc) if (primstack.array[--primstack.count]) goto loc
35 #define STOREANDBRANCH(cond, loc) if (primatack.array[primstack.count++]=cond) goto loc
39 #define RESTOREI(x) x=primstack.array[--primstack.count]
41 #define STOREI(x) primstack.array[primstack.count++]=x
45 #define RESTOREF(x) x=*((float *)&primstack.array[--primstack.count])
47 #define STOREF(x) *((float *)&primstack.array[primstack.count++])=x
51 #define RESTORED(x) x=*((double *)&primstack.array[primstack.count-=2])
53 #define STORED(x) *((double *)&primstack.array[primstack.count])=x; primstack.count+=2
57 #define RESTOREB(x) x=*((char *)&primstack.array[--primstack.count])
59 #define STOREB(x) *((char *)&primstack.array[primstack.count++])=x
63 #define RESTOREC(x) x=*((short *)&primstack.array[--primstack.count])
65 #define STOREC(x) *((short *)&primstack.array[primstack.count++])=x
69 #define RESTOREJ(x) x=*((long long *)&primstack.array[primstack.count-=2])
71 #define STOREJ(x) *((long long *)&primstack.array[primstack.count])=x; primstack.count+=2
75 #define RESTOREZ(x) x=primstack.array[--primstack.count]
77 #define STOREZ(x) primstack.array[primstack.count++]=x