Annotation of 43BSDReno/pgrm/pascal/px/machdep.h, revision 1.1.1.1

1.1       root        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.3 (Berkeley) 1/9/89
                      7:  */
                      8: 
                      9: #ifdef ADDR32
                     10: #define pushaddr(x)    push4((long)(x))
                     11: #define popaddr()      (char *)pop4()
                     12: #endif ADDR32
                     13: #ifdef ADDR16
                     14: #define pushaddr(x)    push2((short)(x))
                     15: #define popaddr()      (char *)pop2()
                     16: #endif ADDR16
                     17: 
                     18: #define popfile()      (FILE *)(popaddr())
                     19: 
                     20: #if defined(pdp11)
                     21: #define        popint  pop2
                     22: #define        pushint push2
                     23: #else
                     24: #define popint pop4
                     25: #define pushint        push4
                     26: #endif
                     27: 
                     28: /*
                     29:  * Machine specific macros for reading quantities from the
                     30:  * interpreter instruction stream. Operands in the instruction
                     31:  * stream are aligned to short, but not long boundries. Blockmarks
                     32:  * are always long aligned. Stack alignment indicates whether the
                     33:  * stack is short or long aligned. Stack alignment is assumed to
                     34:  * be no more than long aligned for ADDR32 machines, short aligned
                     35:  * for ADDR16 machines.
                     36:  */
                     37: #if defined(vax) || defined(mc68000) || defined(pdp11)
                     38: #define PCLONGVAL(target) target = *pc.lp++
                     39: #define GETLONGVAL(target, srcptr) target = *(long *)(srcptr)
                     40: #define STACKALIGN(target, value) target = ((value) + 1) &~ 1
                     41: #endif vax || mc68000 || pdp11
                     42: 
                     43: #ifdef tahoe
                     44: #define PCLONGVAL(target) target = *pc.sp++ << 16, target += *pc.usp++
                     45: #define GETLONGVAL(target, srcptr) \
                     46:        tsp = (short *)(srcptr), \
                     47:        target = *tsp++ << 16, target += *(unsigned short *)tsp
                     48: #define STACKALIGN(target, value) target = ((value) + 3) &~ 3
                     49: #endif tahoe
                     50: 
                     51: /*
                     52:  * The following macros implement all accesses to the interpreter stack.
                     53:  *
                     54:  * They used to be hard-coded assembler stuff massaged into the compiler
                     55:  * output by sed scripts, but things are cleaner now.
                     56:  *
                     57:  * The STACKSIZE is an arbitrary value.  I picked 100K since it was unlikely
                     58:  * that anybody's program would run out of stack.  Automatic allocation
                     59:  * would be nice, maybe procedure call should check for enough space + slop
                     60:  * and expand it if necessary.  Expanding the stack will require
                     61:  * pointer relocation if it moves, though.  Probably better would be a
                     62:  * command line option to set the stack size.
                     63:  */
                     64: #define        STACKSIZE       100000
                     65: #define        setup()         { \
                     66:        extern char *malloc(); \
                     67:        stack.cp = STACKSIZE + malloc((unsigned)STACKSIZE); \
                     68:        }
                     69: #ifndef tahoe
                     70: #define        push2(x)        (*--stack.sp) = (x)
                     71: #else
                     72: #define        push2(x)        (*--stack.lp) = (x) << 16
                     73: #endif
                     74: #define push4(x)       (*--stack.lp)  = (x)
                     75: #define push8(x)       (*--stack.dbp) = (x)
                     76: #define pushsze8(x)    (*--stack.s8p) = (x)
                     77: #define pushsp(x)      (stack.cp -= (x))
                     78: #ifndef tahoe
                     79: #define pop2()         (*stack.sp++)
                     80: #else
                     81: #define pop2()         (*stack.lp++) >> 16
                     82: #endif
                     83: #define pop4()         (*stack.lp++)
                     84: #define pop8()         (*stack.dbp++)
                     85: #define popsze8()      (*stack.s8p++)
                     86: #define popsp(x)       (void)(stack.cp += (x))
                     87: #define        enableovrflo()  /*nop*/
                     88: #define        disableovrflo() /*nop*/

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.