1738Speter /* Copyright (c) 1979 Regents of the University of California */ 2738Speter 3*14905Speter /* static char sccsid[] = "@(#)pc.h 1.9 09/05/83"; */ 4738Speter 59120Smckusick #include <setjmp.h> 69120Smckusick 7738Speter /* 810659Speter * random constants for pc 9738Speter */ 10738Speter 11738Speter /* 12738Speter * the name of the display. 13738Speter */ 14738Speter #define DISPLAYNAME "__disply" 15738Speter 16738Speter /* 17738Speter * the structure below describes the locals used by the run time system. 18738Speter * at function entry, at least this much space is allocated, 19738Speter * and the following information is filled in: 20738Speter * the address of a routine to close the current frame for unwinding, 21738Speter * a pointer to the display entry for the current static level and 22738Speter * the previous contents of the display for this static level. 23738Speter * the curfile location is used to point to the currently active file, 24738Speter * and is filled in as io is initiated. 25738Speter * one of these structures is allocated on the (negatively growing) stack. 26738Speter * at function entry, fp is set to point to the last field of the struct, 27738Speter * thus the offsets of the fields are as indicated below. 28738Speter */ 29738Speter struct rtlocals { 309120Smckusick jmp_buf gotoenv; 31738Speter struct iorec *curfile; 32738Speter struct dispsave dsave; 33738Speter } rtlocs; 349120Smckusick #define GOTOENVOFFSET ( -sizeof rtlocs ) 359120Smckusick #define CURFILEOFFSET ( GOTOENVOFFSET + sizeof rtlocs.gotoenv ) 36738Speter #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile ) 37738Speter 38738Speter /* 3910659Speter * this is a cookie used to communicate between the 4010659Speter * routine entry code and the routine exit code. 4110659Speter * mostly it's for labels shared between the two. 42738Speter */ 4310659Speter #ifdef vax 4410659Speter struct entry_exit_cookie { 4510659Speter struct nl *nlp; 4610659Speter char extname[BUFSIZ]; 4710659Speter int toplabel; 4810659Speter int savlabel; 4910659Speter }; 5010659Speter #define FRAME_SIZE_LABEL "LF" 5110659Speter #define SAVE_MASK_LABEL "L" 5210659Speter #endif vax 53738Speter 5410659Speter #ifdef mc68000 5510659Speter struct entry_exit_cookie { 5610659Speter struct nl *nlp; 5710659Speter char extname[BUFSIZ]; 5810659Speter int toplabel; 5910659Speter }; 6010659Speter #define FRAME_SIZE_LABEL "LF" 6110659Speter #define PAGE_BREAK_LABEL "LP" 6210659Speter #define SAVE_MASK_LABEL "LS" 6310659Speter #endif mc68000 64738Speter 65738Speter /* 66738Speter * formats for various names 67738Speter * NAMEFORMAT arbitrary length strings. 68738Speter * EXTFORMAT for externals, a preceding underscore. 694880Speter * LABELFORMAT for label names, a preceding dollar-sign. 70738Speter * PREFIXFORMAT used to print made up names with prefixes. 71738Speter * LABELPREFIX with getlab() makes up label names. 72738Speter * LLABELPREFIX with getlab() makes up sdb labels. 733428Speter * FORMALPREFIX prefix for EXTFORMAT for formal entry points. 74738Speter * a typical use might be to print out a name with a preceeding underscore 75738Speter * with putprintf( EXTFORMAT , 0 , name ); 76738Speter */ 77738Speter #define NAMEFORMAT "%s" 78738Speter #define EXTFORMAT "_%s" 794880Speter #define LABELFORMAT "$%s" 80738Speter #define PREFIXFORMAT "%s%d" 81738Speter #define LABELPREFIX "L" 82738Speter #define LLABELPREFIX "LL" 833428Speter #define FORMALPREFIX "__" 84738Speter 85738Speter /* 86738Speter * the name of the statement counter 87738Speter */ 88738Speter #define STMTCOUNT "__stcnt" 89738Speter 90738Speter /* 91738Speter * the name of the pcp counters 92738Speter */ 93738Speter #define PCPCOUNT "__pcpcount" 94738Speter 95738Speter /* 96738Speter * a vector of pointer to enclosing functions for fully qualified names. 97738Speter */ 98738Speter char *enclosing[ DSPLYSZ ]; 99738Speter 10010659Speter #ifdef vax 101738Speter /* 10210659Speter * the runtime framepointer and argumentpointer registers 10310659Speter */ 10410659Speter # define P2FP 13 10510659Speter # define P2FPNAME "fp" 10610659Speter # define P2AP 12 10710659Speter # define P2APNAME "ap" 10810659Speter 10910659Speter /* 11010659Speter * the register save mask for saving no registers 11110659Speter */ 11210659Speter # define RSAVEMASK ( 0 ) 11310659Speter 11410659Speter /* 11510659Speter * runtime check mask for divide check and integer overflow 11610659Speter */ 11710659Speter # define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) ) 11811328Speter 11910659Speter /* 120738Speter * and of course ... 121738Speter */ 12210659Speter # define BITSPERBYTE 8 12310659Speter #endif vax 12410659Speter 12510659Speter #ifdef mc68000 12610659Speter /* 12711328Speter * these magic numbers lifted from pcc/mac2defs 128*14905Speter * the offsets are for mapping data and address register numbers 129*14905Speter * to linear register numbers. e.g. d2 ==> r2, and a2 ==> r10. 13010659Speter */ 131*14905Speter # define DATA_REG_OFFSET 0 132*14905Speter # define ADDR_REG_OFFSET 8 13310659Speter # define P2FPNAME "a6" 134*14905Speter # define P2FP (ADDR_REG_OFFSET + 6) 13510659Speter # define P2APNAME "a6" 136*14905Speter # define P2AP (ADDR_REG_OFFSET + 6) 13710659Speter 13810659Speter /* 13910659Speter * and still ... 14010659Speter */ 14110659Speter # define BITSPERBYTE 8 14210659Speter #endif mc68000 143