Index: src/arm/constants-arm.h |
diff --git a/src/arm/constants-arm.h b/src/arm/constants-arm.h |
index 7b79ccd42fa996c9aa6617ac1fcba88bfe9a98ba..ded3af2ef52133522586323f3431e5f8acf6c257 100644 |
--- a/src/arm/constants-arm.h |
+++ b/src/arm/constants-arm.h |
@@ -254,6 +254,159 @@ enum ThumbMode4_5Opcode16 { |
}; |
+enum ThumbOpcode32Mode1 { |
+ AND_32_IMM = 0, |
+ TST_32_IMM = 0, |
+ BIC_32_IMM = 1, |
+ ORR_32_IMM = 2, |
+ MOV_32_IMM2 = 2, |
+ ORN_32_IMM = 3, |
+ MVN_32_IMM = 3, |
+ EOR_32_IMM = 4, |
+ TEQ_32_IMM = 4, |
+ ADD_32_IMM3 = 8, |
+ CMN_32_IMM = 8, |
+ ADC_32_IMM = 10, |
+ SBC_32_IMM = 11, |
+ SUB_32_IMM3 = 13, |
+ CMP_32_IMM = 13, |
+ RSB_32_IMM = 14 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode3 { |
+ ADD_32_IMM4 = 0, |
+ MOV_32_IMM3 = 4, |
+ SUB_32_IMM4 = 10, |
+ MOVT_32_IMM = 12, |
+ SBFX_32_IMM = 20, |
+ BFI_32_IMM = 22, |
+ BFC_32_IMM = 22, |
+ USAT_32_IMM = 24, |
+ UBFX_32_IMM = 28 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode4 { |
+// Branches and misc control |
+ B_32_3 = 0, |
+ MSR_32_REG = 0, |
+ MSR_32_REG2 = 0, |
+ B_32_4 = 1, |
+ BL_32_IMM = 5, |
+ BLX_32_IMM = 4 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode6 { |
+ STRD_32_IMM = 0, |
+ STRD_32_IMM_OP2 = 2, |
+ STRD_32_IMM2 = 2, |
+ STRD_32_IMM2_OP2 = 0, |
+ LDRD_32_IMM = 0, |
+ LDRD_32_IMM_OP2 = 3, |
+ LDRD_32_IMM_OP2_x1 = 1, // else overwrites W |
+ LDRD_32_IMM2 = 2, |
+ LDRD_32_IMM2_OP2 = 1 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode7 { |
+ LDR_32_IMM3 = 0, |
+ LDR_32_IMM4 = 0, |
+ LDR_32_REG = 0 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode8 { |
+ LDRH_32_IMM2 = 1, |
+ LDRH_32_IMM3 = 0, |
+ LDRH_32_REG = 0, |
+ LDRSH_32_IMM1 = 3, |
+ LDRSH_32_IMM2 = 2, |
+ LDRSH_32_REG = 2 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode9 { |
+ LDRB_32_IMM2 = 1, |
+ LDRB_32_IMM3 = 0, |
+ LDRB_32_REG = 0, |
+ LDRSB_32_IMM1 = 3, |
+ LDRSB_32_IMM2 = 2, |
+ LDRSB_32_REG = 2 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode10 { |
+ STRB_32_IMM2 = 4, |
+ STRB_32_IMM3 = 0, |
+ STRB_32_REG = 0, |
+ STRH_32_IMM2 = 5, |
+ STRH_32_IMM3 = 1, |
+ STRH_32_REG = 1, |
+ STR_32_IMM2 = 6, |
+ STR_32_IMM3 = 2, |
+ STR_32_REG = 2 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode11 { |
+ AND_32_REG2 = 0, |
+ TST_32_REG2 = 0, |
+ BIC_32_REG2 = 1, |
+ ORR_32_REG2 = 2, |
+ MOV_32_REG3 = 2, |
+ MVN_32_REG2 = 3, |
+ ORN_32_REG = 3, |
+ EOR_32_REG2 = 4, |
+ TEQ_32_REG = 4, |
+ ADD_32_REG3 = 8, |
+ CMN_32_REG2 = 8, |
+ ADC_32_REG2 = 10, |
+ SBC_32_REG2 = 11, |
+ SUB_32_REG2 = 13, |
+ CMP_32_REG3 = 13, |
+ RSB_32_REG = 14 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode12 { |
+ LSL_32_REG = 0, |
+ LSR_32_REG = 2, |
+ ASR_32_REG = 4, |
+ ROR_32_REG = 6, |
+ SXTAH_32_REG = 0, |
+ SXTH_32_REG = 0, |
+ UXTAH_32_REG = 1, |
+ UXTH_32_REG = 1, |
+ SXTAB16_32_REG = 2, |
+ SXTB16_32_REG = 2, |
+ UXTAB16_32_REG = 3, |
+ UXTB16_32_REG = 3, |
+ SXTAB_32_REG = 4, |
+ SXTB_32_REG = 4, |
+ UXTAB_32_REG = 5, |
+ UXTB_32_REG = 5 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode16 { |
+ MLA_32 = 0, |
+ MUL_32 = 0, |
+ MLS_32 = 1 |
+}; |
+ |
+ |
+enum ThumbOpcode32Mode17 { |
+ SMULL_32 = 0, |
+ SDIV_32 = 1, |
+ UMULL_32 = 2, |
+ SMLAL_32 = 4, |
+ UMLAL_32 = 6 |
+}; |
+ |
+ |
// The bits for bit 7-4 for some type 0 miscellaneous instructions. |
enum MiscInstructionsBits74 { |
// With bits 22-21 01. |
@@ -307,6 +460,23 @@ enum { |
B27 = 1 << 27, |
B28 = 1 << 28, |
+ BH0 = 1 << 16, |
+ BH1 = 1 << 17, |
+ BH2 = 1 << 18, |
+ BH3 = 1 << 19, |
+ BH4 = 1 << 20, |
+ BH5 = 1 << 21, |
+ BH6 = 1 << 22, |
+ BH7 = 1 << 23, |
+ BH8 = 1 << 24, |
+ BH9 = 1 << 25, |
+ BH10 = 1 << 26, |
+ BH11 = 1 << 27, |
+ BH12 = 1 << 28, |
+ BH13 = 1 << 29, |
+ BH14 = 1 << 30, |
+ BH15 = 1 << 31, |
+ |
// Instruction bit masks. |
kCondMask = 15 << 28, |
kALUMask = 0x6f << 21, |