5 /* $Id: shadow.h,v 2.4 1994/06/24 10:49:06 ceriel Exp $ */
11 extern char *data_sh; /* shadowbytes of data space */
12 extern char *stack_sh; /* shadowbytes of stack space */
13 extern char *stackML_sh; /* stack_sh + ML (to speed up stack access) */
15 /* Bit 0, 1, 2 and 3: datatype/pointertype. */
18 #define SH_FLOAT (0x02)
19 #define SH_DATAP (0x04)
20 #define SH_INSP (0x08)
22 /* Bit 7: protection bit */
24 #define SH_PROT (0x80)
26 /******** Shadowbytes, general ********/
28 #define dt_sh(a) (*(data_sh + (p2i(a))))
29 #define st_sh(a) (*(stackML_sh - (a)))
30 #define mem_sh(a) (in_stack(a) ? st_sh(a) : dt_sh(a))
32 /******** Shadowbytes settings for data ********/
34 #define dt_undef(a) (dt_sh(a) = UNDEFINED)
36 #define dt_int(a) (dt_sh(a) = SH_INT)
37 #define dt_fl(a) (dt_sh(a) = SH_FLOAT)
38 #define dt_ip(a) (dt_sh(a) = SH_INSP)
39 #define dt_dp(a) (dt_sh(a) = SH_DATAP)
41 #define dt_prot2b(a) { dt_sh(a) |= SH_PROT; dt_sh(a+1) |= SH_PROT; }
42 #define dt_unpr2b(a) { dt_sh(a) &= ~SH_PROT; dt_sh(a+1) &= ~SH_PROT; }
43 #define dt_prot(a,n) { dt_prot2b(a); \
44 if ((n) == 4) { dt_prot2b(a+2); } }
45 #define dt_unprot(a,n) { dt_unpr2b(a); \
46 if ((n) == 4) { dt_unpr2b(a+2); } }
48 /******** Shadowbytes settings for stack ********/
50 #define st_undef(a) (st_sh(a) = UNDEFINED)
52 #define st_int(a) (st_sh(a) = SH_INT)
53 #define st_fl(a) (st_sh(a) = SH_FLOAT)
54 #define st_ip(a) (st_sh(a) = SH_INSP)
55 #define st_dp(a) (st_sh(a) = SH_DATAP)
57 #define st_prot2b(a) { st_sh(a) |= SH_PROT; st_sh(a+1) |= SH_PROT; }
58 #define st_unpr2b(a) { st_sh(a) &= ~SH_PROT; st_sh(a+1) &= ~SH_PROT; }
59 #define st_prot(a,n) { st_prot2b(a); \
60 if ((n) == 4) { st_prot2b(a+2); } }
61 #define st_unprot(a,n) { st_unpr2b(a); \
62 if ((n) == 4) { st_unpr2b(a+2); } }
64 /******** Shadowbytes checking for data ********/
66 #define is_dt_set(a,n,s) ((dt_sh(a) & s) && (dt_sh(a+(n-1)) & s))
67 #define is_dt_prot(a) (dt_sh(a) & SH_PROT)
68 #define ch_dt_prot(a) { if (is_dt_prot(a)) warning(WDESROM); }
70 /******** Shadowbytes checking for stack ********/
72 #define is_st_set(a,n,s) ((st_sh(a) & s) && (st_sh(a+(n-1)) & s))
73 #define is_st_prot(a) (st_sh(a) & SH_PROT)
74 #define ch_st_prot(a) { if (is_st_prot(a)) warning(WDESRSB); }
86 #define dt_unprot(a,b)
96 #define st_unprot(a,b)