[BACK]Return to ppc.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils.old / dist / include / opcode

Annotation of src/external/gpl3/binutils.old/dist/include/opcode/ppc.h, Revision 1.5.2.1

1.1       christos    1: /* ppc.h -- Header file for PowerPC opcode table
1.5.2.1 ! martin      2:    Copyright (C) 1994-2018 Free Software Foundation, Inc.
1.1       christos    3:    Written by Ian Lance Taylor, Cygnus Support
                      4:
                      5:    This file is part of GDB, GAS, and the GNU binutils.
                      6:
                      7:    GDB, GAS, and the GNU binutils are free software; you can redistribute
                      8:    them and/or modify them under the terms of the GNU General Public
                      9:    License as published by the Free Software Foundation; either version 3,
                     10:    or (at your option) any later version.
                     11:
                     12:    GDB, GAS, and the GNU binutils are distributed in the hope that they
                     13:    will be useful, but WITHOUT ANY WARRANTY; without even the implied
                     14:    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
                     15:    the GNU General Public License for more details.
                     16:
                     17:    You should have received a copy of the GNU General Public License
                     18:    along with this file; see the file COPYING3.  If not, write to the Free
                     19:    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
                     20:    MA 02110-1301, USA.  */
                     21:
                     22: #ifndef PPC_H
                     23: #define PPC_H
                     24:
                     25: #include "bfd_stdint.h"
                     26:
1.5       christos   27: #ifdef __cplusplus
                     28: extern "C" {
                     29: #endif
                     30:
1.1       christos   31: typedef uint64_t ppc_cpu_t;
                     32:
1.5.2.1 ! martin     33: #if BFD_HOST_64BIT_LONG
        !            34: # define PPC_INT_FMT "l"
        !            35: #elif defined (__MSVCRT__)
        !            36: # define PPC_INT_FMT "I64"
        !            37: #else
        !            38: # define PPC_INT_FMT "ll"
        !            39: #endif
        !            40:
1.1       christos   41: /* The opcode table is an array of struct powerpc_opcode.  */
                     42:
                     43: struct powerpc_opcode
                     44: {
                     45:   /* The opcode name.  */
                     46:   const char *name;
                     47:
                     48:   /* The opcode itself.  Those bits which will be filled in with
                     49:      operands are zeroes.  */
1.5.2.1 ! martin     50:   uint64_t opcode;
1.1       christos   51:
                     52:   /* The opcode mask.  This is used by the disassembler.  This is a
                     53:      mask containing ones indicating those bits which must match the
                     54:      opcode field, and zeroes indicating those bits which need not
                     55:      match (and are presumably filled in by operands).  */
1.5.2.1 ! martin     56:   uint64_t mask;
1.1       christos   57:
                     58:   /* One bit flags for the opcode.  These are used to indicate which
                     59:      specific processors support the instructions.  The defined values
                     60:      are listed below.  */
                     61:   ppc_cpu_t flags;
                     62:
                     63:   /* One bit flags for the opcode.  These are used to indicate which
                     64:      specific processors no longer support the instructions.  The defined
                     65:      values are listed below.  */
                     66:   ppc_cpu_t deprecated;
                     67:
                     68:   /* An array of operand codes.  Each code is an index into the
                     69:      operand table.  They appear in the order which the operands must
                     70:      appear in assembly code, and are terminated by a zero.  */
                     71:   unsigned char operands[8];
                     72: };
                     73:
                     74: /* The table itself is sorted by major opcode number, and is otherwise
                     75:    in the order in which the disassembler should consider
                     76:    instructions.  */
                     77: extern const struct powerpc_opcode powerpc_opcodes[];
1.5.2.1 ! martin     78: extern const unsigned int powerpc_num_opcodes;
1.1       christos   79: extern const struct powerpc_opcode vle_opcodes[];
1.5.2.1 ! martin     80: extern const unsigned int vle_num_opcodes;
        !            81: extern const struct powerpc_opcode spe2_opcodes[];
        !            82: extern const unsigned int spe2_num_opcodes;
1.1       christos   83:
                     84: /* Values defined for the flags field of a struct powerpc_opcode.  */
                     85:
                     86: /* Opcode is defined for the PowerPC architecture.  */
1.5.2.1 ! martin     87: #define PPC_OPCODE_PPC                0x1ull
1.1       christos   88:
                     89: /* Opcode is defined for the POWER (RS/6000) architecture.  */
1.5.2.1 ! martin     90: #define PPC_OPCODE_POWER              0x2ull
1.1       christos   91:
                     92: /* Opcode is defined for the POWER2 (Rios 2) architecture.  */
1.5.2.1 ! martin     93: #define PPC_OPCODE_POWER2             0x4ull
        !            94:
        !            95: /* Opcode is only defined on 64 bit architectures.  */
        !            96: #define PPC_OPCODE_64                 0x8ull
1.1       christos   97:
                     98: /* Opcode is supported by the Motorola PowerPC 601 processor.  The 601
                     99:    is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
                    100:    but it also supports many additional POWER instructions.  */
1.5.2.1 ! martin    101: #define PPC_OPCODE_601               0x10ull
1.1       christos  102:
                    103: /* Opcode is supported in both the Power and PowerPC architectures
                    104:    (ie, compiler's -mcpu=common or assembler's -mcom).  More than just
                    105:    the intersection of PPC_OPCODE_PPC with the union of PPC_OPCODE_POWER
                    106:    and PPC_OPCODE_POWER2 because many instructions changed mnemonics
                    107:    between POWER and POWERPC.  */
1.5.2.1 ! martin    108: #define PPC_OPCODE_COMMON            0x20ull
1.1       christos  109:
                    110: /* Opcode is supported for any Power or PowerPC platform (this is
                    111:    for the assembler's -many option, and it eliminates duplicates).  */
1.5.2.1 ! martin    112: #define PPC_OPCODE_ANY               0x40ull
1.1       christos  113:
                    114: /* Opcode is supported as part of the 64-bit bridge.  */
1.5.2.1 ! martin    115: #define PPC_OPCODE_64_BRIDGE         0x80ull
1.1       christos  116:
                    117: /* Opcode is supported by Altivec Vector Unit */
1.5.2.1 ! martin    118: #define PPC_OPCODE_ALTIVEC          0x100ull
1.1       christos  119:
                    120: /* Opcode is supported by PowerPC 403 processor.  */
1.5.2.1 ! martin    121: #define PPC_OPCODE_403              0x200ull
1.1       christos  122:
                    123: /* Opcode is supported by PowerPC BookE processor.  */
1.5.2.1 ! martin    124: #define PPC_OPCODE_BOOKE            0x400ull
1.1       christos  125:
                    126: /* Opcode is only supported by Power4 architecture.  */
1.5.2.1 ! martin    127: #define PPC_OPCODE_POWER4           0x800ull
1.1       christos  128:
1.5.2.1 ! martin    129: /* Opcode is only supported by e500x2 Core.
        !           130:    This bit, PPC_OPCODE_EFS, PPC_OPCODE_VLE, and all those with APU in
        !           131:    their comment mark opcodes so that when those instructions are used
        !           132:    an APUinfo entry can be generated.  */
        !           133: #define PPC_OPCODE_SPE             0x1000ull
1.1       christos  134:
1.5.2.1 ! martin    135: /* Opcode is supported by Integer select APU.  */
        !           136: #define PPC_OPCODE_ISEL                    0x2000ull
1.1       christos  137:
                    138: /* Opcode is an e500 SPE floating point instruction.  */
1.5.2.1 ! martin    139: #define PPC_OPCODE_EFS             0x4000ull
1.1       christos  140:
                    141: /* Opcode is supported by branch locking APU.  */
1.5.2.1 ! martin    142: #define PPC_OPCODE_BRLOCK          0x8000ull
1.1       christos  143:
                    144: /* Opcode is supported by performance monitor APU.  */
1.5.2.1 ! martin    145: #define PPC_OPCODE_PMR            0x10000ull
1.1       christos  146:
                    147: /* Opcode is supported by cache locking APU.  */
1.5.2.1 ! martin    148: #define PPC_OPCODE_CACHELCK       0x20000ull
1.1       christos  149:
                    150: /* Opcode is supported by machine check APU.  */
1.5.2.1 ! martin    151: #define PPC_OPCODE_RFMCI          0x40000ull
        !           152:
        !           153: /* Opcode is supported by PowerPC 440 processor.  */
        !           154: #define PPC_OPCODE_440            0x80000ull
1.1       christos  155:
                    156: /* Opcode is only supported by Power5 architecture.  */
1.5.2.1 ! martin    157: #define PPC_OPCODE_POWER5        0x100000ull
1.1       christos  158:
                    159: /* Opcode is supported by PowerPC e300 family.  */
1.5.2.1 ! martin    160: #define PPC_OPCODE_E300                  0x200000ull
1.1       christos  161:
                    162: /* Opcode is only supported by Power6 architecture.  */
1.5.2.1 ! martin    163: #define PPC_OPCODE_POWER6        0x400000ull
1.1       christos  164:
                    165: /* Opcode is only supported by PowerPC Cell family.  */
1.5.2.1 ! martin    166: #define PPC_OPCODE_CELL                  0x800000ull
1.1       christos  167:
                    168: /* Opcode is supported by CPUs with paired singles support.  */
1.5.2.1 ! martin    169: #define PPC_OPCODE_PPCPS        0x1000000ull
1.1       christos  170:
                    171: /* Opcode is supported by Power E500MC */
1.5.2.1 ! martin    172: #define PPC_OPCODE_E500MC       0x2000000ull
1.1       christos  173:
                    174: /* Opcode is supported by PowerPC 405 processor.  */
1.5.2.1 ! martin    175: #define PPC_OPCODE_405          0x4000000ull
1.1       christos  176:
                    177: /* Opcode is supported by Vector-Scalar (VSX) Unit */
1.5.2.1 ! martin    178: #define PPC_OPCODE_VSX          0x8000000ull
        !           179:
        !           180: /* Opcode is only supported by Power7 architecture.  */
        !           181: #define PPC_OPCODE_POWER7      0x10000000ull
1.1       christos  182:
                    183: /* Opcode is supported by A2.  */
1.5.2.1 ! martin    184: #define PPC_OPCODE_A2          0x20000000ull
1.1       christos  185:
                    186: /* Opcode is supported by PowerPC 476 processor.  */
1.5.2.1 ! martin    187: #define PPC_OPCODE_476         0x40000000ull
1.1       christos  188:
                    189: /* Opcode is supported by AppliedMicro Titan core */
1.5.2.1 ! martin    190: #define PPC_OPCODE_TITAN       0x80000000ull
1.1       christos  191:
                    192: /* Opcode which is supported by the e500 family */
1.5.2.1 ! martin    193: #define PPC_OPCODE_E500        0x100000000ull
1.1       christos  194:
                    195: /* Opcode is supported by Power E6500 */
1.5.2.1 ! martin    196: #define PPC_OPCODE_E6500       0x200000000ull
1.1       christos  197:
                    198: /* Opcode is supported by Thread management APU */
1.5.2.1 ! martin    199: #define PPC_OPCODE_TMR        0x400000000ull
1.1       christos  200:
                    201: /* Opcode which is supported by the VLE extension.  */
1.5.2.1 ! martin    202: #define PPC_OPCODE_VLE        0x800000000ull
1.1       christos  203:
1.3       christos  204: /* Opcode is only supported by Power8 architecture.  */
1.5.2.1 ! martin    205: #define PPC_OPCODE_POWER8     0x1000000000ull
1.3       christos  206:
                    207: /* Opcode is supported by ppc750cl.  */
1.5.2.1 ! martin    208: #define PPC_OPCODE_750       0x2000000000ull
1.3       christos  209:
                    210: /* Opcode is supported by ppc7450.  */
1.5.2.1 ! martin    211: #define PPC_OPCODE_7450       0x4000000000ull
1.3       christos  212:
                    213: /* Opcode is supported by ppc821/850/860.  */
1.5.2.1 ! martin    214: #define PPC_OPCODE_860       0x8000000000ull
1.3       christos  215:
                    216: /* Opcode is only supported by Power9 architecture.  */
1.5.2.1 ! martin    217: #define PPC_OPCODE_POWER9    0x10000000000ull
        !           218:
        !           219: /* Opcode is supported by e200z4.  */
        !           220: #define PPC_OPCODE_E200Z4    0x20000000000ull
        !           221:
        !           222: /* Disassemble to instructions matching later in the opcode table
        !           223:    with fewer "mask" bits set rather than the earlist match.  Fewer
        !           224:    "mask" bits set imply a more general form of the opcode, in fact
        !           225:    the underlying machine instruction.  */
        !           226: #define PPC_OPCODE_RAW      0x40000000000ull
        !           227:
        !           228: /* Opcode is supported by PowerPC LSP */
        !           229: #define PPC_OPCODE_LSP      0x80000000000ull
        !           230:
        !           231: /* Opcode is only supported by Freescale SPE2 APU.  */
        !           232: #define PPC_OPCODE_SPE2            0x100000000000ull
1.3       christos  233:
1.5.2.1 ! martin    234: /* Opcode is supported by EFS2.  */
        !           235: #define PPC_OPCODE_EFS2            0x200000000000ull
1.3       christos  236:
1.1       christos  237: /* A macro to extract the major opcode from an instruction.  */
                    238: #define PPC_OP(i) (((i) >> 26) & 0x3f)
                    239:
                    240: /* A macro to determine if the instruction is a 2-byte VLE insn.  */
                    241: #define PPC_OP_SE_VLE(m) ((m) <= 0xffff)
                    242:
                    243: /* A macro to extract the major opcode from a VLE instruction.  */
                    244: #define VLE_OP(i,m) (((i) >> ((m) <= 0xffff ? 10 : 26)) & 0x3f)
                    245:
                    246: /* A macro to convert a VLE opcode to a VLE opcode segment.  */
                    247: #define VLE_OP_TO_SEG(i) ((i) >> 1)
1.5.2.1 ! martin    248:
        !           249: /* A macro to extract the extended opcode from a SPE2 instruction.  */
        !           250: #define SPE2_XOP(i) ((i) & 0x7ff)
        !           251:
        !           252: /* A macro to convert a SPE2 extended opcode to a SPE2 xopcode segment.  */
        !           253: #define SPE2_XOP_TO_SEG(i) ((i) >> 7)
1.1       christos  254: 
                    255: /* The operands table is an array of struct powerpc_operand.  */
                    256:
                    257: struct powerpc_operand
                    258: {
                    259:   /* A bitmask of bits in the operand.  */
1.5.2.1 ! martin    260:   uint64_t bitm;
1.1       christos  261:
                    262:   /* The shift operation to be applied to the operand.  No shift
                    263:      is made if this is zero.  For positive values, the operand
                    264:      is shifted left by SHIFT.  For negative values, the operand
                    265:      is shifted right by -SHIFT.  Use PPC_OPSHIFT_INV to indicate
                    266:      that BITM and SHIFT cannot be used to determine where the
                    267:      operand goes in the insn.  */
                    268:   int shift;
                    269:
                    270:   /* Insertion function.  This is used by the assembler.  To insert an
                    271:      operand value into an instruction, check this field.
                    272:
                    273:      If it is NULL, execute
                    274:         if (o->shift >= 0)
                    275:           i |= (op & o->bitm) << o->shift;
                    276:         else
                    277:           i |= (op & o->bitm) >> -o->shift;
                    278:      (i is the instruction which we are filling in, o is a pointer to
                    279:      this structure, and op is the operand value).
                    280:
                    281:      If this field is not NULL, then simply call it with the
                    282:      instruction and the operand value.  It will return the new value
                    283:      of the instruction.  If the ERRMSG argument is not NULL, then if
                    284:      the operand value is illegal, *ERRMSG will be set to a warning
                    285:      string (the operand will be inserted in any case).  If the
                    286:      operand value is legal, *ERRMSG will be unchanged (most operands
                    287:      can accept any value).  */
1.5.2.1 ! martin    288:   uint64_t (*insert)
        !           289:     (uint64_t instruction, int64_t op, ppc_cpu_t dialect, const char **errmsg);
1.1       christos  290:
                    291:   /* Extraction function.  This is used by the disassembler.  To
                    292:      extract this operand type from an instruction, check this field.
                    293:
                    294:      If it is NULL, compute
                    295:         if (o->shift >= 0)
                    296:           op = (i >> o->shift) & o->bitm;
                    297:         else
                    298:           op = (i << -o->shift) & o->bitm;
                    299:         if ((o->flags & PPC_OPERAND_SIGNED) != 0)
                    300:           sign_extend (op);
                    301:      (i is the instruction, o is a pointer to this structure, and op
                    302:      is the result).
                    303:
                    304:      If this field is not NULL, then simply call it with the
                    305:      instruction value.  It will return the value of the operand.  If
                    306:      the INVALID argument is not NULL, *INVALID will be set to
                    307:      non-zero if this operand type can not actually be extracted from
                    308:      this operand (i.e., the instruction does not match).  If the
                    309:      operand is valid, *INVALID will not be changed.  */
1.5.2.1 ! martin    310:   int64_t (*extract) (uint64_t instruction, ppc_cpu_t dialect, int *invalid);
1.1       christos  311:
                    312:   /* One bit syntax flags.  */
                    313:   unsigned long flags;
                    314: };
                    315:
                    316: /* Elements in the table are retrieved by indexing with values from
                    317:    the operands field of the powerpc_opcodes table.  */
                    318:
                    319: extern const struct powerpc_operand powerpc_operands[];
                    320: extern const unsigned int num_powerpc_operands;
                    321:
                    322: /* Use with the shift field of a struct powerpc_operand to indicate
                    323:      that BITM and SHIFT cannot be used to determine where the operand
                    324:      goes in the insn.  */
1.3       christos  325: #define PPC_OPSHIFT_INV (-1U << 31)
1.1       christos  326:
1.5.2.1 ! martin    327: /* Values defined for the flags field of a struct powerpc_operand.
        !           328:    Keep the register bits low:  They need to fit in an unsigned short.  */
1.1       christos  329:
1.5.2.1 ! martin    330: /* This operand names a register.  The disassembler uses this to print
        !           331:    register names with a leading 'r'.  */
        !           332: #define PPC_OPERAND_GPR (0x1)
1.1       christos  333:
1.5.2.1 ! martin    334: /* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0.  */
        !           335: #define PPC_OPERAND_GPR_0 (0x2)
1.1       christos  336:
1.5.2.1 ! martin    337: /* This operand names a floating point register.  The disassembler
        !           338:    prints these with a leading 'f'.  */
        !           339: #define PPC_OPERAND_FPR (0x4)
1.1       christos  340:
1.5.2.1 ! martin    341: /* This operand names a vector unit register.  The disassembler
        !           342:    prints these with a leading 'v'.  */
        !           343: #define PPC_OPERAND_VR (0x8)
1.1       christos  344:
1.5.2.1 ! martin    345: /* This operand names a vector-scalar unit register.  The disassembler
        !           346:    prints these with a leading 'vs'.  */
        !           347: #define PPC_OPERAND_VSR (0x10)
        !           348:
        !           349: /* This operand may use the symbolic names for the CR fields (even
        !           350:    without -mregnames), which are
1.1       christos  351:        lt  0   gt  1   eq  2   so  3   un  3
                    352:        cr0 0   cr1 1   cr2 2   cr3 3
                    353:        cr4 4   cr5 5   cr6 6   cr7 7
                    354:    These may be combined arithmetically, as in cr2*4+gt.  These are
                    355:    only supported on the PowerPC, not the POWER.  */
1.5.2.1 ! martin    356: #define PPC_OPERAND_CR_BIT (0x20)
1.1       christos  357:
1.5.2.1 ! martin    358: /* This is a CR FIELD that does not use symbolic names (unless
        !           359:    -mregnames is in effect).  */
        !           360: #define PPC_OPERAND_CR_REG (0x40)
1.1       christos  361:
1.5.2.1 ! martin    362: /* This operand names a special purpose register.  */
        !           363: #define PPC_OPERAND_SPR (0x80)
1.1       christos  364:
1.5.2.1 ! martin    365: /* This operand names a paired-single graphics quantization register.  */
        !           366: #define PPC_OPERAND_GQR (0x100)
1.1       christos  367:
                    368: /* This operand is a relative branch displacement.  The disassembler
                    369:    prints these symbolically if possible.  */
1.5.2.1 ! martin    370: #define PPC_OPERAND_RELATIVE (0x200)
1.1       christos  371:
                    372: /* This operand is an absolute branch address.  The disassembler
                    373:    prints these symbolically if possible.  */
1.5.2.1 ! martin    374: #define PPC_OPERAND_ABSOLUTE (0x400)
        !           375:
        !           376: /* This operand takes signed values.  */
        !           377: #define PPC_OPERAND_SIGNED (0x800)
        !           378:
        !           379: /* This operand takes signed values, but also accepts a full positive
        !           380:    range of values when running in 32 bit mode.  That is, if bits is
        !           381:    16, it takes any value from -0x8000 to 0xffff.  In 64 bit mode,
        !           382:    this flag is ignored.  */
        !           383: #define PPC_OPERAND_SIGNOPT (0x1000)
        !           384:
        !           385: /* The next operand should be wrapped in parentheses rather than
        !           386:    separated from this one by a comma.  This is used for the load and
        !           387:    store instructions which want their operands to look like
        !           388:        reg,displacement(reg)
        !           389:    */
        !           390: #define PPC_OPERAND_PARENS (0x2000)
        !           391:
        !           392: /* This operand is for the DS field in a DS form instruction.  */
        !           393: #define PPC_OPERAND_DS (0x4000)
        !           394:
        !           395: /* This operand is for the DQ field in a DQ form instruction.  */
        !           396: #define PPC_OPERAND_DQ (0x8000)
        !           397:
        !           398: /* This operand should be regarded as a negative number for the
        !           399:    purposes of overflow checking (i.e., the normal most negative
        !           400:    number is disallowed and one more than the normal most positive
        !           401:    number is allowed).  This flag will only be set for a signed
        !           402:    operand.  */
        !           403: #define PPC_OPERAND_NEGATIVE (0x10000)
        !           404:
        !           405: /* Valid range of operand is 0..n rather than 0..n-1.  */
        !           406: #define PPC_OPERAND_PLUS1 (0x20000)
1.1       christos  407:
                    408: /* This operand is optional, and is zero if omitted.  This is used for
                    409:    example, in the optional BF field in the comparison instructions.  The
                    410:    assembler must count the number of operands remaining on the line,
                    411:    and the number of operands remaining for the opcode, and decide
                    412:    whether this operand is present or not.  The disassembler should
                    413:    print this operand out only if it is not zero.  */
1.5.2.1 ! martin    414: #define PPC_OPERAND_OPTIONAL (0x80000)
1.1       christos  415:
                    416: /* This flag is only used with PPC_OPERAND_OPTIONAL.  If this operand
                    417:    is omitted, then for the next operand use this operand value plus
                    418:    1, ignoring the next operand field for the opcode.  This wretched
                    419:    hack is needed because the Power rotate instructions can take
                    420:    either 4 or 5 operands.  The disassembler should print this operand
                    421:    out regardless of the PPC_OPERAND_OPTIONAL field.  */
1.5.2.1 ! martin    422: #define PPC_OPERAND_NEXT (0x100000)
1.3       christos  423:
                    424: /* This flag is only used with PPC_OPERAND_OPTIONAL.  If this operand
                    425:    is omitted, then the value it should use for the operand is stored
                    426:    in the SHIFT field of the immediatly following operand field.  */
1.5.2.1 ! martin    427: #define PPC_OPERAND_OPTIONAL_VALUE (0x200000)
        !           428:
        !           429: /* This flag is only used with PPC_OPERAND_OPTIONAL.  The operand is
        !           430:    only optional when generating 32-bit code.  */
        !           431: #define PPC_OPERAND_OPTIONAL32 (0x400000)
        !           432:
        !           433: /* Xilinx APU and FSL related operands */
        !           434: #define PPC_OPERAND_FSL (0x800000)
        !           435: #define PPC_OPERAND_FCR (0x1000000)
        !           436: #define PPC_OPERAND_UDI (0x2000000)
1.1       christos  437: 
                    438: /* The POWER and PowerPC assemblers use a few macros.  We keep them
                    439:    with the operands table for simplicity.  The macro table is an
                    440:    array of struct powerpc_macro.  */
                    441:
                    442: struct powerpc_macro
                    443: {
                    444:   /* The macro name.  */
                    445:   const char *name;
                    446:
                    447:   /* The number of operands the macro takes.  */
                    448:   unsigned int operands;
                    449:
                    450:   /* One bit flags for the opcode.  These are used to indicate which
                    451:      specific processors support the instructions.  The values are the
                    452:      same as those for the struct powerpc_opcode flags field.  */
                    453:   ppc_cpu_t flags;
                    454:
                    455:   /* A format string to turn the macro into a normal instruction.
                    456:      Each %N in the string is replaced with operand number N (zero
                    457:      based).  */
                    458:   const char *format;
                    459: };
                    460:
                    461: extern const struct powerpc_macro powerpc_macros[];
                    462: extern const int powerpc_num_macros;
                    463:
                    464: extern ppc_cpu_t ppc_parse_cpu (ppc_cpu_t, ppc_cpu_t *, const char *);
                    465:
1.5.2.1 ! martin    466: static inline int64_t
1.3       christos  467: ppc_optional_operand_value (const struct powerpc_operand *operand)
                    468: {
                    469:   if ((operand->flags & PPC_OPERAND_OPTIONAL_VALUE) != 0)
                    470:     return (operand+1)->shift;
                    471:   return 0;
                    472: }
                    473:
1.5.2.1 ! martin    474: /* PowerPC VLE insns.  */
        !           475: /* Form I16L, uses 16A relocs.  */
        !           476: #define E_OR2I_INSN            0x7000C000
        !           477: #define E_AND2I_DOT_INSN       0x7000C800
        !           478: #define E_OR2IS_INSN           0x7000D000
        !           479: #define E_LIS_INSN             0x7000E000
        !           480: #define        E_AND2IS_DOT_INSN       0x7000E800
        !           481:
        !           482: /* Form I16A, uses 16D relocs.  */
        !           483: #define E_ADD2I_DOT_INSN       0x70008800
        !           484: #define E_ADD2IS_INSN          0x70009000
        !           485: #define E_CMP16I_INSN          0x70009800
        !           486: #define E_MULL2I_INSN          0x7000A000
        !           487: #define E_CMPL16I_INSN         0x7000A800
        !           488: #define E_CMPH16I_INSN         0x7000B000
        !           489: #define E_CMPHL16I_INSN                0x7000B800
        !           490:
1.5       christos  491: #ifdef __cplusplus
                    492: }
                    493: #endif
                    494:
1.1       christos  495: #endif /* PPC_H */

CVSweb <webmaster@jp.NetBSD.org>