Annotation of GNUtools/debug/gdb/include/opcode/sparc.h, revision 1.1.1.1

1.1       root        1: 
                      2: /* Definitions for opcode table for the sparc.
                      3:        Copyright 1989, 1991, 1992 Free Software Foundation, Inc.
                      4: 
                      5: This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
                      6: the GNU Binutils.
                      7: 
                      8: 
                      9: GAS/GDB is free software; you can redistribute it and/or modify
                     10: it under the terms of the GNU General Public License as published by
                     11: the Free Software Foundation; either version 2, or (at your option)
                     12: any later version.
                     13: 
                     14: GAS/GDB is distributed in the hope that it will be useful,
                     15: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See the
                     17: GNU General Public License for more details.
                     18: 
                     19: You should have received a copy of the GNU General Public License
                     20: along with GAS or GDB; see the file COPYING.   If not, write to
                     21: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
                     22: 
                     23: /* The SPARC opcode table (and other related data) is defined in
                     24:    the opcodes library in sparc-opc.c.  If you change anything here, make
                     25:    sure you fix up that file, and vice versa.  */
                     26: 
                     27:  /* FIXME-someday: perhaps the ,a's and such should be embedded in the
                     28:     instruction's name rather than the args.  This would make gas faster, pinsn
                     29:     slower, but would mess up some macros a bit.  xoxorich. */
                     30: 
                     31: #define sparc_architecture     bfd_sparc_architecture
                     32: #define architecture_pname     bfd_sparc_architecture_pname
                     33: #define sparc_opcode           bfd_sparc_opcode
                     34: #define sparc_opcodes          bfd_sparc_opcodes
                     35: 
                     36: /*
                     37:  * Structure of an opcode table entry.
                     38:  * This enumerator must parallel the architecture_pname array
                     39:  * in bfd/opc-sparc.c.
                     40:  */
                     41: enum sparc_architecture {
                     42:        v6 = 0,
                     43:        v7,
                     44:        v8,
                     45:        sparclite
                     46: };
                     47: 
                     48: extern const char *architecture_pname[];
                     49: 
                     50: 
                     51: 
                     52: struct sparc_opcode {
                     53:        const char *name;
                     54:        unsigned long match;    /* Bits that must be set. */
                     55:        unsigned long lose;     /* Bits that must not be set. */
                     56:        const char *args;
                     57:  /* This was called "delayed" in versions before the flags. */
                     58:        char flags;
                     59:        enum sparc_architecture architecture;
                     60: };
                     61: 
                     62: #define        F_DELAYED       1       /* Delayed branch */
                     63: #define        F_ALIAS         2       /* Alias for a "real" instruction */
                     64: #define        F_UNBR          4       /* Unconditional branch */
                     65: #define        F_CONDBR        8       /* Conditional branch */
                     66: #define        F_JSR           16      /* Subroutine call */
                     67: 
                     68: /*
                     69: 
                     70: All sparc opcodes are 32 bits, except for the `set' instruction (really a
                     71: macro), which is 64 bits. It is handled as a special case.
                     72: 
                     73: The match component is a mask saying which bits must match a particular
                     74: opcode in order for an instruction to be an instance of that opcode.
                     75: 
                     76: The args component is a string containing one character for each operand of the
                     77: instruction.
                     78: 
                     79: Kinds of operands:
                     80:        #       Number used by optimizer.       It is ignored.
                     81:        1       rs1 register.
                     82:        2       rs2 register.
                     83:        d       rd register.
                     84:        e       frs1 floating point register.
                     85:        v       frs1 floating point register (double/even).
                     86:        V       frs1 floating point register (quad/multiple of 4).
                     87:        f       frs2 floating point register.
                     88:        B       frs2 floating point register (double/even).
                     89:        R       frs2 floating point register (quad/multiple of 4).
                     90:        g       frsd floating point register.
                     91:        H       frsd floating point register (double/even).
                     92:        J       frsd floating point register (quad/multiple of 4).
                     93:        b       crs1 coprocessor register
                     94:        c       crs2 coprocessor register
                     95:        D       crsd coprocessor register
                     96:        m       alternate space register (asr) in rd
                     97:        M       alternate space register (asr) in rs1
                     98:        h       22 high bits.
                     99:        i       13 bit Immediate.
                    100:        n       22 bit immediate.
                    101:        l       22 bit PC relative immediate.
                    102:        L       30 bit PC relative immediate.
                    103:        a       Annul.  The annul bit is set.
                    104:        A       Alternate address space. Stored as 8 bits.
                    105:        C       Coprocessor state register.
                    106:        F       floating point state register.
                    107:        p       Processor state register.
                    108:        q       Floating point queue.
                    109:        r       Single register that is both rs1 and rsd.
                    110:        Q       Coprocessor queue.
                    111:        S       Special case.
                    112:        t       Trap base register.
                    113:        w       Window invalid mask register.
                    114:        y       Y register.
                    115: 
                    116: The following chars are unused: (note: ,[] are used as punctuation)
                    117: [uxOUXY3450]
                    118: 
                    119: */
                    120: 
                    121: #define OP2(x)         (((x)&0x7) << 22) /* op2 field of format2 insns */
                    122: #define OP3(x)         (((x)&0x3f) << 19) /* op3 field of format3 insns */
                    123: #define OP(x)          ((unsigned)((x)&0x3) << 30) /* op field of all insns */
                    124: #define OPF(x)         (((x)&0x1ff) << 5) /* opf field of float insns */
                    125: #define F3F(x, y, z)   (OP(x) | OP3(y) | OPF(z)) /* format3 float insns */
                    126: #define F3I(x)         (((x)&0x1) << 13) /* immediate field of format 3 insns */
                    127: #define F2(x, y)       (OP(x) | OP2(y)) /* format 2 insns */
                    128: #define F3(x, y, z)    (OP(x) | OP3(y) | F3I(z)) /* format3 insns */
                    129: #define F1(x)          (OP(x))
                    130: #define DISP30(x)      ((x)&0x3fffffff)
                    131: #define ASI(x)         (((x)&0xff) << 5) /* asi field of format3 insns */
                    132: #define RS2(x)         ((x)&0x1f) /* rs2 field */
                    133: #define SIMM13(x)      ((x)&0x1fff) /* simm13 field */
                    134: #define RD(x)          (((x)&0x1f) << 25) /* destination register field */
                    135: #define RS1(x)         (((x)&0x1f) << 14) /* rs1 field */
                    136: #define ASI_RS2(x)     (SIMM13(x))
                    137: 
                    138: #define ANNUL  (1<<29)
                    139: #define        IMMED   F3I(1)
                    140: #define RD_G0  RD(~0)
                    141: #define        RS1_G0  RS1(~0)
                    142: #define        RS2_G0  RS2(~0)
                    143: 
                    144: extern struct sparc_opcode sparc_opcodes[];
                    145: extern const int bfd_sparc_num_opcodes;
                    146: 
                    147: #define NUMOPCODES bfd_sparc_num_opcodes
                    148: 
                    149: /*
                    150:  * Local Variables:
                    151:  * fill-column: 131
                    152:  * comment-column: 0
                    153:  * End:
                    154:  */
                    155: 
                    156: /* end of sparc.h */

unix.superglobalmegacorp.com

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