1: /*
   2:  * Copyright (c) 1983 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:  *	@(#)pcc.h	5.1 (Berkeley) 5/30/85
   7:  */
   8: 
   9: /*
  10:  * This file contains definitions for all the constants and structures
  11:  *	needed to use the intermediate code files generated and read by
  12:  *	the Portable C Compiler and related compilers.
  13:  *
  14:  * Rules for changing this code:
  15:  *   1)	All op values must be integer constants -- this permits us to run
  16:  *	a 'sed' script on this file to create %term declarations for yacc.
  17:  *   2)	Because the PCC uses fancy ASG and UNARY macros, assignment
  18:  *	operators must have values 1 greater than corresponding normal
  19:  *	operators, and unary operators must have values 2 greater ditto.
  20:  *   3) Ops used only by f1 must have values >= 150 (PCCF_FORTOPS).
  21:  *   4)	Other language-dependent ops must have values >= 200.
  22:  */
  23: 
  24: # ifndef    PCC_TOKENS
  25: 
  26: # define    PCC_TOKENS  0
  27: 
  28: # define    PCC_ERROR   1   /* an error node */
  29: # define    PCC_FREE    2   /* an unused node */
  30: 
  31: /*
  32:  * Constants.
  33:  */
  34: # define    PCC_STRING  3   /* a string constant */
  35: # define    PCC_ICON    4   /* an integer constant */
  36: # define    PCC_FCON    5   /* a floating point constant */
  37: # define    PCC_DCON    6   /* a double precision f.p. constant */
  38: 
  39: /*
  40:  * Leaf types.
  41:  */
  42: # define    PCC_NAME    7   /* an identifier */
  43: # define    PCC_REG     8   /* a register */
  44: # define    PCC_OREG    9   /* register and offset */
  45: # define    PCC_CCODES  10  /* condition codes */
  46: # define    PCC_FLD     11  /* a bit field */
  47: 
  48: /*
  49:  * Arithmetic operators.
  50:  */
  51: # define    PCC_PLUS    12  /* + */
  52: # define    PCC_PLUSEQ  13  /* += */
  53: # define    PCC_UPLUS   14  /* unary + (for completeness) */
  54: # define    PCC_MINUS   15  /* - */
  55: # define    PCC_MINUSEQ 16  /* -= */
  56: # define    PCC_UMINUS  17  /* unary - */
  57: # define    PCC_MUL     18  /* * */
  58: # define    PCC_MULEQ   19  /* *= */
  59: /* Reserve a slot for 'unary *', which is PCC jargon for PCC_DEREF (yech) */
  60: # define    PCC_DIV     21  /* / */
  61: # define    PCC_DIVEQ   22  /* /= */
  62: # define    PCC_MOD     23  /* % */
  63: # define    PCC_MODEQ   24  /* %= */
  64: # define    PCC_INCR    25  /* ++ */
  65: # define    PCC_DECR    26  /* -- */
  66: # define    PCC_ASSIGN  27  /* = (these last 3 are stretching it) */
  67: 
  68: /*
  69:  * Bit operators.
  70:  */
  71: # define    PCC_AND     28  /* & */
  72: # define    PCC_ANDEQ   29  /* &= */
  73: /* Reserve a slot for 'unary &', jargon for PCC_ADDROF */
  74: # define    PCC_OR      31  /* | */
  75: # define    PCC_OREQ    32  /* |= */
  76: # define    PCC_ER      33  /* ^ */
  77: # define    PCC_EREQ    34  /* ^= */
  78: # define    PCC_LS      35  /* << */
  79: # define    PCC_LSEQ    36  /* <<= */
  80: # define    PCC_RS      37  /* >> */
  81: # define    PCC_RSEQ    38  /* >>= */
  82: # define    PCC_COMPL   39  /* ~ */
  83: 
  84: /*
  85:  * Booleans.
  86:  */
  87: # define    PCC_EQ      40  /* == */
  88: # define    PCC_NE      41  /* != */
  89: # define    PCC_LE      42  /* <= */
  90: # define    PCC_LT      43  /* < */
  91: # define    PCC_GE      44  /* >= */
  92: # define    PCC_GT      45  /* > */
  93: # define    PCC_ULE     46  /* unsigned <= */
  94: # define    PCC_ULT     47  /* unsigned < */
  95: # define    PCC_UGE     48  /* unsigned >= */
  96: # define    PCC_UGT     49  /* unsigned > */
  97: # define    PCC_QUEST   50  /* ? (for conditional expressions) */
  98: # define    PCC_COLON   51  /* : (for conditional expressions) */
  99: # define    PCC_ANDAND  52  /* && */
 100: # define    PCC_OROR    53  /* || */
 101: # define    PCC_NOT     54  /* ! */
 102: 
 103: /*
 104:  * Function calls.
 105:  */
 106: # define    PCC_CALL    55  /* call by value */
 107: /* no ASG */
 108: # define    PCC_UCALL   57  /* call with no arguments */
 109: # define    PCC_FORTCALL    58  /* call by reference? */
 110: /* no ASG */
 111: # define    PCC_UFORTCALL   60  /* ??? */
 112: # ifdef INLINE
 113: # define    PCC_INLINE  61  /* inline function */
 114: /* no ASG */
 115: # define    PCC_UINLINE 63  /* inline with no arguments */
 116: # endif INLINE
 117: 
 118: /*
 119:  * Referencing and dereferencing.
 120:  */
 121: # define    PCC_DEREF   20  /* * */
 122: # define    PCC_ADDROF  30  /* & */
 123: 
 124: /*
 125:  * Special structure operators.
 126:  */
 127: # define    PCC_DOT     64  /* . */
 128: # define    PCC_STREF   65  /* -> */
 129: # define    PCC_STASG   66  /* structure assignment */
 130: # define    PCC_STARG   67  /* an argument of type structure */
 131: # define    PCC_STCALL  68  /* a function of type structure */
 132: /* no ASG */
 133: # define    PCC_USTCALL 70  /* unary structure function */
 134: 
 135: /*
 136:  * Conversions.
 137:  */
 138: # define    PCC_SCONV   71  /* scalar conversion */
 139: # define    PCC_PCONV   72  /* pointer conversion */
 140: # define    PCC_PMCONV  73  /* pointer multiply conversion */
 141: # define    PCC_PVCONV  74  /* pointer divide conversion */
 142: # define    PCC_CAST    75  /* redundant? */
 143: 
 144: /*
 145:  * Bracket types.
 146:  */
 147: # define    PCC_LB      76  /* [ */
 148: # define    PCC_RB      77  /* ] */
 149: 
 150: /*
 151:  * Comma nodes.
 152:  */
 153: # define    PCC_COMOP   78  /* , (in expressions) */
 154: # define    PCC_CM      79  /* , (in argument lists) */
 155: 
 156: /*
 157:  * Miscellaneous.
 158:  */
 159: # define    PCC_FORCE   80  /* result of last expression goes in r0 */
 160: # define    PCC_GOTO    81  /* unconditional goto */
 161: # define    PCC_CBRANCH 82  /* goto label if !test */
 162: # define    PCC_RETURN  83  /* return from function */
 163: # define    PCC_INIT    84  /* initialized data */
 164: # define    PCC_TYPE    85  /* a type */
 165: # define    PCC_CLASS   86  /* a storage class */
 166: 
 167: # define    PCC_MAXOP   86  /* highest numbered PCC op */
 168: 
 169: /*
 170:  * Special codes for interfacing to /lib/f1.
 171:  */
 172: # define    PCCF_FORTOPS    150
 173: # define    PCCF_FTEXT  150 /* pass literal assembler text */
 174: # define    PCCF_FEXPR  151 /* a statement */
 175: # define    PCCF_FSWITCH    152 /* not implemented */
 176: # define    PCCF_FLBRAC 153 /* beginning of subroutine */
 177: # define    PCCF_FRBRAC 154 /* end of subroutine */
 178: # define    PCCF_FEOF   155 /* end of file */
 179: # define    PCCF_FARIF  156 /* not implemented */
 180: # define    PCCF_FLABEL 157 /* an f77 label */
 181: 
 182: # endif	PCC_TOKENS
 183: 
 184: 
 185: /*
 186:  * Types, as encoded in intermediate file cookies.
 187:  */
 188: # define    PCCT_UNDEF  0
 189: # define    PCCT_FARG   1   /* function argument */
 190: # define    PCCT_CHAR   2
 191: # define    PCCT_SHORT  3
 192: # define    PCCT_INT    4
 193: # define    PCCT_LONG   5
 194: # define    PCCT_FLOAT  6
 195: # define    PCCT_DOUBLE 7
 196: # define    PCCT_STRTY  8
 197: # define    PCCT_UNIONTY    9
 198: # define    PCCT_ENUMTY 10
 199: # define    PCCT_MOETY  11  /* member of enum */
 200: # define    PCCT_UCHAR  12
 201: # define    PCCT_USHORT 13
 202: # define    PCCT_UNSIGNED   14
 203: # define    PCCT_ULONG  15
 204: 
 205: /*
 206:  * Type modifiers.
 207:  */
 208: # define    PCCTM_PTR   020
 209: # define    PCCTM_FTN   040
 210: # define    PCCTM_ARY   060
 211: # define    PCCTM_BASETYPE  017
 212: # define    PCCTM_TYPESHIFT 2
 213: 
 214: 
 215: /*
 216:  * Useful macros.  'PCCOM' macros apply to ops.
 217:  */
 218: # define    PCCOM_ASG   1+
 219: # define    PCCOM_UNARY 2+
 220: # define    PCCOM_NOASG (-1)+
 221: # define    PCCOM_NOUNARY   (-2)+
 222: 
 223: # define    PCCM_TRIPLE(op, var, type)  \
 224:     ((op) | ((var) << 8) | (long) (type) << 16)
 225: # define    PCCM_TEXT(s)            \
 226:     PCCM_TRIPLE(PCCF_FTEXT, (strlen(s) + 3) / 4, 0)
 227: # define    PCCM_ADDTYPE(t, m)      \
 228:     ((((t) &~ PCCTM_BASETYPE) << PCCTM_TYPESHIFT) | \
 229:     (m) | ((t) & PCCTM_BASETYPE))

Defined macros

PCCF_FARIF defined in line 179; never used
PCCF_FLABEL defined in line 180; used 1 times
PCCF_FORTOPS defined in line 172; never used
PCCF_FSWITCH defined in line 175; never used
PCCM_TEXT defined in line 225; never used
PCCOM_NOASG defined in line 220; never used
PCCOM_NOUNARY defined in line 221; never used
PCCTM_ARY defined in line 210; used 4 times
PCCTM_BASETYPE defined in line 211; used 2 times
PCCTM_PTR defined in line 208; used 215 times
PCCTM_TYPESHIFT defined in line 212; used 1 times
PCCT_ENUMTY defined in line 198; never used
PCCT_FARG defined in line 189; never used
PCCT_INT defined in line 192; used 456 times
PCCT_MOETY defined in line 199; never used
PCCT_UCHAR defined in line 200; never used
PCCT_ULONG defined in line 203; never used
PCCT_UNIONTY defined in line 197; never used
PCCT_UNSIGNED defined in line 202; never used
PCCT_USHORT defined in line 201; never used
PCC_ADDROF defined in line 122; used 1 times
PCC_ANDEQ defined in line 72; never used
PCC_CAST defined in line 142; used 1 times
PCC_CCODES defined in line 45; used 1 times
PCC_CLASS defined in line 165; never used
PCC_DCON defined in line 37; never used
PCC_DECR defined in line 65; used 1 times
PCC_DIVEQ defined in line 61; never used
PCC_DOT defined in line 127; used 1 times
PCC_EREQ defined in line 77; never used
PCC_ERROR defined in line 28; used 14 times
PCC_FCON defined in line 36; used 1 times
PCC_FLD defined in line 46; used 1 times
PCC_FORTCALL defined in line 109; used 1 times
PCC_FREE defined in line 29; used 1 times
PCC_GOTO defined in line 160; used 2 times
PCC_ICON defined in line 35; used 202 times
PCC_INCR defined in line 64; used 1 times
PCC_INIT defined in line 163; used 1 times
PCC_INLINE defined in line 113; never used
PCC_LB defined in line 147; never used
PCC_LSEQ defined in line 79; never used
PCC_MAXOP defined in line 167; used 1 times
PCC_MINUSEQ defined in line 55; never used
PCC_MODEQ defined in line 63; never used
PCC_MULEQ defined in line 58; used 1 times
PCC_OREQ defined in line 75; never used
PCC_PCONV defined in line 139; used 1 times
PCC_PLUSEQ defined in line 52; used 1 times
PCC_PMCONV defined in line 140; used 1 times
PCC_PVCONV defined in line 141; used 1 times
PCC_RB defined in line 148; never used
PCC_RETURN defined in line 162; never used
PCC_RSEQ defined in line 81; never used
PCC_STCALL defined in line 131; used 3 times
PCC_STREF defined in line 128; used 1 times
PCC_STRING defined in line 34; used 1 times
PCC_TOKENS defined in line 26; used 1 times
  • in line 24
PCC_TYPE defined in line 164; never used
PCC_UFORTCALL defined in line 111; used 1 times
PCC_UGE defined in line 95; used 1 times
PCC_UGT defined in line 96; used 1 times
PCC_UINLINE defined in line 115; never used
PCC_ULE defined in line 93; used 1 times
PCC_ULT defined in line 94; used 1 times
PCC_UPLUS defined in line 53; never used
PCC_USTCALL defined in line 133; used 1 times

Usage of this include

Last modified: 1985-06-19
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1986
Valid CSS Valid XHTML 1.0 Strict