Annotation of researchv9/cmd/sun/c2/as.h, revision 1.1.1.1

1.1       root        1: /*     @(#)as.h 1.1 86/02/03 SMI       */
                      2: 
                      3: /*
                      4:  * Copyright (c) 1985 by Sun Microsystems, Inc.
                      5:  */
                      6: 
                      7: #include <stdio.h>
                      8: 
                      9: /* Assembler parameters */
                     10: #define FILES_MAX      10      /* Max number of source files read */
                     11: #define        STR_MAX         32      /* number of chars in any single token */
                     12: #define OPERANDS_MAX   6       /* number of operands allowed per instruction */
                     13: #define        HASH_MAX        256     /* size of symbol, command, and macro hash tables */
                     14: #define CODE_MAX       12      /* number of bytes generated for 1 machine instruction */
                     15: 
                     16: /* Error Codes  -- See error.c */
                     17: 
                     18: typedef enum { E_NOERROR = 0, E_BADCHAR, E_MULTSYM, E_NOSPACE, E_OFFSET, 
                     19:                E_SYMLEN, E_SYMDEF, E_CONSTANT, E_TERM, E_OPERATOR,
                     20:                E_RELOCATE, E_TYPE, E_OPERAND, E_SYMBOL, E_EQUALS,
                     21:                E_NLABELS, E_OPCODE, E_STRING, E_PHASE,
                     22:                E_NUMOPS, E_LINELONG, E_REG, E_IADDR, E_PAREN,
                     23:                E_ODDADDR, E_UNDEFINED_L, E_REGLIST
                     24: } err_code;
                     25: 
                     26: /* Symbol attributes */
                     27: #define        S_DEC   01
                     28: #define S_DEF  02
                     29: #define S_EXT  04
                     30: #define S_LABEL        010
                     31: #define S_CRT  020
                     32: #define S_REG  040
                     33: #define S_LOCAL 0100
                     34: #define S_COMM 0200
                     35: #define S_PERM 0400
                     36: 
                     37: #include "inst.h"
                     38: 
                     39: #include "oper.h"
                     40: 
                     41: /* local names for csects */
                     42: #define C_UNDEF        0
                     43: #define C_TEXT 1
                     44: #define C_DATA 2
                     45: #define C_DATA1        3
                     46: #define C_DATA2        4
                     47: #define C_BSS  5
                     48: 
                     49: /* Symbol bucket definition */
                     50: struct sym_bkt {
                     51:        char   *name_s;         /* symbol identifier            */
                     52:        struct sym_bkt *next_s; /* next bkt on linked list      */
                     53:        long   value_s;         /* it's value                   */
                     54: #if AS
                     55:        short  id_s;            /* id number for .b file        */
                     56:        int    final;
                     57: #endif
                     58: #if C2
                     59:        char  builtin_s[4];     /* read-write attributes for D0,D1,A0,A1 */
                     60: #endif
                     61:        short  attr_s;          /* attributes                   */
                     62:        short  csect_s;         /* name of its csect            */
                     63:        short  nuse_s;          /* number of references         */
                     64:        struct node *where_s;   /* first use, or defining node  */
                     65: };
                     66: 
                     67: extern char *soperand(),*exp();
                     68: extern char iline[],code[];
                     69: extern short cinfo[];
                     70: extern int numops, errors, line_no;
                     71: extern struct oper operands[];
                     72: extern struct ins_ptr *ins_hash_tab[];
                     73: extern struct sym_bkt *lookup();
                     74: extern struct sym_bkt *last_symbol;
                     75: extern struct sym_bkt *dot_bkt;
                     76: extern struct ins_bkt *sopcode();
                     77: extern long dot;
                     78: extern short cur_csect_name;
                     79: extern char rel_name[], *source_name;
                     80: extern int pass, bc;
                     81: 
                     82: #if AS
                     83: extern int d2flag, jsrflag, pcflag, rflag;
                     84: #ifdef EBUG
                     85: extern int debflag;
                     86: #endif
                     87: extern long tsize, dsize, d1size, d2size, bsize;
                     88: extern int code_length;        /* number of bytes in WCode */
                     89: /* complain during second pass only */
                     90: #define PROG_ERROR( n )        {if(pass == 2)prog_error( n );}
                     91: #endif
                     92: #if C2
                     93: #define PROG_ERROR( n )        prog_error( n )
                     94: #endif
                     95: 
                     96: /* skip to next non-spacing character */
                     97: #define skipb(p) while (cinfo[*p] == SPC) p++
                     98: 
                     99: /* skip to end of symbol */
                    100: #define skips(p) while (cinfo[*p] & T) p++
                    101: 
                    102: #if C2
                    103: #   define C2MAGIC "|#"
                    104: #   define C2MAGICSIZE 2
                    105:     extern char * p2pseudocomment();
                    106: #endif
                    107: 
                    108: /* some register names (indexes into the register table) */
                    109: /* also used as bit indexes in register mask structures! */
                    110: # define D0REG 0
                    111: # define D7REG  7
                    112: # define A0REG 8
                    113: # define A6REG 14
                    114: # define A7REG 15
                    115: # define FPREG A6REG
                    116: # define SPREG A7REG
                    117: # define FP0REG        16
                    118: # define FP7REG        23
                    119: # define CCREG 24
                    120: # define FPCCREG       25
                    121: # define PCREG  26
                    122: # define SRREG  27
                    123: # define USPREG 28
                    124: # define FPCREG 36
                    125: # define FPSREG 37
                    126: # define FPIREG 38
                    127: 
                    128: /* what the registers are good for */
                    129: extern /* const */ unsigned reg_access[];
                    130: #define ctrl_reg(reg) (reg_access[(reg)]&AM_CTRLREG)
                    131: #define dreg(reg) (reg_access[(reg)]&AM_DREG)
                    132: #define areg(reg) (reg_access[(reg)]&AM_AREG)
                    133: #define freg(reg) (reg_access[(reg)]&AM_FREG)
                    134: #define dareg(reg) (reg_access[(reg)]&(AM_AREG|AM_DREG))
                    135: #define datareg(reg) (reg_access[(reg)]&(AM_AREG|AM_DREG|AM_FREG))
                    136: #define pcreg(reg) (reg_access[(reg)]&AM_PCREG)
                    137: #define srreg(reg) (reg_access[(reg)]&AM_CCREG)
                    138: #define sr_addr(op) ((op)->type_o==T_REG && srreg((op)->value_o))
                    139: #define usp_addr(op) ((op)->type_o==T_REG && (reg_access[(op)->value_o]&AM_USPREG))
                    140: #define dreg_addr(op) ((op)->type_o==T_REG && dreg((op)->value_o))
                    141: #define areg_addr(op) ((op)->type_o==T_REG && areg((op)->value_o))
                    142: #define freg_addr(op) ((op)->type_o==T_REG && freg((op)->value_o))
                    143: #define dareg_addr(op) ((op)->type_o==T_REG && dareg((op)->value_o))
                    144: #define datareg_addr(op) ((op)->type_o==T_REG && datareg((op)->value_o))
                    145: #define fctrlreg_addr(op) ((op)->type_o==T_REG && (reg_access[(op)->value_o]&AM_FCTRLREG))
                    146: 
                    147: /* bits found in character info array cinfo[] */
                    148: #define D 0x0100       /* digit */
                    149: #define S 0x0200       /* can start symbol */
                    150: #define T 0x0400       /* can be part of symbol */
                    151: 
                    152: #define COL 0x00       /* label definition */
                    153: #define EQL 0x01       /* label assignment */
                    154: #define EOL 0x02       /* end of line -- newline or comment char */
                    155: #define ADD 0x03       /* addition operator */
                    156: #define SUB 0x04       /* subtraction operator */
                    157: #define SPC 0x05       /* spacing character */
                    158: #define ERR 0x06       /* illegal character */
                    159: #define IMM 0x07       /* immediate operand indicator */
                    160: #define LP  0x08       /* left paren */
                    161: #define RP  0x09       /* right paren */
                    162: #define COM 0x0A       /* operand separator */
                    163: #define IND 0x0B       /* indirection operator */
                    164: #define MUL 0x0C       /* multiplication operator */
                    165: #define NOT 0x0D       /* complement operator */
                    166: #define QUO 0x0E       /* beginning/end of string */
                    167: #define DIV 0x0F       /* division operator */
                    168: #define LB  0x10       /* left square bracket */
                    169: #define RB  0x11       /* right square bracket */
                    170: 
                    171: #if AS
                    172: /* flavors of sdi's */
                    173: #define SDI4  0
                    174: #define SDI6  1
                    175: #define SDI8  2
                    176: #define SDIP  3
                    177: #define SDIX  4
                    178: #define SDIL  5
                    179: #endif AS

unix.superglobalmegacorp.com

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