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

unix.superglobalmegacorp.com

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