(linenum→info "unix/slp.c:2238")

qemu/0.9.1/mips-dis.c

    1: /* Print mips instructions for GDB, the GNU debugger, or for objdump.
    2:    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
    3:    2000, 2001, 2002, 2003
    4:    Free Software Foundation, Inc.
    5:    Contributed by Nobuyuki Hikichi(hikichi@sra.co.jp).
    6: 
    7: This file is part of GDB, GAS, and the GNU binutils.
    8: 
    9: This program 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 of the License, or
   12: (at your option) any later version.
   13: 
   14: This program 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 this program; if not, write to the Free Software
   21: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
   22: 
   23: #include "dis-asm.h"
   24: 
   25: /* mips.h.  Mips opcode list for GDB, the GNU debugger.
   26:    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   27:    Free Software Foundation, Inc.
   28:    Contributed by Ralph Campbell and OSF
   29:    Commented and modified by Ian Lance Taylor, Cygnus Support
   30: 
   31: This file is part of GDB, GAS, and the GNU binutils.
   32: 
   33: GDB, GAS, and the GNU binutils are free software; you can redistribute
   34: them and/or modify them under the terms of the GNU General Public
   35: License as published by the Free Software Foundation; either version
   36: 1, or (at your option) any later version.
   37: 
   38: GDB, GAS, and the GNU binutils are distributed in the hope that they
   39: will be useful, but WITHOUT ANY WARRANTY; without even the implied
   40: warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
   41: the GNU General Public License for more details.
   42: 
   43: You should have received a copy of the GNU General Public License
   44: along with this file; see the file COPYING.  If not, write to the Free
   45: Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
   46: 
   47: /* mips.h.  Mips opcode list for GDB, the GNU debugger.
   48:    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   49:    Free Software Foundation, Inc.
   50:    Contributed by Ralph Campbell and OSF
   51:    Commented and modified by Ian Lance Taylor, Cygnus Support
   52: 
   53: This file is part of GDB, GAS, and the GNU binutils.
   54: 
   55: GDB, GAS, and the GNU binutils are free software; you can redistribute
   56: them and/or modify them under the terms of the GNU General Public
   57: License as published by the Free Software Foundation; either version
   58: 1, or (at your option) any later version.
   59: 
   60: GDB, GAS, and the GNU binutils are distributed in the hope that they
   61: will be useful, but WITHOUT ANY WARRANTY; without even the implied
   62: warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
   63: the GNU General Public License for more details.
   64: 
   65: You should have received a copy of the GNU General Public License
   66: along with this file; see the file COPYING.  If not, write to the Free
   67: Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
   68: 
   69: /* These are bit masks and shift counts to use to access the various
   70:    fields of an instruction.  To retrieve the X field of an
   71:    instruction, use the expression
   72:         (i >> OP_SH_X) & OP_MASK_X
   73:    To set the same field (to j), use
   74:         i = (i &~ (OP_MASK_X << OP_SH_X)) | (j << OP_SH_X)
   75: 
   76:    Make sure you use fields that are appropriate for the instruction,
   77:    of course.
   78: 
   79:    The 'i' format uses OP, RS, RT and IMMEDIATE.
   80: 
   81:    The 'j' format uses OP and TARGET.
   82: 
   83:    The 'r' format uses OP, RS, RT, RD, SHAMT and FUNCT.
   84: 
   85:    The 'b' format uses OP, RS, RT and DELTA.
   86: 
   87:    The floating point 'i' format uses OP, RS, RT and IMMEDIATE.
   88: 
   89:    The floating point 'r' format uses OP, FMT, FT, FS, FD and FUNCT.
   90: 
   91:    A breakpoint instruction uses OP, CODE and SPEC (10 bits of the
   92:    breakpoint instruction are not defined; Kane says the breakpoint
   93:    code field in BREAK is 20 bits; yet MIPS assemblers and debuggers
   94:    only use ten bits).  An optional two-operand form of break/sdbbp
   95:    allows the lower ten bits to be set too, and MIPS32 and later
   96:    architectures allow 20 bits to be set with a signal operand
   97:    (using CODE20).
   98: 
   99:    The syscall instruction uses CODE20.
  100: 
  101:    The general coprocessor instructions use COPZ.  */
  102: 
  103: #define OP_MASK_OP              0x3f
  104: #define OP_SH_OP                26
  105: #define OP_MASK_RS              0x1f
  106: #define OP_SH_RS                21
  107: #define OP_MASK_FR              0x1f
  108: #define OP_SH_FR                21
  109: #define OP_MASK_FMT             0x1f
  110: #define OP_SH_FMT               21
  111: #define OP_MASK_BCC             0x7
  112: #define OP_SH_BCC               18
  113: #define OP_MASK_CODE            0x3ff
  114: #define OP_SH_CODE              16
  115: #define OP_MASK_CODE2           0x3ff
  116: #define OP_SH_CODE2             6
  117: #define OP_MASK_RT              0x1f
  118: #define OP_SH_RT                16
  119: #define OP_MASK_FT              0x1f
  120: #define OP_SH_FT                16
  121: #define OP_MASK_CACHE           0x1f
  122: #define OP_SH_CACHE             16
  123: #define OP_MASK_RD              0x1f
  124: #define OP_SH_RD                11
  125: #define OP_MASK_FS              0x1f
  126: #define OP_SH_FS                11
  127: #define OP_MASK_PREFX           0x1f
  128: #define OP_SH_PREFX             11
  129: #define OP_MASK_CCC             0x7
  130: #define OP_SH_CCC               8
  131: #define OP_MASK_CODE20          0xfffff /* 20 bit syscall/breakpoint code.  */
  132: #define OP_SH_CODE20            6
  133: #define OP_MASK_SHAMT           0x1f
  134: #define OP_SH_SHAMT             6
  135: #define OP_MASK_FD              0x1f
  136: #define OP_SH_FD                6
  137: #define OP_MASK_TARGET          0x3ffffff
  138: #define OP_SH_TARGET            0
  139: #define OP_MASK_COPZ            0x1ffffff
  140: #define OP_SH_COPZ              0
  141: #define OP_MASK_IMMEDIATE       0xffff
  142: #define OP_SH_IMMEDIATE         0
  143: #define OP_MASK_DELTA           0xffff
  144: #define OP_SH_DELTA             0
  145: #define OP_MASK_FUNCT           0x3f
  146: #define OP_SH_FUNCT             0
  147: #define OP_MASK_SPEC            0x3f
  148: #define OP_SH_SPEC              0
  149: #define OP_SH_LOCC              8       /* FP condition code.  */
  150: #define OP_SH_HICC              18      /* FP condition code.  */
  151: #define OP_MASK_CC              0x7
  152: #define OP_SH_COP1NORM          25      /* Normal COP1 encoding.  */
  153: #define OP_MASK_COP1NORM        0x1     /* a single bit.  */
  154: #define OP_SH_COP1SPEC          21      /* COP1 encodings.  */
  155: #define OP_MASK_COP1SPEC        0xf
  156: #define OP_MASK_COP1SCLR        0x4
  157: #define OP_MASK_COP1CMP         0x3
  158: #define OP_SH_COP1CMP           4
  159: #define OP_SH_FORMAT            21      /* FP short format field.  */
  160: #define OP_MASK_FORMAT          0x7
  161: #define OP_SH_TRUE              16
  162: #define OP_MASK_TRUE            0x1
  163: #define OP_SH_GE                17
  164: #define OP_MASK_GE              0x01
  165: #define OP_SH_UNSIGNED          16
  166: #define OP_MASK_UNSIGNED        0x1
  167: #define OP_SH_HINT              16
  168: #define OP_MASK_HINT            0x1f
  169: #define OP_SH_MMI               0       /* Multimedia (parallel) op.  */
  170: #define OP_MASK_MMI             0x3f
  171: #define OP_SH_MMISUB            6
  172: #define OP_MASK_MMISUB          0x1f
  173: #define OP_MASK_PERFREG         0x1f   /* Performance monitoring.  */
  174: #define OP_SH_PERFREG           1
  175: #define OP_SH_SEL               0    /* Coprocessor select field.  */
  176: #define OP_MASK_SEL             0x7        /* The sel field of mfcZ and mtcZ.  */
  177: #define OP_SH_CODE19            6       /* 19 bit wait code.  */
  178: #define OP_MASK_CODE19          0x7ffff
  179: #define OP_SH_ALN               21
  180: #define OP_MASK_ALN             0x7
  181: #define OP_SH_VSEL              21
  182: #define OP_MASK_VSEL            0x1f
  183: #define OP_MASK_VECBYTE         0x7    /* Selector field is really 4 bits,
  184:                                            but 0x8-0xf don't select bytes.  */
  185: #define OP_SH_VECBYTE           22
  186: #define OP_MASK_VECALIGN        0x7    /* Vector byte-align (alni.ob) op.  */
  187: #define OP_SH_VECALIGN          21
  188: #define OP_MASK_INSMSB          0x1f    /* "ins" MSB.  */
  189: #define OP_SH_INSMSB            11
  190: #define OP_MASK_EXTMSBD         0x1f   /* "ext" MSBD.  */
  191: #define OP_SH_EXTMSBD           11
  192: 
  193: #define OP_OP_COP0              0x10
  194: #define OP_OP_COP1              0x11
  195: #define OP_OP_COP2              0x12
  196: #define OP_OP_COP3              0x13
  197: #define OP_OP_LWC1              0x31
  198: #define OP_OP_LWC2              0x32
  199: #define OP_OP_LWC3              0x33        /* a.k.a. pref */
  200: #define OP_OP_LDC1              0x35
  201: #define OP_OP_LDC2              0x36
  202: #define OP_OP_LDC3              0x37        /* a.k.a. ld */
  203: #define OP_OP_SWC1              0x39
  204: #define OP_OP_SWC2              0x3a
  205: #define OP_OP_SWC3              0x3b
  206: #define OP_OP_SDC1              0x3d
  207: #define OP_OP_SDC2              0x3e
  208: #define OP_OP_SDC3              0x3f        /* a.k.a. sd */
  209: 
  210: /* MIPS DSP ASE */
  211: #define OP_SH_DSPACC            11
  212: #define OP_MASK_DSPACC          0x3
  213: #define OP_SH_DSPACC_S          21
  214: #define OP_MASK_DSPACC_S        0x3
  215: #define OP_SH_DSPSFT            20
  216: #define OP_MASK_DSPSFT          0x3f
  217: #define OP_SH_DSPSFT_7          19
  218: #define OP_MASK_DSPSFT_7        0x7f
  219: #define OP_SH_SA3               21
  220: #define OP_MASK_SA3             0x7
  221: #define OP_SH_SA4               21
  222: #define OP_MASK_SA4             0xf
  223: #define OP_SH_IMM8              16
  224: #define OP_MASK_IMM8            0xff
  225: #define OP_SH_IMM10             16
  226: #define OP_MASK_IMM10           0x3ff
  227: #define OP_SH_WRDSP             11
  228: #define OP_MASK_WRDSP           0x3f
  229: #define OP_SH_RDDSP             16
  230: #define OP_MASK_RDDSP           0x3f
  231: #define OP_SH_BP                11
  232: #define OP_MASK_BP              0x3
  233: 
  234: /* MIPS MT ASE */
  235: #define OP_SH_MT_U              5
  236: #define OP_MASK_MT_U            0x1
  237: #define OP_SH_MT_H              4
  238: #define OP_MASK_MT_H            0x1
  239: #define OP_SH_MTACC_T           18
  240: #define OP_MASK_MTACC_T         0x3
  241: #define OP_SH_MTACC_D           13
  242: #define OP_MASK_MTACC_D         0x3
  243: 
  244: #define OP_OP_COP0              0x10
  245: #define OP_OP_COP1              0x11
  246: #define OP_OP_COP2              0x12
  247: #define OP_OP_COP3              0x13
  248: #define OP_OP_LWC1              0x31
  249: #define OP_OP_LWC2              0x32
  250: #define OP_OP_LWC3              0x33        /* a.k.a. pref */
  251: #define OP_OP_LDC1              0x35
  252: #define OP_OP_LDC2              0x36
  253: #define OP_OP_LDC3              0x37        /* a.k.a. ld */
  254: #define OP_OP_SWC1              0x39
  255: #define OP_OP_SWC2              0x3a
  256: #define OP_OP_SWC3              0x3b
  257: #define OP_OP_SDC1              0x3d
  258: #define OP_OP_SDC2              0x3e
  259: #define OP_OP_SDC3              0x3f        /* a.k.a. sd */
  260: 
  261: /* Values in the 'VSEL' field.  */
  262: #define MDMX_FMTSEL_IMM_QH      0x1d
  263: #define MDMX_FMTSEL_IMM_OB      0x1e
  264: #define MDMX_FMTSEL_VEC_QH      0x15
  265: #define MDMX_FMTSEL_VEC_OB      0x16
  266: 
  267: /* UDI */
  268: #define OP_SH_UDI1              6
  269: #define OP_MASK_UDI1            0x1f
  270: #define OP_SH_UDI2              6
  271: #define OP_MASK_UDI2            0x3ff
  272: #define OP_SH_UDI3              6
  273: #define OP_MASK_UDI3            0x7fff
  274: #define OP_SH_UDI4              6
  275: #define OP_MASK_UDI4            0xfffff
  276: /* This structure holds information for a particular instruction.  */
  277: 
  278: struct mips_opcode
  279: {
  280:   /* The name of the instruction.  */
  281:   const char *name;
  282:   /* A string describing the arguments for this instruction.  */
  283:   const char *args;
  284:   /* The basic opcode for the instruction.  When assembling, this
  285:      opcode is modified by the arguments to produce the actual opcode
  286:      that is used.  If pinfo is INSN_MACRO, then this is 0.  */
  287:   unsigned long match;
  288:   /* If pinfo is not INSN_MACRO, then this is a bit mask for the
  289:      relevant portions of the opcode when disassembling.  If the
  290:      actual opcode anded with the match field equals the opcode field,
  291:      then we have found the correct instruction.  If pinfo is
  292:      INSN_MACRO, then this field is the macro identifier.  */
  293:   unsigned long mask;
  294:   /* For a macro, this is INSN_MACRO.  Otherwise, it is a collection
  295:      of bits describing the instruction, notably any relevant hazard
  296:      information.  */
  297:   unsigned long pinfo;
  298:   /* A collection of additional bits describing the instruction. */
  299:   unsigned long pinfo2;
  300:   /* A collection of bits describing the instruction sets of which this
  301:      instruction or macro is a member. */
  302:   unsigned long membership;
  303: };
  304: 
  305: /* These are the characters which may appear in the args field of an
  306:    instruction.  They appear in the order in which the fields appear
  307:    when the instruction is used.  Commas and parentheses in the args
  308:    string are ignored when assembling, and written into the output
  309:    when disassembling.
  310: 
  311:    Each of these characters corresponds to a mask field defined above.
  312: 
  313:    "<" 5 bit shift amount (OP_*_SHAMT)
  314:    ">" shift amount between 32 and 63, stored after subtracting 32 (OP_*_SHAMT)
  315:    "a" 26 bit target address (OP_*_TARGET)
  316:    "b" 5 bit base register (OP_*_RS)
  317:    "c" 10 bit breakpoint code (OP_*_CODE)
  318:    "d" 5 bit destination register specifier (OP_*_RD)
  319:    "h" 5 bit prefx hint (OP_*_PREFX)
  320:    "i" 16 bit unsigned immediate (OP_*_IMMEDIATE)
  321:    "j" 16 bit signed immediate (OP_*_DELTA)
  322:    "k" 5 bit cache opcode in target register position (OP_*_CACHE)
  323:        Also used for immediate operands in vr5400 vector insns.
  324:    "o" 16 bit signed offset (OP_*_DELTA)
  325:    "p" 16 bit PC relative branch target address (OP_*_DELTA)
  326:    "q" 10 bit extra breakpoint code (OP_*_CODE2)
  327:    "r" 5 bit same register used as both source and target (OP_*_RS)
  328:    "s" 5 bit source register specifier (OP_*_RS)
  329:    "t" 5 bit target register (OP_*_RT)
  330:    "u" 16 bit upper 16 bits of address (OP_*_IMMEDIATE)
  331:    "v" 5 bit same register used as both source and destination (OP_*_RS)
  332:    "w" 5 bit same register used as both target and destination (OP_*_RT)
  333:    "U" 5 bit same destination register in both OP_*_RD and OP_*_RT
  334:        (used by clo and clz)
  335:    "C" 25 bit coprocessor function code (OP_*_COPZ)
  336:    "B" 20 bit syscall/breakpoint function code (OP_*_CODE20)
  337:    "J" 19 bit wait function code (OP_*_CODE19)
  338:    "x" accept and ignore register name
  339:    "z" must be zero register
  340:    "K" 5 bit Hardware Register (rdhwr instruction) (OP_*_RD)
  341:    "+A" 5 bit ins/ext/dins/dext/dinsm/dextm position, which becomes
  342:         LSB (OP_*_SHAMT).
  343:         Enforces: 0 <= pos < 32.
  344:    "+B" 5 bit ins/dins size, which becomes MSB (OP_*_INSMSB).
  345:         Requires that "+A" or "+E" occur first to set position.
  346:         Enforces: 0 < (pos+size) <= 32.
  347:    "+C" 5 bit ext/dext size, which becomes MSBD (OP_*_EXTMSBD).
  348:         Requires that "+A" or "+E" occur first to set position.
  349:         Enforces: 0 < (pos+size) <= 32.
  350:         (Also used by "dext" w/ different limits, but limits for
  351:         that are checked by the M_DEXT macro.)
  352:    "+E" 5 bit dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT).
  353:         Enforces: 32 <= pos < 64.
  354:    "+F" 5 bit "dinsm/dinsu" size, which becomes MSB-32 (OP_*_INSMSB).
  355:         Requires that "+A" or "+E" occur first to set position.
  356:         Enforces: 32 < (pos+size) <= 64.
  357:    "+G" 5 bit "dextm" size, which becomes MSBD-32 (OP_*_EXTMSBD).
  358:         Requires that "+A" or "+E" occur first to set position.
  359:         Enforces: 32 < (pos+size) <= 64.
  360:    "+H" 5 bit "dextu" size, which becomes MSBD (OP_*_EXTMSBD).
  361:         Requires that "+A" or "+E" occur first to set position.
  362:         Enforces: 32 < (pos+size) <= 64.
  363: 
  364:    Floating point instructions:
  365:    "D" 5 bit destination register (OP_*_FD)
  366:    "M" 3 bit compare condition code (OP_*_CCC) (only used for mips4 and up)
  367:    "N" 3 bit branch condition code (OP_*_BCC) (only used for mips4 and up)
  368:    "S" 5 bit fs source 1 register (OP_*_FS)
  369:    "T" 5 bit ft source 2 register (OP_*_FT)
  370:    "R" 5 bit fr source 3 register (OP_*_FR)
  371:    "V" 5 bit same register used as floating source and destination (OP_*_FS)
  372:    "W" 5 bit same register used as floating target and destination (OP_*_FT)
  373: 
  374:    Coprocessor instructions:
  375:    "E" 5 bit target register (OP_*_RT)
  376:    "G" 5 bit destination register (OP_*_RD)
  377:    "H" 3 bit sel field for (d)mtc* and (d)mfc* (OP_*_SEL)
  378:    "P" 5 bit performance-monitor register (OP_*_PERFREG)
  379:    "e" 5 bit vector register byte specifier (OP_*_VECBYTE)
  380:    "%" 3 bit immediate vr5400 vector alignment operand (OP_*_VECALIGN)
  381:    see also "k" above
  382:    "+D" Combined destination register ("G") and sel ("H") for CP0 ops,
  383:         for pretty-printing in disassembly only.
  384: 
  385:    Macro instructions:
  386:    "A" General 32 bit expression
  387:    "I" 32 bit immediate (value placed in imm_expr).
  388:    "+I" 32 bit immediate (value placed in imm2_expr).
  389:    "F" 64 bit floating point constant in .rdata
  390:    "L" 64 bit floating point constant in .lit8
  391:    "f" 32 bit floating point constant
  392:    "l" 32 bit floating point constant in .lit4
  393: 
  394:    MDMX instruction operands (note that while these use the FP register
  395:    fields, they accept both $fN and $vN names for the registers):
  396:    "O"  MDMX alignment offset (OP_*_ALN)
  397:    "Q"  MDMX vector/scalar/immediate source (OP_*_VSEL and OP_*_FT)
  398:    "X"  MDMX destination register (OP_*_FD)
  399:    "Y"  MDMX source register (OP_*_FS)
  400:    "Z"  MDMX source register (OP_*_FT)
  401: 
  402:    DSP ASE usage:
  403:    "2" 2 bit unsigned immediate for byte align (OP_*_BP)
  404:    "3" 3 bit unsigned immediate (OP_*_SA3)
  405:    "4" 4 bit unsigned immediate (OP_*_SA4)
  406:    "5" 8 bit unsigned immediate (OP_*_IMM8)
  407:    "6" 5 bit unsigned immediate (OP_*_RS)
  408:    "7" 2 bit dsp accumulator register (OP_*_DSPACC)
  409:    "8" 6 bit unsigned immediate (OP_*_WRDSP)
  410:    "9" 2 bit dsp accumulator register (OP_*_DSPACC_S)
  411:    "0" 6 bit signed immediate (OP_*_DSPSFT)
  412:    ":" 7 bit signed immediate (OP_*_DSPSFT_7)
  413:    "'" 6 bit unsigned immediate (OP_*_RDDSP)
  414:    "@" 10 bit signed immediate (OP_*_IMM10)
  415: 
  416:    MT ASE usage:
  417:    "!" 1 bit usermode flag (OP_*_MT_U)
  418:    "$" 1 bit load high flag (OP_*_MT_H)
  419:    "*" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_T)
  420:    "&" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_D)
  421:    "g" 5 bit coprocessor 1 and 2 destination register (OP_*_RD)
  422:    "+t" 5 bit coprocessor 0 destination register (OP_*_RT)
  423:    "+T" 5 bit coprocessor 0 destination register (OP_*_RT) - disassembly only
  424: 
  425:    UDI immediates:
  426:    "+1" UDI immediate bits 6-10
  427:    "+2" UDI immediate bits 6-15
  428:    "+3" UDI immediate bits 6-20
  429:    "+4" UDI immediate bits 6-25
  430: 
  431:    Other:
  432:    "()" parens surrounding optional value
  433:    ","  separates operands
  434:    "[]" brackets around index for vector-op scalar operand specifier (vr5400)
  435:    "+"  Start of extension sequence.
  436: 
  437:    Characters used so far, for quick reference when adding more:
  438:    "234567890"
  439:    "%[]<>(),+:'@!$*&"
  440:    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  441:    "abcdefghijklopqrstuvwxz"
  442: 
  443:    Extension character sequences used so far ("+" followed by the
  444:    following), for quick reference when adding more:
  445:    "1234"
  446:    "ABCDEFGHIT"
  447:    "t"
  448: */
  449: 
  450: /* These are the bits which may be set in the pinfo field of an
  451:    instructions, if it is not equal to INSN_MACRO.  */
  452: 
  453: /* Modifies the general purpose register in OP_*_RD.  */
  454: #define INSN_WRITE_GPR_D            0x00000001
  455: /* Modifies the general purpose register in OP_*_RT.  */
  456: #define INSN_WRITE_GPR_T            0x00000002
  457: /* Modifies general purpose register 31.  */
  458: #define INSN_WRITE_GPR_31           0x00000004
  459: /* Modifies the floating point register in OP_*_FD.  */
  460: #define INSN_WRITE_FPR_D            0x00000008
  461: /* Modifies the floating point register in OP_*_FS.  */
  462: #define INSN_WRITE_FPR_S            0x00000010
  463: /* Modifies the floating point register in OP_*_FT.  */
  464: #define INSN_WRITE_FPR_T            0x00000020
  465: /* Reads the general purpose register in OP_*_RS.  */
  466: #define INSN_READ_GPR_S             0x00000040
  467: /* Reads the general purpose register in OP_*_RT.  */
  468: #define INSN_READ_GPR_T             0x00000080
  469: /* Reads the floating point register in OP_*_FS.  */
  470: #define INSN_READ_FPR_S             0x00000100
  471: /* Reads the floating point register in OP_*_FT.  */
  472: #define INSN_READ_FPR_T             0x00000200
  473: /* Reads the floating point register in OP_*_FR.  */
  474: #define INSN_READ_FPR_R             0x00000400
  475: /* Modifies coprocessor condition code.  */
  476: #define INSN_WRITE_COND_CODE        0x00000800
  477: /* Reads coprocessor condition code.  */
  478: #define INSN_READ_COND_CODE         0x00001000
  479: /* TLB operation.  */
  480: #define INSN_TLB                    0x00002000
  481: /* Reads coprocessor register other than floating point register.  */
  482: #define INSN_COP                    0x00004000
  483: /* Instruction loads value from memory, requiring delay.  */
  484: #define INSN_LOAD_MEMORY_DELAY      0x00008000
  485: /* Instruction loads value from coprocessor, requiring delay.  */
  486: #define INSN_LOAD_COPROC_DELAY      0x00010000
  487: /* Instruction has unconditional branch delay slot.  */
  488: #define INSN_UNCOND_BRANCH_DELAY    0x00020000
  489: /* Instruction has conditional branch delay slot.  */
  490: #define INSN_COND_BRANCH_DELAY      0x00040000
  491: /* Conditional branch likely: if branch not taken, insn nullified.  */
  492: #define INSN_COND_BRANCH_LIKELY     0x00080000
  493: /* Moves to coprocessor register, requiring delay.  */
  494: #define INSN_COPROC_MOVE_DELAY      0x00100000
  495: /* Loads coprocessor register from memory, requiring delay.  */
  496: #define INSN_COPROC_MEMORY_DELAY    0x00200000
  497: /* Reads the HI register.  */
  498: #define INSN_READ_HI                0x00400000
  499: /* Reads the LO register.  */
  500: #define INSN_READ_LO                0x00800000
  501: /* Modifies the HI register.  */
  502: #define INSN_WRITE_HI               0x01000000
  503: /* Modifies the LO register.  */
  504: #define INSN_WRITE_LO               0x02000000
  505: /* Takes a trap (easier to keep out of delay slot).  */
  506: #define INSN_TRAP                   0x04000000
  507: /* Instruction stores value into memory.  */
  508: #define INSN_STORE_MEMORY           0x08000000
  509: /* Instruction uses single precision floating point.  */
  510: #define FP_S                        0x10000000
  511: /* Instruction uses double precision floating point.  */
  512: #define FP_D                        0x20000000
  513: /* Instruction is part of the tx39's integer multiply family.    */
  514: #define INSN_MULT                   0x40000000
  515: /* Instruction synchronize shared memory.  */
  516: #define INSN_SYNC                   0x80000000
  517: 
  518: /* These are the bits which may be set in the pinfo2 field of an
  519:    instruction. */
  520: 
  521: /* Instruction is a simple alias (I.E. "move" for daddu/addu/or) */
  522: #define INSN2_ALIAS                 0x00000001
  523: /* Instruction reads MDMX accumulator. */
  524: #define INSN2_READ_MDMX_ACC         0x00000002
  525: /* Instruction writes MDMX accumulator. */
  526: #define INSN2_WRITE_MDMX_ACC        0x00000004
  527: 
  528: /* Instruction is actually a macro.  It should be ignored by the
  529:    disassembler, and requires special treatment by the assembler.  */
  530: #define INSN_MACRO                  0xffffffff
  531: 
  532: