xref: /original-bsd/usr.bin/pascal/px/machdep.h (revision a141c157)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)machdep.h	5.2 (Berkeley) 11/12/86
7  */
8 
9 #ifdef ADDR32
10 #define pushaddr push4
11 #define popaddr (char *)pop4
12 #endif ADDR32
13 #ifdef ADDR16
14 #define pushaddr push2
15 #define popaddr (char *)pop2
16 #endif ADDR16
17 
18 /*
19  * Machine specific macros for reading quantities from the
20  * interpreter instruction stream. Operands in the instruction
21  * stream are aligned to short, but not long boundries. Blockmarks
22  * are always long aligned. Stack alignment indicates whether the
23  * stack is short or long aligned. Stack alignment is assumed to
24  * be no more than long aligned for ADDR32 machines, short aligned
25  * for ADDR16 machines.
26  */
27 #if defined(vax) || defined(mc68000) || defined(pdp11)
28 #define PCLONGVAL(target) target = *pc.lp++
29 #define GETLONGVAL(target, srcptr) target = *(long *)(srcptr)
30 #define STACKALIGN(target, value) target = ((value) + 1) &~ 1
31 #endif vax || mc68000 || pdp11
32 
33 #ifdef tahoe
34 #define PCLONGVAL(target) target = *pc.sp++ << 16, target += *pc.usp++
35 #define GETLONGVAL(target, srcptr) \
36 	tsp = (short *)(srcptr), \
37 	target = *tsp++ << 16, target += *(unsigned short *)tsp
38 #define STACKALIGN(target, value) target = ((value) + 3) &~ 3
39 #endif tahoe
40