📄 ppcopc.cc
字号:
{ 10, 11, extract_spr, 0 }, /* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */#define SPRBAT SPR + 1#define SPRBAT_MASK (0x3 << 17) { 2, 17, 0, 0 }, /* The SPRG register number in an XFX form m[ft]sprg instruction. */#define SPRG SPRBAT + 1#define SPRG_MASK (0x3 << 16) { 2, 16, 0, 0 }, /* The SR field in an X form instruction. */#define SR SPRG + 1 { 4, 16, 0, 0 }, /* The STRM field in an X AltiVec form instruction. */#define STRM SR + 1#define STRM_MASK (0x3 << 21) { 2, 21, 0, 0 }, /* The SV field in a POWER SC form instruction. */#define SV STRM + 1 { 14, 2, 0, 0 }, /* The TBR field in an XFX form instruction. This is like the SPR field, but it is optional. */#define TBR SV + 1 { 10, 11, extract_tbr, PPC_OPERAND_OPTIONAL }, /* The TO field in a D or X form instruction. */#define TO TBR + 1#define TO_MASK (0x1f << 21) { 5, 21, 0, 0 }, /* The U field in an X form instruction. */#define U TO + 1 { 4, 12, 0, 0 }, /* The UI field in a D form instruction. */#define UI U + 1 { 16, 0, 0, 0 }, /* The VA field in a VA, VX or VXR form instruction. */#define VA UI + 1#define VA_MASK (0x1f << 16) { 5, 16, 0, PPC_OPERAND_VR }, /* The VB field in a VA, VX or VXR form instruction. */#define VB VA + 1#define VB_MASK (0x1f << 11) { 5, 11, 0, PPC_OPERAND_VR }, /* The VB field in a VA, VX or VXR form instruction. */#define VAB VB + 1#define VAB_MASK (0x1f << 11) { 5, 11, extract_vab, PPC_OPERAND_FAKE }, /* The VC field in a VA form instruction. */#define VC VAB + 1#define VC_MASK (0x1f << 6) { 5, 6, 0, PPC_OPERAND_VR }, /* The VD or VS field in a VA, VX, VXR or X form instruction. */#define VD VC + 1#define VS VD#define VD_MASK (0x1f << 21) { 5, 21, 0, PPC_OPERAND_VR }, /* The VD or VS field in a VA, VX, VXR or X form instruction. */#define VD128 VD + 1#define VS128 VD128#define VD128_MASK (0x1f << 21) { 0, 0, extract_vds128, PPC_OPERAND_VR }, /* The VD or VS field in a VA, VX, VXR or X form instruction. */#define VA128 VD128 + 1#define VA128_MASK (0x1f << 21) { 0, 0, extract_va128, PPC_OPERAND_VR }, /* The VD or VS field in a VA, VX, VXR or X form instruction. */#define VB128 VA128 + 1#define VB128_MASK (0x1f << 21) { 0, 0, extract_vb128, PPC_OPERAND_VR }, /* The VD or VS field in a VA, VX, VXR or X form instruction. */#define VC128 VB128 + 1#define VC128_MASK (0x1f << 21) { 3, 6, 0, PPC_OPERAND_VR },#define VPERM128 VC128 + 1#define VPERM_MASK (0x1f << 21) { 0, 0, extract_vperm, 0 },#define VD3D0 VPERM128 + 1 { 3, 18, 0, 0 },#define VD3D1 VD3D0 + 1 { 2, 16, 0, 0 },#define VD3D2 VD3D1 + 1 { 2, 6, 0, 0 }, /* The SIMM field in a VX form instruction. */#define SIMM VD3D2 + 1 { 5, 16, 0, PPC_OPERAND_SIGNED}, /* The UIMM field in a VX form instruction. */#define UIMM SIMM + 1 { 5, 16, 0, 0 }, /* The SHB field in a VA form instruction. */#define SHB UIMM + 1 { 4, 6, 0, 0 }, /* The WS field. */#define WS SHB + 1#define WS_MASK (0x7 << 11) { 3, 11, 0, 0 }, /* The L field in an mtmsrd instruction */#define MTMSRD_L WS + 1 { 1, 16, 0, PPC_OPERAND_OPTIONAL }, /* The DCM field in a Z form instruction. */#define DCM MTMSRD_L + 1#define DGM DCM { 6, 16, 0, 0 },#define TE DGM + 1 { 5, 11, 0, 0 },#define RMC TE + 1 { 2, 21, 0, 0 },#define R RMC + 1 { 1, 15, 0, 0 },#define SP R + 1 { 2, 11, 0, 0 },#define S SP + 1 { 1, 11, 0, 0 }, /* SH field starting at bit position 16. */#define SH16 S + 1 { 6, 10, 0, 0 },};/* Macros used to form opcodes. *//* The main opcode. */#define OP(x) ((((unsigned long)(x)) & 0x3f) << 26)#define OP_MASK OP (0x3f)/* The main opcode combined with a trap code in the TO field of a D form instruction. Used for extended mnemonics for the trap instructions. */#define OPTO(x,to) (OP (x) | ((((unsigned long)(to)) & 0x1f) << 21))#define OPTO_MASK (OP_MASK | TO_MASK)/* The main opcode combined with a comparison size bit in the L field of a D form or X form instruction. Used for extended mnemonics for the comparison instructions. */#define OPL(x,l) (OP (x) | ((((unsigned long)(l)) & 1) << 21))#define OPL_MASK OPL (0x3f,1)/* An A form instruction. */#define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))#define A_MASK A (0x3f, 0x1f, 1)/* An A_MASK with the FRB field fixed. */#define AFRB_MASK (A_MASK | FRB_MASK)/* An A_MASK with the FRC field fixed. */#define AFRC_MASK (A_MASK | FRC_MASK)/* An A_MASK with the FRA and FRC fields fixed. */#define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)/* A B form instruction. */#define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))#define B_MASK B (0x3f, 1, 1)/* A B form instruction setting the BO field. */#define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))#define BBO_MASK BBO (0x3f, 0x1f, 1, 1)/* A BBO_MASK with the y bit of the BO field removed. This permits matching a conditional branch regardless of the setting of the y bit. Similarly for the 'at' bits used for power4 branch hints. */#define Y_MASK (((unsigned long) 1) << 21)#define AT1_MASK (((unsigned long) 3) << 21)#define AT2_MASK (((unsigned long) 9) << 21)#define BBOY_MASK (BBO_MASK &~ Y_MASK)#define BBOAT_MASK (BBO_MASK &~ AT1_MASK)/* A B form instruction setting the BO field and the condition bits of the BI field. */#define BBOCB(op, bo, cb, aa, lk) \ (BBO ((op), (bo), (aa), (lk)) | ((((unsigned long)(cb)) & 0x3) << 16))#define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)/* A BBOCB_MASK with the y bit of the BO field removed. */#define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)#define BBOATCB_MASK (BBOCB_MASK &~ AT1_MASK)#define BBOAT2CB_MASK (BBOCB_MASK &~ AT2_MASK)/* A BBOYCB_MASK in which the BI field is fixed. */#define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)#define BBOATBI_MASK (BBOAT2CB_MASK | BI_MASK)/* An Context form instruction. */#define CTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7))#define CTX_MASK CTX(0x3f, 0x7)/* An User Context form instruction. */#define UCTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))#define UCTX_MASK UCTX(0x3f, 0x1f)/* The main opcode mask with the RA field clear. */#define DRA_MASK (OP_MASK | RA_MASK)/* A DS form instruction. */#define DSO(op, xop) (OP (op) | ((xop) & 0x3))#define DS_MASK DSO (0x3f, 3)/* A DE form instruction. */#define DEO(op, xop) (OP (op) | ((xop) & 0xf))#define DE_MASK DEO (0x3e, 0xf)/* An EVSEL form instruction. */#define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)#define EVSEL_MASK EVSEL(0x3f, 0xff)/* An M form instruction. */#define M(op, rc) (OP (op) | ((rc) & 1))#define M_MASK M (0x3f, 1)/* An M form instruction with the ME field specified. */#define MME(op, me, rc) (M ((op), (rc)) | ((((unsigned long)(me)) & 0x1f) << 1))/* An M_MASK with the MB and ME fields fixed. */#define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)/* An M_MASK with the SH and ME fields fixed. */#define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)/* An MD form instruction. */#define MD(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x7) << 2) | ((rc) & 1))#define MD_MASK MD (0x3f, 0x7, 1)/* An MD_MASK with the MB field fixed. */#define MDMB_MASK (MD_MASK | MB6_MASK)/* An MD_MASK with the SH field fixed. */#define MDSH_MASK (MD_MASK | SH6_MASK)/* An MDS form instruction. */#define MDS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0xf) << 1) | ((rc) & 1))#define MDS_MASK MDS (0x3f, 0xf, 1)/* An MDS_MASK with the MB field fixed. */#define MDSMB_MASK (MDS_MASK | MB6_MASK)/* An SC form instruction. */#define SC(op, sa, lk) (OP (op) | ((((unsigned long)(sa)) & 1) << 1) | ((lk) & 1))#define SC_MASK (OP_MASK | (((unsigned long)0x3ff) << 16) | (((unsigned long)1) << 1) | 1)/* An VX form instruction. */#define VX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))/* The mask for an VX form instruction. */#define VX_MASK VX(0x3f, 0x7ff)/* The mask for an VX form instruction. */#define VX_MASK VX(0x3f, 0x7ff)/* An VA form instruction. */#define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))/* The mask for an VA form instruction. */#define VXA_MASK VXA(0x3f, 0x3f)/* An VXR form instruction. */#define VXR(op, xop, rc) (OP (op) | (((rc) & 1) << 10) | (((unsigned long)(xop)) & 0x3ff))/* The mask for a VXR form instruction. */#define VXR_MASK VXR(0x3f, 0x3ff, 1)/* An VX128 form instruction. */#define VX128(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x3d0))/* The mask for an VX form instruction. */#define VX128_MASK VX(0x3f, 0x3d0)/* An VX128 form instruction. */#define VX128_1(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7f3))/* The mask for an VX form instruction. */#define VX128_1_MASK VX(0x3f, 0x7f3)/* An VX128 form instruction. */#define VX128_2(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x210))/* The mask for an VX form instruction. */#define VX128_2_MASK VX(0x3f, 0x210)/* An VX128 form instruction. */#define VX128_3(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7f0))/* The mask for an VX form instruction. */#define VX128_3_MASK VX(0x3f, 0x7f0)#define VX128_P(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x630))#define VX128_P_MASK VX(0x3f, 0x630)#define VX128_4(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x730))#define VX128_4_MASK VX(0x3f, 0x730)#define VX128_5(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x10))#define VX128_5_MASK VX(0x3f, 0x10)/* An X form instruction. */#define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))/* A Z form instruction. */#define Z(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1))/* An X form instruction with the RC bit specified. */#define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))/* A Z form instruction with the RC bit specified. */#define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -