📄 ppcinst.h
字号:
/*++ Copyright (c) 1993 IBM CorporationModule Name: ppcinst.hAbstract: PowerPC instruction and floating constant definitions. Rick Simpson 30 July 1993Revision History: Richard Hooker : Updated on 03 April 2000 for use with WindowsCE on PowerPC--*/#ifndef _PPCINST_#define _PPCINST_//// POWERPC INSTRUCTION FORMAT STRUCTURES//typedef union _PPC_INSTRUCTION { ULONG Long; UCHAR Byte[4]; struct { ULONG bit31 : 1; ULONG bit30 : 1; LONG bit6_29 : 24; ULONG bit0_5 : 6; } i_f;#define Primary_Op i_f.bit0_5#define Iform_LI i_f.bit6_29#define Iform_AA i_f.bit30#define Iform_LK i_f.bit31 struct { ULONG bit31 : 1; ULONG bit30 : 1; LONG bit16_29 : 14; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } b_f;#define Bform_BO b_f.bit6_10#define Bform_BI b_f.bit11_15#define Bform_BD b_f.bit16_29#define Bform_AA b_f.bit30#define Bform_LK b_f.bit31 struct { ULONG bit31 : 1; ULONG bit30 : 1; ULONG bit6_29 : 24; ULONG bit0_5 : 6; } sc_f;#define SCform_XO sc_f.bit30 struct { LONG bit16_31 : 16; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } d_f1; struct { ULONG bit16_31 : 16; ULONG bit11_15 : 5; ULONG bit10 : 1; ULONG bit9 : 1; ULONG bit6_8 : 3; ULONG bit0_5 : 6; } d_f2;#define Dform_RT d_f1.bit6_10#define Dform_RS d_f1.bit6_10#define Dform_TO d_f1.bit6_10#define Dform_FRT d_f1.bit6_10#define Dform_FRS d_f1.bit6_10#define Dform_BF d_f2.bit6_8#define Dform_L d_f2.bit10#define Dform_RA d_f1.bit11_15#define Dform_D d_f1.bit16_31#define Dform_SI d_f1.bit16_31#define Dform_UI d_f2.bit16_31 struct { ULONG bit30_31 : 2; LONG bit16_29 : 14; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } ds_f;#define DSform_RT ds_f.bit6_10#define DSform_RS ds_f.bit6_10#define DSform_RA ds_f.bit11_15#define DSform_DS ds_f.bit16_29#define DSform_XO ds_f.bit30_31 struct { ULONG bit31 : 1; ULONG bit21_30 : 10; ULONG bit16_20 : 5; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } x_f1; struct { ULONG bit20_31 : 12; ULONG bit16_19 : 4; ULONG bit14_15 : 2; ULONG bit11_13 : 3; ULONG bit10 : 1; ULONG bit9 : 1; ULONG bit6_8 : 3; ULONG bit0_5 : 6; } x_f2; struct { ULONG bit16_31 : 16; ULONG bit12_15 : 4; ULONG bit0_11 : 12; } x_f3;#define Xform_RT x_f1.bit6_10#define Xform_RS x_f1.bit6_10#define Xform_TO x_f1.bit6_10#define Xform_FRT x_f1.bit6_10#define Xform_FRS x_f1.bit6_10#define Xform_BT x_f1.bit6_10#define Xform_BF x_f2.bit6_8#define Xform_L x_f2.bit10#define Xform_RA x_f1.bit11_15#define Xform_FRA x_f1.bit11_15#define Xform_BFA x_f2.bit11_13#define Xform_SR x_f3.bit12_15#define Xform_RB x_f1.bit16_20#define Xform_NB x_f1.bit16_20#define Xform_SH x_f1.bit16_20#define Xform_FRB x_f1.bit16_20#define Xform_U x_f2.bit16_19#define Xform_XO x_f1.bit21_30#define Xform_RC x_f1.bit31 struct { ULONG bit31 : 1; ULONG bit21_30 : 10; ULONG bit16_20 : 5; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } xl_f1; struct { ULONG bit14_31 : 18; ULONG bit11_13 : 3; ULONG bit9_10 : 2; ULONG bit6_8 : 3; ULONG bit0_5 : 6; } xl_f2;#define XLform_LK xl_f1.bit31#define XLform_XO xl_f1.bit21_30#define XLform_BB xl_f1.bit16_20#define XLform_BA xl_f1.bit11_15#define XLform_BI xl_f1.bit11_15#define XLform_BFA xl_f2.bit11_13#define XLform_BT xl_f1.bit6_10#define XLform_BO xl_f1.bit6_10#define XLform_BF xl_f2.bit6_8 struct { ULONG bit31 : 1; ULONG bit21_30 : 10; ULONG bit11_20 : 10; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } xfx_f1; struct { ULONG bit20_31 : 12; ULONG bit12_19 : 8; ULONG bit6_11 : 6; ULONG bit0_5 : 6; } xfx_f2;#define XFXform_RT xfx_f1.bit6_10#define XFXform_RS xfx_f1.bit6_10#define XFXform_spr xfx_f1.bit11_20#define XFXform_tbr xfx_f1.bit11_20#define XFXform_spr xfx_f1.bit11_20#define XFXform_FXM xfx_f2.bit12_19#define XFXform_XO xfx_f1.bit21_30 struct { ULONG bit31 : 1; ULONG bit21_30 : 10; ULONG bit16_20 : 5; ULONG bit15 : 1; ULONG bit7_14 : 8; ULONG bit6 : 1; ULONG bit0_5 : 6; } xfl_f;#define XFLform_FLM xfl_f.bit7_14#define XFLform_FRB xfl_f.bit16_20#define XFLform_XO xfl_f.bit21_30#define XFLform_RC xfl_f.bit31 struct { ULONG bit31 : 1; ULONG bit30 : 1; ULONG bit21_29 : 9; ULONG bit16_20 : 5; ULONG bit10_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } xs_f;#define XSform_RS xs_f.bit6_10#define XSform_RA xs_f.bit11_15#define XSform_sh1 xs_f.bit16_20#define XSform_XO xs_f.bit21_29#define XSform_sh2 xs_f.bit30#define XSform_RC xs_f.bit31 struct { ULONG bit31 : 1; ULONG bit22_30 : 9; ULONG bit21 : 1; ULONG bit16_20 : 5; ULONG bit10_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } xo_f;#define XOform_RT xo_f.bit6_10#define XOform_RA xo_f.bit11_15#define XOform_RB xo_f.bit16_20#define XOform_OE xo_f.bit21#define XOform_XO xo_f.bit22_30#define XOform_RC xo_f.bit31 struct { ULONG bit31 : 1; ULONG bit26_30 : 5; ULONG bit21_25 : 5; ULONG bit16_20 : 5; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } a_f;#define Aform_FRT a_f.bit6_10#define Aform_FRA a_f.bit11_15#define Aform_FRB a_f.bit16_20#define Aform_FRC a_f.bit21_25#define Aform_XO a_f.bit26_30#define Aform_RC a_f.bit31 struct { ULONG bit31 : 1; ULONG bit26_30 : 5; ULONG bit21_25 : 5; ULONG bit16_20 : 5; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } m_f;#define Mform_RS m_f.bit6_10#define Mform_RA m_f.bit11_15#define Mform_RB m_f.bit16_20#define Mform_SH m_f.bit16_20#define Mform_MB m_f.bit21_25#define Mform_ME m_f.bit26_30#define Mform_RC m_f.bit31 struct { ULONG bit31 : 1; ULONG bit30 : 1; ULONG bit27_29 : 3; ULONG bit21_26 : 6; ULONG bit16_20 : 5; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } md_f;#define MDform_RS md_f.bit6_10#define MDform_RA md_f.bit11_15#define MDform_sh1 md_f.bit16_20#define MDform_mb md_f.bit21_26#define MDform_me md_f.bit21_26#define MDform_XO md_f.bit27_29#define MDform_sh2 md_f.bit30#define MDform_RC md_f.bit31 struct { ULONG bit31 : 1; ULONG bit27_30 : 4; ULONG bit21_26 : 6; ULONG bit16_20 : 5; ULONG bit11_15 : 5; ULONG bit6_10 : 5; ULONG bit0_5 : 6; } mds_f;#define MDSform_RS mds_f.bit6_10#define MDSform_RA mds_f.bit11_15#define MDSform_RB mds_f.bit16_20#define MDSform_mb mds_f.bit21_26#define MDSform_me mds_f.bit21_26#define MDSform_XO mds_f.bit27_30#define MDSform_RC mds_f.bit31} PPC_INSTRUCTION, *PPPC_INSTRUCTION;//// POWERPC PRIMARY AND SECONDARY (EXTENDED) OPCODES//#define TDI_OP 2#define TWI_OP 3#define MULLI_OP 7#define SUBFIC_OP 8#define CMPLI_OP 10#define CMPI_OP 11#define ADDIC_OP 12#define ADDIC_RC_OP 13#define ADDI_OP 14#define ADDIS_OP 15#define BC_OP 16#define SC_OP 17#define B_OP 18#define X19_OP 19 // Extended ops for primary code 19:#define MCRF_OP 0#define BCLR_OP 16#define CRNOR_OP 33#define RFI_OP 50#define CRANDC_OP 129#define ISYNC_OP 150#define CRXOR_OP 193#define CRNAND_OP 225#define CRAND_OP 257#define CREQV_OP 289#define CRORC_OP 417#define CROR_OP 449#define BCCTR_OP 528#define RLWIMI_OP 20#define RLWINM_OP 21#define RLWNM_OP 23#define ORI_OP 24#define ORIS_OP 25#define XORI_OP 26#define XORIS_OP 27#define ANDI_RC_OP 28#define ANDIS_RC_OP 29#define X30_OP 30 // Extended ops for primary code 30:#define RLDICL_OP 0#define RLDICR_OP 1#define RLDIC_OP 2#define RLDIMI_OP 3#define RLDCL_OP 8#define RLDCR_OP 9#define X31_OP 31 // Extended ops for primary code 31:#define CMP_OP 0#define TW_OP 4#define SUBFC_OP 8#define MULHDU_OP 9#define ADDC_OP 10#define MULHWU_OP 11#define MFCR_OP 19#define LWARX_OP 20#define LDX_OP 21#define LWZX_OP 23#define SLW_OP 24#define CNTLZW_OP 26#define SLD_OP 27#define AND_OP 28#define CMPL_OP 32#define SUBF_OP 40#define LDUX_OP 53#define DCBST_OP 54#define LWZUX_OP 55#define CNTLZD_OP 58#define ANDC_OP 60#define TD_OP 68#define MULHD_OP 73#define MULHW_OP 75#define MFMSR_OP 83#define LDARX_OP 84#define DCBF_OP 86#define LBZX_OP 87#define NEG_OP 104#define LBZUX_OP 119#define NOR_OP 124#define SUBFE_OP 136#define ADDE_OP 138#define MTCRF_OP 144#define MTMSR_OP 146#define STDX_OP 149#define STWCX_RC_OP 150 #define STWX_OP 151#define STDUX_OP 181#define STWUX_OP 183#define SUBFZE_OP 200#define ADDZE_OP 202#define MTSR_OP 210#define STDCX_RC_OP 214#define STBX_OP 215#define SUBFME_OP 232#define MULLD_OP 233#define ADDME_OP 234#define MULLW_OP 235#define MTSRIN_OP 242#define DCBTST_OP 246#define STBUX_OP 247#define ADD_OP 266#define DCBT_OP 278#define LHZX_OP 279#define EQV_OP 284#define TLBIE_OP 306#define ECIWX_OP 310#define LHZUX_OP 311#define XOR_OP 316#define MFSPR_OP 339#define LWAX_OP 341#define LHAX_OP 343#define TLBIA_OP 370#define MFTB_OP 371#define LWAUX_OP 373#define LHAUX_OP 375#define STHX_OP 407#define ORC_OP 412#define SRADI_OP 413#define SLBIE_OP 434#define ECOWX_OP 438#define STHUX_OP 439#define OR_OP 444#define DIVDU_OP 457#define DIVWU_OP 459#define MTSPR_OP 467#define DCBI_OP 470#define NAND_OP 476#define DIVD_OP 489#define DIVW_OP 491#define SLBIA_OP 498#define MCRXR_OP 512#define LSWX_OP 533#define LWBRX_OP 534#define LFSX_OP 535#define SRW_OP 536#define SRD_OP 539#define TLBSYNC_OP 566#define LFSUX_OP 567#define MFSR_OP 595#define LSWI_OP 597#define SYNC_OP 598#define LFDX_OP 599#define LFDUX_OP 631#define MFSRIN_OP 659#define STSWX_OP 661#define STWBRX_OP 662#define STFSX_OP 663#define STFSUX_OP 695#define STSWI_OP 725#define STFDX_OP 727#define STFDUX_OP 759#define LHBRX_OP 790#define SRAW_OP 792#define SRAD_OP 794#define SRAWI_OP 824#define EIEIO_OP 854#define STHBRX_OP 918#define EXTSH_OP 922#define EXTSB_OP 954#define ICBI_OP 982#define STFIWX_OP 983#define EXTSW_OP 986#define DCBZ_OP 1014#define LWZ_OP 32#define LWZU_OP 33#define LBZ_OP 34#define LBZU_OP 35#define STW_OP 36#define STWU_OP 37#define STB_OP 38#define STBU_OP 39#define LHZ_OP 40#define LHZU_OP 41#define LHA_OP 42#define LHAU_OP 43#define STH_OP 44#define STHU_OP 45#define LFS_OP 48#define LFSU_OP 49#define LFD_OP 50#define LFDU_OP 51#define STFS_OP 52#define STFSU_OP 53#define STFD_OP 54#define STFDU_OP 55#define X58_OP 58 // Extended ops for primary code 58:#define LD_OP 0#define LDU_OP 1#define LWA_OP 2#define X59_OP 59 // Extended ops for primary code 59:#define FDIVS_OP 18#define FSUBS_OP 20#define FADDS_OP 21#define FSQRTS_OP 22#define FRES_OP 24#define FMULS_OP 25#define FMSUBS_OP 28#define FMADDS_OP 29#define FNMSUBS_OP 30#define FNMADDS_OP 31#define X62_OP 62 // Extended ops for primary code 62:#define STD_OP 0#define STDU_OP 1#define X63_OP 63 // Extended ops for primary code 63:#define FCMPU_OP 0#define FRSP_OP 12#define FCTIW_OP 14#define FCTIWZ_OP 15#define FDIV_OP 18#define FSUB_OP 20#define FADD_OP 21#define FSQRT_OP 22#define FSEL_OP 23#define FMUL_OP 25#define FSQRTE_OP 26#define FMSUB_OP 28#define FMADD_OP 29#define FNMSUB_OP 30#define FNMADD_OP 31#define FCMPO_OP 32#define MTFSB1_OP 38#define FNEG_OP 40#define MCRFS_OP 64#define MTFSB0_OP 70#define FMR_OP 72#define MTFSFI_OP 134#define FNABS_OP 136#define FABS_OP 264#define MFFS_OP 583#define MTFSF_OP 711#define FCTID_OP 814#define FCTIDZ_OP 815#define FCFID_OP 846//// Define certain specific instructions//#define SYSTEM_CALL_INSTR 0x44000002L // sc#define RETURN_INSTR 0x4E800020L // blr#define BREAK_INSTR 0x0FE00000L // break <number>#define TRAP_INSTR 0x0C000000L // trap word immediate#define NO_OP_INSTR 0x60000000L // ori r.0, r.0, 0#define INVALID_INSTR 0x00000000L // all 0's => invalid//// Define specific values for the TO field of the TRAP_INSTR //#define TO_BREAKPOINT 0x03E00000L // Unconditional breakpoint#define TO_DIVIDE_BY_ZERO 0x00C00000L // Integer divide by zero#define TO_UNCONDITIONAL_DIVIDE_BY_ZERO 0x00E00000L // Unconditional divide // by zero//// IEEE FLOATING POINT VALUE REPRESENTATION////// Define maximum and minimum single and double exponent values.//#define DOUBLE_MAXIMUM_EXPONENT 2047#define DOUBLE_MINIMUM_EXPONENT 0#define SINGLE_MAXIMUM_EXPONENT 255#define SINGLE_MINIMUM_EXPONENT 0//// Define single and double exponent bias values.//#define SINGLE_EXPONENT_BIAS 127#define DOUBLE_EXPONENT_BIAS 1023//// Define the largest single and double values;//#define DOUBLE_MAXIMUM_VALUE_LOW 0xffffffff#define DOUBLE_MAXIMUM_VALUE_HIGH 0x7fefffff#define SINGLE_MAXIMUM_VALUE 0x7f7fffff//// Define single and double quite and signaling Nan values.//#define DOUBLE_NAN_LOW 0xffffffff#define DOUBLE_QUIET_NAN 0x7ff7ffff#define DOUBLE_SIGNAL_NAN 0x7fffffff#define SINGLE_QUIET_NAN 0x7fbfffff#define SINGLE_SIGNAL_NAN 0x7fffffff//// Define positive single and double infinity values.//#define DOUBLE_INFINITY_VALUE_LOW 0x0#define DOUBLE_INFINITY_VALUE_HIGH 0x7ff00000#define SINGLE_INFINITY_VALUE 0x7f800000//// Define rounding modes.//#define ROUND_TO_NEAREST 0#define ROUND_TO_ZERO 1#define ROUND_TO_PLUS_INFINITY 2#define ROUND_TO_MINUS_INFINITY 3#endif // _PPCINST_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -