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 + -
显示快捷键?