ppcins.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 663 行 · 第 1/3 页

C
663
字号
    INS( "rlmi",        22, 0,          IT_SHIFT_INDEX, RC,             0 ),
    INS( "rlwimi",      20, 0,          IT_SHIFT_IMM,   RC,             0 ),
    INS( "rlwinm",      21, 0,          IT_SHIFT_IMM,   RC,             0 ),
    INS( "rlwnm",       23, 0,          IT_SHIFT_INDEX, RC,             0 ),
    INS( "rrib",        31, 537,        IT_BIN2,        RC,             OE ),
    INS( "sc",          17, 1,          IT_EIEIO,       0,              0 ),
    // INS( "sld",              31, 27,         IT_BIN,         RC,             0 ),
    INS( "sle",         31, 153,        IT_BIN2,        RC,             0 ),
    INS( "sleq",        31, 217,        IT_BIN2,        RC,             0 ),
    INS( "sliq",        31, 184,        IT_SHIFT,       RC,             0 ),
    INS( "slliq",       31, 248,        IT_SHIFT,       RC,             0 ),
    INS( "sllq",        31, 216,        IT_BIN2,        RC,             0 ),
    INS( "slq",         31, 152,        IT_BIN2,        RC,             0 ),
    INS( "slw",         31, 24,         IT_BIN2,        RC,             0 ),
    INS( "srad",        31, 794,        IT_BIN,         RC,             OE ),
    // INS( "sradi",    31, 413,        IT_NYI,         RC,             0 ),
    INS( "sraq",        31, 920,        IT_BIN2,        RC,             OE ),
    INS( "sraiq",       31, 952,        IT_SHIFT,       RC,             OE ),
    INS( "sraw",        31, 792,        IT_BIN2,        RC,             OE ),
    INS( "srawi",       31, 824,        IT_SHIFT,       RC,             OE ),
    INS( "srd",         31, 539,        IT_BIN,         RC,             OE ),
    INS( "sre",         31, 665,        IT_BIN2,        RC,             OE ),
    INS( "srea",        31, 921,        IT_BIN2,        RC,             OE ),
    INS( "sreq",        31, 729,        IT_BIN2,        RC,             OE ),
    // INS( "srd",              31, 539,        IT_BIN,         RC,             OE ),
    INS( "sriq",        31, 696,        IT_SHIFT,       RC,             OE ),
    INS( "srliq",       31, 760,        IT_SHIFT,       RC,             OE ),
    INS( "srlq",        31, 728,        IT_BIN2,        RC,             OE ),
    INS( "srq",         31, 664,        IT_BIN2,        RC,             OE ),
    INS( "srw",         31, 536,        IT_BIN2,        RC,             OE ),
    INS( "stb",         38, 0,          IT_LS,          0,              0 ),
    INS( "stbu",        39, 0,          IT_LS,          0,              0 ),
    INS( "stbux",       31, 247,        IT_LS_INDEX,    0,              0 ),
    INS( "stbx",        31, 215,        IT_LS_INDEX,    0,              0 ),
    // INS( "std",              62, 0,          IT_NYI,         0,              0 ),
    // INS( "stdcx.",   31, 214,        IT_BIN,         0,              RC ),
    // INS( "stdu",     62, 0,          IT_NYI,         0,              RC ),
    // INS( "stdux",    31, 181,        IT_BIN,         0,              0 ),

    // INS( "stdx",     31, 149,        IT_BIN,         0,              0 ),
    INS( "stfd",        54, 0,          IT_LS_FP,       0,              0 ),
    INS( "stfdu",       55, 0,          IT_LS_FP,       0,              0 ),
    INS( "stfdux",      31, 759,        IT_LS_INDEX_FP, 0,              0 ),
    INS( "stfdx",       31, 727,        IT_LS_INDEX_FP, 0,              0 ),
    // INS( "stfiwax",  31, 983,        IT_LS_INDEX_FP, 0,              0 ),
    INS( "stfs",        52, 0,          IT_LS_FP,       0,              0 ),
    INS( "stfsu",       53, 0,          IT_LS_FP,       0,              0 ),
    INS( "stfsux",      31, 695,        IT_LS_INDEX_FP, 0,              0 ),
    INS( "stfsx",       31, 663,        IT_LS_INDEX_FP, 0,              0 ),
    INS( "sth",         44, 0,          IT_LS,          0,              0 ),
    INS( "sthbrx",      31, 918,        IT_LS_INDEX,    0,              0 ),
    INS( "sthu",        45, 0,          IT_LS,          0,              0 ),
    INS( "sthux",       31, 439,        IT_LS_INDEX,    0,              0 ),
    INS( "sthx",        31, 407,        IT_LS_INDEX,    0,              0 ),
    INS( "stmw",        47, 0,          IT_LS,          0,              0 ),
    INS( "stswi",       31, 725,        IT_LSWI,        0,              0 ),
    INS( "stswx",       31, 661,        IT_LS_INDEX,    0,              0 ),
    INS( "stw",         36, 0,          IT_LS,          0,              0 ),
    INS( "stwbrx",      31, 662,        IT_LS_INDEX,    0,              0 ),
    INS( "stwcx.",      31, 150,        IT_LS_INDEX,    0,              RC ),
    INS( "stwu",        37, 0,          IT_LS,          0,              0 ),
    INS( "stwux",       31, 183,        IT_LS_INDEX,    0,              0 ),
    INS( "stwx",        31, 151,        IT_LS_INDEX,    0,              0 ),
    INS( "subf",        31, 40,         IT_BIN,         OE | RC,        0 ),
    INS( "subfc",       31, 8,          IT_BIN,         OE | RC,        0 ),
    INS( "subfe",       31, 136,        IT_BIN,         OE | RC,        0 ),
    INS( "subfic",      8, 0,           IT_BIN_IMM,     0,              0 ),
    INS( "subfme",      31, 232,        IT_UN,          OE | RC,        0 ),
    INS( "subfze",      31, 200,        IT_UN,          OE | RC,        0 ),
    INS( "sync",        31, 598,        IT_EIEIO,       0,              0 ),
    // INS( "td",               31, 68,         IT_NYI,         0,              0 ),
    // INS( "tdi",              02, 0,          IT_NYI,         0,              0 ),

    // INS( "tlbia",    31, 0,          IT_NYI,         0,              0 ),
    INS( "tlbie",       31, 306,        IT_TLBIE,       0,              0 ),
    // INS( "tlbiex",   31, 0,          IT_NYI,         0,              0 ),
    // INS( "tlbsync",  31, 566,        IT_NYI,         0,              0 ),
    INS( "tw",          31, 4,          IT_TRAP,        0,              0 ),
    INS( "twi",         3, 0,           IT_TRAP_IMM,    0,              0 ),
    INS( "xor",         31, 316,        IT_BIN2,        RC,             0 ),
    INS( "xori",        26, 0,          IT_BIN_IMM2,    0,              0 ),
    INS( "xoris",       27, 0,          IT_BIN_IMM2,    0,              0 ),

    // Simplified mnemonics:
    INS( "li",          14, 0,          IT_SM_LI,       0,              0 ),
    INS( "lis",         15, 0,          IT_SM_LI,       0,              0 ),
    INS( "la",          14, 0,          IT_SM_LA,       0,              0 ),
    INS( "subi",        14, 0,          IT_SM_SUBI,     0,              0 ),
    INS( "mr",          31, 444,        IT_SM_MR,       RC,             0 ),
    INS( "not",         31, 124,        IT_SM_MR,       RC,             0 ),
    INS( "cmpwi",       11, 0,          IT_SM_CMPWI,    0,              0 ),
    INS( "cmpw",        31, 0,          IT_SM_CMPW,     0,              0 ),
    INS( "cmplwi",      10, 0,          IT_SM_CMPWI,    0,              0 ),
    INS( "cmplw",       31, 32,         IT_SM_CMPW,     0,              0 ),
    INS( "extlwi",      21, 0,          IT_SM_EXTLWI,   RC,             0 ),
    INS2( "srwi",       21, 0,  SRWI,   IT_SM_SRWI,     RC,             0 ),
    INS2( "clrrwi",     21, 0,  CLRRWI, IT_SM_SRWI,     RC,             0 ),
    INS( "rotlw",       23, 0,          IT_SM_ROTLW,    RC,             0 ),
    INS( "inslw",       20, 0,          IT_SM_INSLW,    RC,             0 ),
    INS( "trap",        31, 4,          IT_SM_TRAP_ANY, 0,              0 ),
    INS2( "twlt",       31, 4,  TO_LT,  IT_SM_TRAP,     0,              0 ),
    INS2( "twle",       31, 4,  TO_LE,  IT_SM_TRAP,     0,              0 ),
    INS2( "tweq",       31, 4,  TO_EQ,  IT_SM_TRAP,     0,              0 ),
    INS2( "twge",       31, 4,  TO_GE,  IT_SM_TRAP,     0,              0 ),
    INS2( "twgt",       31, 4,  TO_GT,  IT_SM_TRAP,     0,              0 ),
    INS2( "twnl",       31, 4,  TO_NL,  IT_SM_TRAP,     0,              0 ),
    INS2( "twne",       31, 4,  TO_NE,  IT_SM_TRAP,     0,              0 ),
    INS2( "twllt",      31, 4,  TO_LLT, IT_SM_TRAP,     0,              0 ),
    INS2( "twlle",      31, 4,  TO_LLE, IT_SM_TRAP,     0,              0 ),
    INS2( "twlge",      31, 4,  TO_LGE, IT_SM_TRAP,     0,              0 ),
    INS2( "twlgt",      31, 4,  TO_LGT, IT_SM_TRAP,     0,              0 ),
    INS2( "twlnl",      31, 4,  TO_LNL, IT_SM_TRAP,     0,              0 ),
    INS2( "twlti",      3, 0,   TO_LT,  IT_SM_TRAPI,    0,              0 ),
    INS2( "twlei",      3, 0,   TO_LE,  IT_SM_TRAPI,    0,              0 ),
    INS2( "tweqi",      3, 0,   TO_EQ,  IT_SM_TRAPI,    0,              0 ),
    INS2( "twgei",      3, 0,   TO_GE,  IT_SM_TRAPI,    0,              0 ),
    INS2( "twgti",      3, 0,   TO_GT,  IT_SM_TRAPI,    0,              0 ),
    INS2( "twnli",      3, 0,   TO_NL,  IT_SM_TRAPI,    0,              0 ),
    INS2( "twnei",      3, 0,   TO_NE,  IT_SM_TRAPI,    0,              0 ),
    INS2( "twllti",     3, 0,   TO_LLT, IT_SM_TRAPI,    0,              0 ),
    INS2( "twllei",     3, 0,   TO_LLE, IT_SM_TRAPI,    0,              0 ),
    INS2( "twlgei",     3, 0,   TO_LGE, IT_SM_TRAPI,    0,              0 ),
    INS2( "twlgti",     3, 0,   TO_LGT, IT_SM_TRAPI,    0,              0 ),
    INS2( "twlnli",     3, 0,   TO_LNL, IT_SM_TRAPI,    0,              0 ),
    INS2( "mtxer",      31, 467,XER,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtlr",       31, 467,LR,     IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtctr",      31, 467,CTR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtdsisr",    31, 467,DSISR,  IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtdar",      31, 467,DAR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtdec",      31, 467,DEC,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtsdr1",     31, 467,SDR1,   IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtsrr0",     31, 467,SRR0,   IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtsrr1",     31, 467,SRR1,   IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtsprg",     31, 467,SPRG,   IT_SM_MTSPRN,   0,              0 ),
    INS2( "mtear",      31, 467,EAR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mtibatu",    31, 467,BATU,   IT_SM_MTSPRN,   0,              0 ),
    INS2( "mtibatl",    31, 467,BATL,   IT_SM_MTSPRN,   0,              0 ),
    INS2( "mfxer",      31, 339,XER,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mflr",       31, 339,LR,     IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfctr",      31, 339,CTR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfdsisr",    31, 339,DSISR,  IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfdar",      31, 339,DAR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfdec",      31, 339,DEC,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfsdr1",     31, 339,SDR1,   IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfsrr0",     31, 339,SRR0,   IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfsrr1",     31, 339,SRR1,   IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfsprg",     31, 339,SPRG,   IT_SM_MFSPRN,   0,              0 ),
    INS2( "mfear",      31, 339,EAR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfpvr",      31, 339,PVR,    IT_SM_MOV_SPR,  0,              0 ),
    INS2( "mfibatu",    31, 339,BATU,   IT_SM_MFSPRN,   0,              0 ),
    INS2( "mfibatl",    31, 339,BATL,   IT_SM_MFSPRN,   0,              0 ),
    INS2( "bt",         16, 0,  B_T,            IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bf",         16, 0,  B_F,            IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bdnz",       16, 0,  B_DNZ,          IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bdnzt",      16, 0,  B_DNZT,         IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bdnzf",      16, 0,  B_DNZF,         IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bdz",        16, 0,  B_DZ,           IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bdzt",       16, 0,  B_DZT,          IT_SM_B_C,      AA | LK,    0 ),
    INS2( "bdzf",       16, 0,  B_DZF,          IT_SM_B_C,      AA | LK,    0 ),
    INS2( "blr",        19, 16, B_UNCOND,       IT_SM_B_SP,     LK,         0 ),
    INS2( "btlr",       19, 16, B_T,            IT_SM_B_SP,     LK,         0 ),
    INS2( "bflr",       19, 16, B_F,            IT_SM_B_SP,     LK,         0 ),
    INS2( "bdnzlr",     19, 16, B_DNZ,          IT_SM_B_SP,     LK,         0 ),
    INS2( "bdnztlr",    19, 16, B_DNZT,         IT_SM_B_SP,     LK,         0 ),
    INS2( "bdnzflr",    19, 16, B_DNZF,         IT_SM_B_SP,     LK,         0 ),
    INS2( "bdzlr",      19, 16, B_DZ,           IT_SM_B_SP,     LK,         0 ),
    INS2( "bdztlr",     19, 16, B_DZT,          IT_SM_B_SP,     LK,         0 ),
    INS2( "bdzflr",     19, 16, B_DZF,          IT_SM_B_SP,     LK,         0 ),
    INS2( "bctr",       19, 528,B_UNCOND,       IT_SM_B_SP,     LK,         0 ),
    INS2( "btctr",      19, 528,B_T,            IT_SM_B_SP,     LK,         0 ),
    INS2( "bfctr",      19, 528,B_F,            IT_SM_B_SP,     LK,         0 ),
    INS2( "blt",        16, 0,  BICC_LT,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "ble",        16, 0,  BICC_NG,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "beq",        16, 0,  BICC_EQ,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bge",        16, 0,  BICC_NL,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bgt",        16, 0,  BICC_GT,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bnl",        16, 0,  BICC_NL,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bne",        16, 0,  BICC_NE,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bng",        16, 0,  BICC_NG,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bso",        16, 0,  BICC_SO,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bns",        16, 0,  BICC_NS,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bun",        16, 0,  BICC_UN,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bnu",        16, 0,  BICC_NU,        IT_SM_B_C_ICC,  AA | LK,    0 ),
    INS2( "bltlr",      19, 16, BICC_LT,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "blelr",      19, 16, BICC_NG,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "beqlr",      19, 16, BICC_EQ,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bgelr",      19, 16, BICC_NL,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bgtlr",      19, 16, BICC_GT,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnllr",      19, 16, BICC_NL,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnelr",      19, 16, BICC_NE,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnglr",      19, 16, BICC_NG,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bsolr",      19, 16, BICC_SO,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnslr",      19, 16, BICC_NS,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bunlr",      19, 16, BICC_UN,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnulr",      19, 16, BICC_NU,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bltctr",     19, 528,BICC_LT,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "blectr",     19, 528,BICC_NG,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "beqctr",     19, 528,BICC_EQ,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bgectr",     19, 528,BICC_NL,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bgtctr",     19, 528,BICC_GT,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnlctr",     19, 528,BICC_NL,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnectr",     19, 528,BICC_NE,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bngctr",     19, 528,BICC_NG,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bsoctr",     19, 528,BICC_SO,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnsctr",     19, 528,BICC_NS,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bunctr",     19, 528,BICC_UN,        IT_SM_B_SP_ICC, LK,         0 ),
    INS2( "bnuctr",     19, 528,BICC_NU,        IT_SM_B_SP_ICC, LK,         0 ),
};

#define MAX_NAME_LEN    20      /* maximum length of a PPC instruction mnemonic */

static void addInstructionSymbol( ins_flags flags, ins_table *table_entry ) {
//***************************************************************************
// Given an instruction name for which the optional bits in flags
// are turned on, add a symbol for it to the symbol table.

    sym_handle  sym;
    ins_symbol  *entry;
    char        buffer[ MAX_NAME_LEN ];

    strcpy( buffer, table_entry->name );

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?