|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.