Annotation of 43BSDTahoe/include/pcc.h, revision 1.1.1.1

1.1       root        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))

unix.superglobalmegacorp.com

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