1*22228Sdist /* 2*22228Sdist * Copyright (c) 1980 Regents of the University of California. 3*22228Sdist * All rights reserved. The Berkeley software License Agreement 4*22228Sdist * specifies the terms and conditions for redistribution. 5*22228Sdist * 6*22228Sdist * @(#)pc.h 5.1 (Berkeley) 06/05/85 7*22228Sdist */ 8738Speter 99120Smckusick #include <setjmp.h> 109120Smckusick 11738Speter /* 1210659Speter * random constants for pc 13738Speter */ 14738Speter 15738Speter /* 16738Speter * the name of the display. 17738Speter */ 18738Speter #define DISPLAYNAME "__disply" 19738Speter 20738Speter /* 21738Speter * the structure below describes the locals used by the run time system. 22738Speter * at function entry, at least this much space is allocated, 23738Speter * and the following information is filled in: 24738Speter * the address of a routine to close the current frame for unwinding, 25738Speter * a pointer to the display entry for the current static level and 26738Speter * the previous contents of the display for this static level. 27738Speter * the curfile location is used to point to the currently active file, 28738Speter * and is filled in as io is initiated. 29738Speter * one of these structures is allocated on the (negatively growing) stack. 30738Speter * at function entry, fp is set to point to the last field of the struct, 31738Speter * thus the offsets of the fields are as indicated below. 32738Speter */ 33738Speter struct rtlocals { 349120Smckusick jmp_buf gotoenv; 35738Speter struct iorec *curfile; 36738Speter struct dispsave dsave; 37738Speter } rtlocs; 389120Smckusick #define GOTOENVOFFSET ( -sizeof rtlocs ) 399120Smckusick #define CURFILEOFFSET ( GOTOENVOFFSET + sizeof rtlocs.gotoenv ) 40738Speter #define DSAVEOFFSET ( CURFILEOFFSET + sizeof rtlocs.curfile ) 41738Speter 42738Speter /* 4310659Speter * this is a cookie used to communicate between the 4410659Speter * routine entry code and the routine exit code. 4510659Speter * mostly it's for labels shared between the two. 46738Speter */ 4710659Speter #ifdef vax 4810659Speter struct entry_exit_cookie { 4910659Speter struct nl *nlp; 5010659Speter char extname[BUFSIZ]; 5110659Speter int toplabel; 5210659Speter int savlabel; 5310659Speter }; 5410659Speter #define FRAME_SIZE_LABEL "LF" 5510659Speter #define SAVE_MASK_LABEL "L" 5610659Speter #endif vax 57738Speter 5810659Speter #ifdef mc68000 5910659Speter struct entry_exit_cookie { 6010659Speter struct nl *nlp; 6110659Speter char extname[BUFSIZ]; 6210659Speter int toplabel; 6310659Speter }; 6410659Speter #define FRAME_SIZE_LABEL "LF" 6510659Speter #define PAGE_BREAK_LABEL "LP" 6610659Speter #define SAVE_MASK_LABEL "LS" 6710659Speter #endif mc68000 68738Speter 69738Speter /* 70738Speter * formats for various names 71738Speter * NAMEFORMAT arbitrary length strings. 72738Speter * EXTFORMAT for externals, a preceding underscore. 734880Speter * LABELFORMAT for label names, a preceding dollar-sign. 74738Speter * PREFIXFORMAT used to print made up names with prefixes. 75738Speter * LABELPREFIX with getlab() makes up label names. 76738Speter * LLABELPREFIX with getlab() makes up sdb labels. 773428Speter * FORMALPREFIX prefix for EXTFORMAT for formal entry points. 78738Speter * a typical use might be to print out a name with a preceeding underscore 79738Speter * with putprintf( EXTFORMAT , 0 , name ); 80738Speter */ 81738Speter #define NAMEFORMAT "%s" 82738Speter #define EXTFORMAT "_%s" 834880Speter #define LABELFORMAT "$%s" 84738Speter #define PREFIXFORMAT "%s%d" 85738Speter #define LABELPREFIX "L" 86738Speter #define LLABELPREFIX "LL" 873428Speter #define FORMALPREFIX "__" 88738Speter 89738Speter /* 90738Speter * the name of the statement counter 91738Speter */ 92738Speter #define STMTCOUNT "__stcnt" 93738Speter 94738Speter /* 95738Speter * the name of the pcp counters 96738Speter */ 97738Speter #define PCPCOUNT "__pcpcount" 98738Speter 99738Speter /* 100738Speter * a vector of pointer to enclosing functions for fully qualified names. 101738Speter */ 102738Speter char *enclosing[ DSPLYSZ ]; 103738Speter 10410659Speter #ifdef vax 105738Speter /* 10610659Speter * the runtime framepointer and argumentpointer registers 10710659Speter */ 10810659Speter # define P2FP 13 10910659Speter # define P2FPNAME "fp" 11010659Speter # define P2AP 12 11110659Speter # define P2APNAME "ap" 11210659Speter 11310659Speter /* 11410659Speter * the register save mask for saving no registers 11510659Speter */ 11610659Speter # define RSAVEMASK ( 0 ) 11710659Speter 11810659Speter /* 11910659Speter * runtime check mask for divide check and integer overflow 12010659Speter */ 12110659Speter # define RUNCHECK ( ( 1 << 15 ) | ( 1 << 14 ) ) 12211328Speter 12310659Speter /* 124738Speter * and of course ... 125738Speter */ 12610659Speter # define BITSPERBYTE 8 12710659Speter #endif vax 12810659Speter 12910659Speter #ifdef mc68000 13010659Speter /* 13111328Speter * these magic numbers lifted from pcc/mac2defs 13214905Speter * the offsets are for mapping data and address register numbers 13314905Speter * to linear register numbers. e.g. d2 ==> r2, and a2 ==> r10. 13410659Speter */ 13514905Speter # define DATA_REG_OFFSET 0 13614905Speter # define ADDR_REG_OFFSET 8 13710659Speter # define P2FPNAME "a6" 13814905Speter # define P2FP (ADDR_REG_OFFSET + 6) 13910659Speter # define P2APNAME "a6" 14014905Speter # define P2AP (ADDR_REG_OFFSET + 6) 14110659Speter 14210659Speter /* 14310659Speter * and still ... 14410659Speter */ 14510659Speter # define BITSPERBYTE 8 14610659Speter #endif mc68000 147