diff options
Diffstat (limited to 'src/core/arm')
-rw-r--r-- | src/core/arm/dyncom/arm_dyncom_interpreter.cpp | 407 | ||||
-rw-r--r-- | src/core/arm/skyeye_common/vfp/vfpinstr.cpp | 128 |
2 files changed, 260 insertions, 275 deletions
diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp index b79fd1719..034f4d570 100644 --- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp +++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp @@ -13,6 +13,7 @@ #include "core/memory.h" #include "core/hle/svc.h" #include "core/arm/disassembler/arm_disasm.h" +#include "core/arm/dyncom/arm_dyncom_dec.h" #include "core/arm/dyncom/arm_dyncom_interpreter.h" #include "core/arm/dyncom/arm_dyncom_thumb.h" #include "core/arm/dyncom/arm_dyncom_run.h" @@ -68,6 +69,67 @@ static void remove_exclusive(ARMul_State* state, ARMword addr){ state->exclusive_tag = 0xFFFFFFFF; } +static int CondPassed(ARMul_State* cpu, unsigned int cond) { + const u32 NFLAG = cpu->NFlag; + const u32 ZFLAG = cpu->ZFlag; + const u32 CFLAG = cpu->CFlag; + const u32 VFLAG = cpu->VFlag; + + int temp = 0; + + switch (cond) { + case 0x0: + temp = ZFLAG; + break; + case 0x1: // NE + temp = !ZFLAG; + break; + case 0x2: // CS + temp = CFLAG; + break; + case 0x3: // CC + temp = !CFLAG; + break; + case 0x4: // MI + temp = NFLAG; + break; + case 0x5: // PL + temp = !NFLAG; + break; + case 0x6: // VS + temp = VFLAG; + break; + case 0x7: // VC + temp = !VFLAG; + break; + case 0x8: // HI + temp = (CFLAG && !ZFLAG); + break; + case 0x9: // LS + temp = (!CFLAG || ZFLAG); + break; + case 0xa: // GE + temp = ((!NFLAG && !VFLAG) || (NFLAG && VFLAG)); + break; + case 0xb: // LT + temp = ((NFLAG && !VFLAG) || (!NFLAG && VFLAG)); + break; + case 0xc: // GT + temp = ((!NFLAG && !VFLAG && !ZFLAG) || (NFLAG && VFLAG && !ZFLAG)); + break; + case 0xd: // LE + temp = ((NFLAG && !VFLAG) || (!NFLAG && VFLAG)) || ZFLAG; + break; + case 0xe: // AL + temp = 1; + break; + case 0xf: + temp = 1; + break; + } + return temp; +} + static unsigned int DPO(Immediate)(ARMul_State* cpu, unsigned int sht_oper) { unsigned int immed_8 = BITS(sht_oper, 0, 7); unsigned int rotate_imm = BITS(sht_oper, 8, 11); @@ -224,14 +286,12 @@ static unsigned int DPO(RotateRightByRegister)(ARMul_State* cpu, unsigned int sh typedef void (*get_addr_fp_t)(ARMul_State *cpu, unsigned int inst, unsigned int &virt_addr, unsigned int rw); -typedef struct _ldst_inst { +struct ldst_inst { unsigned int inst; get_addr_fp_t get_addr; -} ldst_inst; +}; #define DEBUG_MSG LOG_DEBUG(Core_ARM11, "inst is %x", inst); CITRA_IGNORE_EXIT(0) -int CondPassed(ARMul_State* cpu, unsigned int cond); - #define LnSWoUB(s) glue(LnSWoUB, s) #define MLnS(s) glue(MLnS, s) #define LdnStM(s) glue(LdnStM, s) @@ -647,255 +707,248 @@ static void LnSWoUB(ScaledRegisterOffset)(ARMul_State* cpu, unsigned int inst, u virt_addr = addr; } -typedef struct _arm_inst { +struct arm_inst { unsigned int idx; unsigned int cond; int br; int load_r15; char component[0]; -} arm_inst; +}; -typedef struct generic_arm_inst { +struct generic_arm_inst { u32 Ra; u32 Rm; u32 Rn; u32 Rd; u8 op1; u8 op2; -} generic_arm_inst; +}; -typedef struct _adc_inst { +struct adc_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} adc_inst; +}; -typedef struct _add_inst { +struct add_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} add_inst; +}; -typedef struct _orr_inst { +struct orr_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} orr_inst; +}; -typedef struct _and_inst { +struct and_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} and_inst; +}; -typedef struct _eor_inst { +struct eor_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} eor_inst; +}; -typedef struct _bbl_inst { +struct bbl_inst { unsigned int L; int signed_immed_24; unsigned int next_addr; unsigned int jmp_addr; -} bbl_inst; +}; -typedef struct _bx_inst { +struct bx_inst { unsigned int Rm; -} bx_inst; +}; -typedef struct _blx_inst { +struct blx_inst { union { int32_t signed_immed_24; uint32_t Rm; } val; unsigned int inst; -} blx_inst; +}; -typedef struct _clz_inst { +struct clz_inst { unsigned int Rm; unsigned int Rd; -} clz_inst; +}; -typedef struct _cps_inst { +struct cps_inst { unsigned int imod0; unsigned int imod1; unsigned int mmod; unsigned int A, I, F; unsigned int mode; -} cps_inst; +}; -typedef struct _clrex_inst { -} clrex_inst; +struct clrex_inst { +}; -typedef struct _cpy_inst { +struct cpy_inst { unsigned int Rm; unsigned int Rd; -} cpy_inst; +}; -typedef struct _bic_inst { +struct bic_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} bic_inst; +}; -typedef struct _sub_inst { +struct sub_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} sub_inst; +}; -typedef struct _tst_inst { +struct tst_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} tst_inst; +}; -typedef struct _cmn_inst { +struct cmn_inst { unsigned int I; unsigned int Rn; unsigned int shifter_operand; shtop_fp_t shtop_func; -} cmn_inst; +}; -typedef struct _teq_inst { +struct teq_inst { unsigned int I; unsigned int Rn; unsigned int shifter_operand; shtop_fp_t shtop_func; -} teq_inst; +}; -typedef struct _stm_inst { +struct stm_inst { unsigned int inst; -} stm_inst; +}; struct bkpt_inst { u32 imm; }; -struct blx1_inst { - unsigned int addr; +struct stc_inst { }; -struct blx2_inst { - unsigned int Rm; +struct ldc_inst { }; -typedef struct _stc_inst { -} stc_inst; - -typedef struct _ldc_inst { -} ldc_inst; - -typedef struct _swi_inst { +struct swi_inst { unsigned int num; -} swi_inst; +}; -typedef struct _cmp_inst { +struct cmp_inst { unsigned int I; unsigned int Rn; unsigned int shifter_operand; shtop_fp_t shtop_func; -} cmp_inst; +}; -typedef struct _mov_inst { +struct mov_inst { unsigned int I; unsigned int S; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} mov_inst; +}; -typedef struct _mvn_inst { +struct mvn_inst { unsigned int I; unsigned int S; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} mvn_inst; +}; -typedef struct _rev_inst { +struct rev_inst { unsigned int Rd; unsigned int Rm; unsigned int op1; unsigned int op2; -} rev_inst; +}; -typedef struct _rsb_inst { +struct rsb_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} rsb_inst; +}; -typedef struct _rsc_inst { +struct rsc_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} rsc_inst; +}; -typedef struct _sbc_inst { +struct sbc_inst { unsigned int I; unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int shifter_operand; shtop_fp_t shtop_func; -} sbc_inst; +}; -typedef struct _mul_inst { +struct mul_inst { unsigned int S; unsigned int Rd; unsigned int Rs; unsigned int Rm; -} mul_inst; +}; -typedef struct _smul_inst { +struct smul_inst { unsigned int Rd; unsigned int Rs; unsigned int Rm; unsigned int x; unsigned int y; -} smul_inst; +}; -typedef struct _umull_inst { +struct umull_inst { unsigned int S; unsigned int RdHi; unsigned int RdLo; unsigned int Rs; unsigned int Rm; -} umull_inst; -typedef struct _smlad_inst { +}; + +struct smlad_inst { unsigned int m; unsigned int Rm; unsigned int Rd; @@ -903,58 +956,58 @@ typedef struct _smlad_inst { unsigned int Rn; unsigned int op1; unsigned int op2; -} smlad_inst; +}; -typedef struct _smla_inst { +struct smla_inst { unsigned int x; unsigned int y; unsigned int Rm; unsigned int Rd; unsigned int Rs; unsigned int Rn; -} smla_inst; +}; -typedef struct smlalxy_inst { +struct smlalxy_inst { unsigned int x; unsigned int y; unsigned int RdLo; unsigned int RdHi; unsigned int Rm; unsigned int Rn; -} smlalxy_inst; +}; -typedef struct ssat_inst { +struct ssat_inst { unsigned int Rn; unsigned int Rd; unsigned int imm5; unsigned int sat_imm; unsigned int shift_type; -} ssat_inst; +}; -typedef struct umaal_inst { +struct umaal_inst { unsigned int Rn; unsigned int Rm; unsigned int RdHi; unsigned int RdLo; -} umaal_inst; +}; -typedef struct _umlal_inst { +struct umlal_inst { unsigned int S; unsigned int Rm; unsigned int Rs; unsigned int RdHi; unsigned int RdLo; -} umlal_inst; +}; -typedef struct _smlal_inst { +struct smlal_inst { unsigned int S; unsigned int Rm; unsigned int Rs; unsigned int RdHi; unsigned int RdLo; -} smlal_inst; +}; -typedef struct smlald_inst { +struct smlald_inst { unsigned int RdLo; unsigned int RdHi; unsigned int Rm; @@ -962,17 +1015,17 @@ typedef struct smlald_inst { unsigned int swap; unsigned int op1; unsigned int op2; -} smlald_inst; +}; -typedef struct _mla_inst { +struct mla_inst { unsigned int S; unsigned int Rn; unsigned int Rd; unsigned int Rs; unsigned int Rm; -} mla_inst; +}; -typedef struct _mrc_inst { +struct mrc_inst { unsigned int opcode_1; unsigned int opcode_2; unsigned int cp_num; @@ -980,9 +1033,9 @@ typedef struct _mrc_inst { unsigned int crm; unsigned int Rd; unsigned int inst; -} mrc_inst; +}; -typedef struct _mcr_inst { +struct mcr_inst { unsigned int opcode_1; unsigned int opcode_2; unsigned int cp_num; @@ -990,77 +1043,77 @@ typedef struct _mcr_inst { unsigned int crm; unsigned int Rd; unsigned int inst; -} mcr_inst; +}; -typedef struct mcrr_inst { +struct mcrr_inst { unsigned int opcode_1; unsigned int cp_num; unsigned int crm; unsigned int rt; unsigned int rt2; -} mcrr_inst; +}; -typedef struct _mrs_inst { +struct mrs_inst { unsigned int R; unsigned int Rd; -} mrs_inst; +}; -typedef struct _msr_inst { +struct msr_inst { unsigned int field_mask; unsigned int R; unsigned int inst; -} msr_inst; +}; -typedef struct _pld_inst { -} pld_inst; +struct pld_inst { +}; -typedef struct _sxtb_inst { +struct sxtb_inst { unsigned int Rd; unsigned int Rm; unsigned int rotate; -} sxtb_inst; +}; -typedef struct _sxtab_inst { +struct sxtab_inst { unsigned int Rd; unsigned int Rn; unsigned int Rm; unsigned rotate; -} sxtab_inst; +}; -typedef struct _sxtah_inst { +struct sxtah_inst { unsigned int Rd; unsigned int Rn; unsigned int Rm; unsigned int rotate; -} sxtah_inst; +}; -typedef struct _sxth_inst { +struct sxth_inst { unsigned int Rd; unsigned int Rm; unsigned int rotate; -} sxth_inst; +}; -typedef struct _uxtab_inst { +struct uxtab_inst { unsigned int Rn; unsigned int Rd; unsigned int rotate; unsigned int Rm; -} uxtab_inst; +}; -typedef struct _uxtah_inst { +struct uxtah_inst { unsigned int Rn; unsigned int Rd; unsigned int rotate; unsigned int Rm; -} uxtah_inst; +}; -typedef struct _uxth_inst { +struct uxth_inst { unsigned int Rd; unsigned int Rm; unsigned int rotate; -} uxth_inst; +}; -typedef struct _cdp_inst { +struct cdp_inst { unsigned int opcode_1; unsigned int CRn; unsigned int CRd; @@ -1068,56 +1121,56 @@ typedef struct _cdp_inst { unsigned int opcode_2; unsigned int CRm; unsigned int inst; -}cdp_inst; +}; -typedef struct _uxtb_inst { +struct uxtb_inst { unsigned int Rd; unsigned int Rm; unsigned int rotate; -} uxtb_inst; +}; -typedef struct _swp_inst { +struct swp_inst { unsigned int Rn; unsigned int Rd; unsigned int Rm; -} swp_inst; +}; -typedef struct setend_inst { +struct setend_inst { unsigned int set_bigend; -} setend_inst; +}; -typedef struct _b_2_thumb { +struct b_2_thumb { unsigned int imm; -}b_2_thumb; -typedef struct _b_cond_thumb { +}; +struct b_cond_thumb { unsigned int imm; unsigned int cond; -}b_cond_thumb; +}; -typedef struct _bl_1_thumb { +struct bl_1_thumb { unsigned int imm; -}bl_1_thumb; -typedef struct _bl_2_thumb { +}; +struct bl_2_thumb { unsigned int imm; -}bl_2_thumb; -typedef struct _blx_1_thumb { +}; +struct blx_1_thumb { unsigned int imm; unsigned int instr; -}blx_1_thumb; +}; -typedef struct _pkh_inst { +struct pkh_inst { unsigned int Rm; unsigned int Rn; unsigned int Rd; unsigned char imm; -} pkh_inst; +}; typedef arm_inst * ARM_INST_PTR; #define CACHE_BUFFER_SIZE (64 * 1024 * 2000) -char inst_buf[CACHE_BUFFER_SIZE]; -int top = 0; -inline void *AllocBuffer(unsigned int size) { +static char inst_buf[CACHE_BUFFER_SIZE]; +static int top = 0; +static inline void *AllocBuffer(unsigned int size) { int start = top; top += size; if (top > CACHE_BUFFER_SIZE) { @@ -1127,74 +1180,6 @@ inline void *AllocBuffer(unsigned int size) { return (void *)&inst_buf[start]; } -int CondPassed(ARMul_State* cpu, unsigned int cond) { - #define NFLAG cpu->NFlag - #define ZFLAG cpu->ZFlag - #define CFLAG cpu->CFlag - #define VFLAG cpu->VFlag - - int temp = 0; - - switch (cond) { - case 0x0: - temp = ZFLAG; - break; - case 0x1: // NE - temp = !ZFLAG; - break; - case 0x6: // VS - temp = VFLAG; - break; - case 0x7: // VC - temp = !VFLAG; - break; - case 0x4: // MI - temp = NFLAG; - break; - case 0x5: // PL - temp = !NFLAG; - break; - case 0x2: // CS - temp = CFLAG; - break; - case 0x3: // CC - temp = !CFLAG; - break; - case 0x8: // HI - temp = (CFLAG && !ZFLAG); - break; - case 0x9: // LS - temp = (!CFLAG || ZFLAG); - break; - case 0xa: // GE - temp = ((!NFLAG && !VFLAG) || (NFLAG && VFLAG)); - break; - case 0xb: // LT - temp = ((NFLAG && !VFLAG) || (!NFLAG && VFLAG)); - break; - case 0xc: // GT - temp = ((!NFLAG && !VFLAG && !ZFLAG) || (NFLAG && VFLAG && !ZFLAG)); - break; - case 0xd: // LE - temp = ((NFLAG && !VFLAG) || (!NFLAG && VFLAG)) || ZFLAG; - break; - case 0xe: // AL - temp = 1; - break; - case 0xf: - temp = 1; - break; - } - return temp; -} - -enum DECODE_STATUS { - DECODE_SUCCESS, - DECODE_FAILURE -}; - -int decode_arm_instr(uint32_t instr, int32_t *idx); - static shtop_fp_t get_shtop(unsigned int inst) { if (BIT(inst, 25)) { return DPO(Immediate); diff --git a/src/core/arm/skyeye_common/vfp/vfpinstr.cpp b/src/core/arm/skyeye_common/vfp/vfpinstr.cpp index 72afe2164..a04bf915c 100644 --- a/src/core/arm/skyeye_common/vfp/vfpinstr.cpp +++ b/src/core/arm/skyeye_common/vfp/vfpinstr.cpp @@ -13,10 +13,10 @@ /* VMLA */ /* cond 1110 0D00 Vn-- Vd-- 101X N0M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmla_inst { +struct vmla_inst { unsigned int instr; unsigned int dp_operation; -} vmla_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmla)(unsigned int inst, int index) @@ -63,10 +63,10 @@ VMLA_INST: /* VNMLS */ /* cond 1110 0D00 Vn-- Vd-- 101X N1M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmls_inst { +struct vmls_inst { unsigned int instr; unsigned int dp_operation; -} vmls_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmls)(unsigned int inst, int index) @@ -113,10 +113,10 @@ VMLS_INST: /* VNMLA */ /* cond 1110 0D01 Vn-- Vd-- 101X N1M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vnmla_inst { +struct vnmla_inst { unsigned int instr; unsigned int dp_operation; -} vnmla_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmla)(unsigned int inst, int index) @@ -164,10 +164,10 @@ VNMLA_INST: /* cond 1110 0D01 Vn-- Vd-- 101X N0M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vnmls_inst { +struct vnmls_inst { unsigned int instr; unsigned int dp_operation; -} vnmls_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmls)(unsigned int inst, int index) @@ -214,10 +214,10 @@ VNMLS_INST: /* VNMUL */ /* cond 1110 0D10 Vn-- Vd-- 101X N0M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vnmul_inst { +struct vnmul_inst { unsigned int instr; unsigned int dp_operation; -} vnmul_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmul)(unsigned int inst, int index) @@ -264,10 +264,10 @@ VNMUL_INST: /* VMUL */ /* cond 1110 0D10 Vn-- Vd-- 101X N0M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmul_inst { +struct vmul_inst { unsigned int instr; unsigned int dp_operation; -} vmul_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmul)(unsigned int inst, int index) @@ -314,10 +314,10 @@ VMUL_INST: /* VADD */ /* cond 1110 0D11 Vn-- Vd-- 101X N0M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vadd_inst { +struct vadd_inst { unsigned int instr; unsigned int dp_operation; -} vadd_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vadd)(unsigned int inst, int index) @@ -364,10 +364,10 @@ VADD_INST: /* VSUB */ /* cond 1110 0D11 Vn-- Vd-- 101X N1M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vsub_inst { +struct vsub_inst { unsigned int instr; unsigned int dp_operation; -} vsub_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vsub)(unsigned int inst, int index) @@ -414,10 +414,10 @@ VSUB_INST: /* VDIV */ /* cond 1110 1D00 Vn-- Vd-- 101X N0M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vdiv_inst { +struct vdiv_inst { unsigned int instr; unsigned int dp_operation; -} vdiv_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vdiv)(unsigned int inst, int index) @@ -465,11 +465,11 @@ VDIV_INST: /* cond 1110 1D11 im4H Vd-- 101X 0000 im4L */ /* cond 1110 opc1 CRn- CRd- copr op20 CRm- CDP */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovi_inst { +struct vmovi_inst { unsigned int single; unsigned int d; unsigned int imm; -} vmovi_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovi)(unsigned int inst, int index) @@ -514,11 +514,11 @@ VMOVI_INST: /* cond 1110 1D11 0000 Vd-- 101X 01M0 Vm-- */ /* cond 1110 opc1 CRn- CRd- copr op20 CRm- CDP */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovr_inst { +struct vmovr_inst { unsigned int single; unsigned int d; unsigned int m; -} vmovr_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovr)(unsigned int inst, int index) @@ -609,10 +609,10 @@ VABS_INST: /* cond 1110 1D11 0001 Vd-- 101X 11M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vneg_inst { +struct vneg_inst { unsigned int instr; unsigned int dp_operation; -} vneg_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vneg)(unsigned int inst, int index) @@ -659,10 +659,10 @@ VNEG_INST: /* VSQRT */ /* cond 1110 1D11 0001 Vd-- 101X 11M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vsqrt_inst { +struct vsqrt_inst { unsigned int instr; unsigned int dp_operation; -} vsqrt_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vsqrt)(unsigned int inst, int index) @@ -709,10 +709,10 @@ VSQRT_INST: /* VCMP VCMPE */ /* cond 1110 1D11 0100 Vd-- 101X E1M0 Vm-- Encoding 1 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vcmp_inst { +struct vcmp_inst { unsigned int instr; unsigned int dp_operation; -} vcmp_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vcmp)(unsigned int inst, int index) @@ -759,10 +759,10 @@ VCMP_INST: /* VCMP VCMPE */ /* cond 1110 1D11 0100 Vd-- 101X E1M0 Vm-- Encoding 2 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vcmp2_inst { +struct vcmp2_inst { unsigned int instr; unsigned int dp_operation; -} vcmp2_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vcmp2)(unsigned int inst, int index) @@ -809,10 +809,10 @@ VCMP2_INST: /* VCVTBDS between double and single */ /* cond 1110 1D11 0111 Vd-- 101X 11M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vcvtbds_inst { +struct vcvtbds_inst { unsigned int instr; unsigned int dp_operation; -} vcvtbds_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbds)(unsigned int inst, int index) @@ -859,10 +859,10 @@ VCVTBDS_INST: /* VCVTBFF between floating point and fixed point */ /* cond 1110 1D11 1op2 Vd-- 101X X1M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vcvtbff_inst { +struct vcvtbff_inst { unsigned int instr; unsigned int dp_operation; -} vcvtbff_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbff)(unsigned int inst, int index) @@ -911,10 +911,10 @@ VCVTBFF_INST: /* VCVTBFI between floating point and integer */ /* cond 1110 1D11 1op2 Vd-- 101X X1M0 Vm-- */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vcvtbfi_inst { +struct vcvtbfi_inst { unsigned int instr; unsigned int dp_operation; -} vcvtbfi_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbfi)(unsigned int inst, int index) @@ -967,11 +967,11 @@ VCVTBFI_INST: /* cond 1110 000o Vn-- Rt-- 1010 N001 0000 */ /* cond 1110 op11 CRn- Rt-- copr op21 CRm- MRC */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovbrs_inst { +struct vmovbrs_inst { unsigned int to_arm; unsigned int t; unsigned int n; -} vmovbrs_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrs)(unsigned int inst, int index) @@ -1013,10 +1013,10 @@ VMOVBRS_INST: /* cond 1110 1110 reg- Rt-- 1010 0001 0000 */ /* cond 1110 op10 CRn- Rt-- copr op21 CRm- MCR */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmsr_inst { +struct vmsr_inst { unsigned int reg; unsigned int Rd; -} vmsr_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmsr)(unsigned int inst, int index) @@ -1040,7 +1040,7 @@ VMSR_INST: { if ((inst_base->cond == 0xe) || CondPassed(cpu, inst_base->cond)) { /* FIXME: special case for access to FPSID and FPEXC, VFP must be disabled , - and in privilegied mode */ + and in privileged mode */ /* Exceptions must be checked, according to v7 ref manual */ CHECK_VFP_ENABLED; @@ -1060,12 +1060,12 @@ VMSR_INST: /* cond 1110 0XX0 Vd-- Rt-- 1011 DXX1 0000 */ /* cond 1110 op10 CRn- Rt-- copr op21 CRm- MCR */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovbrc_inst { +struct vmovbrc_inst { unsigned int esize; unsigned int index; unsigned int d; unsigned int t; -} vmovbrc_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrc)(unsigned int inst, int index) @@ -1109,10 +1109,10 @@ VMOVBRC_INST: /* cond 1110 1111 CRn- Rt-- 1010 0001 0000 */ /* cond 1110 op11 CRn- Rt-- copr op21 CRm- MRC */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmrs_inst { +struct vmrs_inst { unsigned int reg; unsigned int Rt; -} vmrs_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmrs)(unsigned int inst, int index) @@ -1136,7 +1136,7 @@ VMRS_INST: { if ((inst_base->cond == 0xe) || CondPassed(cpu, inst_base->cond)) { /* FIXME: special case for access to FPSID and FPEXC, VFP must be disabled, - and in privilegied mode */ + and in privileged mode */ /* Exceptions must be checked, according to v7 ref manual */ CHECK_VFP_ENABLED; @@ -1191,12 +1191,12 @@ VMRS_INST: /* cond 1110 XXX1 Vd-- Rt-- 1011 NXX1 0000 */ /* cond 1110 op11 CRn- Rt-- copr op21 CRm- MCR */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovbcr_inst { +struct vmovbcr_inst { unsigned int esize; unsigned int index; unsigned int d; unsigned int t; -} vmovbcr_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbcr)(unsigned int inst, int index) @@ -1245,12 +1245,12 @@ VMOVBCR_INST: /* cond 1100 010X Rt2- Rt-- 1010 00X1 Vm-- */ /* cond 1100 0101 Rt2- Rt-- copr opc1 CRm- MRRC */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovbrrss_inst { +struct vmovbrrss_inst { unsigned int to_arm; unsigned int t; unsigned int t2; unsigned int m; -} vmovbrrss_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrrss)(unsigned int inst, int index) @@ -1294,12 +1294,12 @@ VMOVBRRSS_INST: /* cond 1100 010X Rt2- Rt-- 1011 00X1 Vm-- */ /* cond 1100 0101 Rt2- Rt-- copr opc1 CRm- MRRC */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vmovbrrd_inst { +struct vmovbrrd_inst { unsigned int to_arm; unsigned int t; unsigned int t2; unsigned int m; -} vmovbrrd_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrrd)(unsigned int inst, int index) @@ -1347,13 +1347,13 @@ VMOVBRRD_INST: /* VSTR */ /* cond 1101 UD00 Rn-- Vd-- 101X imm8 imm8 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vstr_inst { +struct vstr_inst { unsigned int single; unsigned int n; unsigned int d; unsigned int imm32; unsigned int add; -} vstr_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vstr)(unsigned int inst, int index) @@ -1415,12 +1415,12 @@ VSTR_INST: /* VPUSH */ /* cond 1101 0D10 1101 Vd-- 101X imm8 imm8 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vpush_inst { +struct vpush_inst { unsigned int single; unsigned int d; unsigned int imm32; unsigned int regs; -} vpush_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vpush)(unsigned int inst, int index) @@ -1488,7 +1488,7 @@ VPUSH_INST: /* VSTM */ /* cond 110P UDW0 Rn-- Vd-- 101X imm8 imm8 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vstm_inst { +struct vstm_inst { unsigned int single; unsigned int add; unsigned int wback; @@ -1496,7 +1496,7 @@ typedef struct _vstm_inst { unsigned int n; unsigned int imm32; unsigned int regs; -} vstm_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vstm)(unsigned int inst, int index) @@ -1570,12 +1570,12 @@ VSTM_INST: /* encoding 1 */ /* VPOP */ /* cond 1100 1D11 1101 Vd-- 101X imm8 imm8 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vpop_inst { +struct vpop_inst { unsigned int single; unsigned int d; unsigned int imm32; unsigned int regs; -} vpop_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vpop)(unsigned int inst, int index) @@ -1643,13 +1643,13 @@ VPOP_INST: /* VLDR */ /* cond 1101 UD01 Rn-- Vd-- 101X imm8 imm8 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vldr_inst { +struct vldr_inst { unsigned int single; unsigned int n; unsigned int d; unsigned int imm32; unsigned int add; -} vldr_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vldr)(unsigned int inst, int index) @@ -1711,7 +1711,7 @@ VLDR_INST: /* VLDM */ /* cond 110P UDW1 Rn-- Vd-- 101X imm8 imm8 */ #ifdef VFP_INTERPRETER_STRUCT -typedef struct _vldm_inst { +struct vldm_inst { unsigned int single; unsigned int add; unsigned int wback; @@ -1719,7 +1719,7 @@ typedef struct _vldm_inst { unsigned int n; unsigned int imm32; unsigned int regs; -} vldm_inst; +}; #endif #ifdef VFP_INTERPRETER_TRANS static ARM_INST_PTR INTERPRETER_TRANSLATE(vldm)(unsigned int inst, int index) |