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