Annotation of researchv9/cmd/sun/c2/as.h, revision 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.