mirror of
https://github.com/Lime3DS/Lime3DS.git
synced 2024-12-25 01:11:48 +01:00
Merge pull request #770 from lioncash/dyncom_clean
dyncom: Minor cleanup.
This commit is contained in:
commit
6abed88092
@ -13,6 +13,7 @@
|
|||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
#include "core/hle/svc.h"
|
#include "core/hle/svc.h"
|
||||||
#include "core/arm/disassembler/arm_disasm.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_interpreter.h"
|
||||||
#include "core/arm/dyncom/arm_dyncom_thumb.h"
|
#include "core/arm/dyncom/arm_dyncom_thumb.h"
|
||||||
#include "core/arm/dyncom/arm_dyncom_run.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;
|
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) {
|
static unsigned int DPO(Immediate)(ARMul_State* cpu, unsigned int sht_oper) {
|
||||||
unsigned int immed_8 = BITS(sht_oper, 0, 7);
|
unsigned int immed_8 = BITS(sht_oper, 0, 7);
|
||||||
unsigned int rotate_imm = BITS(sht_oper, 8, 11);
|
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 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;
|
unsigned int inst;
|
||||||
get_addr_fp_t get_addr;
|
get_addr_fp_t get_addr;
|
||||||
} ldst_inst;
|
};
|
||||||
#define DEBUG_MSG LOG_DEBUG(Core_ARM11, "inst is %x", inst); CITRA_IGNORE_EXIT(0)
|
#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 LnSWoUB(s) glue(LnSWoUB, s)
|
||||||
#define MLnS(s) glue(MLnS, s)
|
#define MLnS(s) glue(MLnS, s)
|
||||||
#define LdnStM(s) glue(LdnStM, 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;
|
virt_addr = addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct _arm_inst {
|
struct arm_inst {
|
||||||
unsigned int idx;
|
unsigned int idx;
|
||||||
unsigned int cond;
|
unsigned int cond;
|
||||||
int br;
|
int br;
|
||||||
int load_r15;
|
int load_r15;
|
||||||
char component[0];
|
char component[0];
|
||||||
} arm_inst;
|
};
|
||||||
|
|
||||||
typedef struct generic_arm_inst {
|
struct generic_arm_inst {
|
||||||
u32 Ra;
|
u32 Ra;
|
||||||
u32 Rm;
|
u32 Rm;
|
||||||
u32 Rn;
|
u32 Rn;
|
||||||
u32 Rd;
|
u32 Rd;
|
||||||
u8 op1;
|
u8 op1;
|
||||||
u8 op2;
|
u8 op2;
|
||||||
} generic_arm_inst;
|
};
|
||||||
|
|
||||||
typedef struct _adc_inst {
|
struct adc_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} adc_inst;
|
};
|
||||||
|
|
||||||
typedef struct _add_inst {
|
struct add_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} add_inst;
|
};
|
||||||
|
|
||||||
typedef struct _orr_inst {
|
struct orr_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} orr_inst;
|
};
|
||||||
|
|
||||||
typedef struct _and_inst {
|
struct and_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} and_inst;
|
};
|
||||||
|
|
||||||
typedef struct _eor_inst {
|
struct eor_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} eor_inst;
|
};
|
||||||
|
|
||||||
typedef struct _bbl_inst {
|
struct bbl_inst {
|
||||||
unsigned int L;
|
unsigned int L;
|
||||||
int signed_immed_24;
|
int signed_immed_24;
|
||||||
unsigned int next_addr;
|
unsigned int next_addr;
|
||||||
unsigned int jmp_addr;
|
unsigned int jmp_addr;
|
||||||
} bbl_inst;
|
};
|
||||||
|
|
||||||
typedef struct _bx_inst {
|
struct bx_inst {
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} bx_inst;
|
};
|
||||||
|
|
||||||
typedef struct _blx_inst {
|
struct blx_inst {
|
||||||
union {
|
union {
|
||||||
int32_t signed_immed_24;
|
int32_t signed_immed_24;
|
||||||
uint32_t Rm;
|
uint32_t Rm;
|
||||||
} val;
|
} val;
|
||||||
unsigned int inst;
|
unsigned int inst;
|
||||||
} blx_inst;
|
};
|
||||||
|
|
||||||
typedef struct _clz_inst {
|
struct clz_inst {
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
} clz_inst;
|
};
|
||||||
|
|
||||||
typedef struct _cps_inst {
|
struct cps_inst {
|
||||||
unsigned int imod0;
|
unsigned int imod0;
|
||||||
unsigned int imod1;
|
unsigned int imod1;
|
||||||
unsigned int mmod;
|
unsigned int mmod;
|
||||||
unsigned int A, I, F;
|
unsigned int A, I, F;
|
||||||
unsigned int mode;
|
unsigned int mode;
|
||||||
} cps_inst;
|
};
|
||||||
|
|
||||||
typedef struct _clrex_inst {
|
struct clrex_inst {
|
||||||
} clrex_inst;
|
};
|
||||||
|
|
||||||
typedef struct _cpy_inst {
|
struct cpy_inst {
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
} cpy_inst;
|
};
|
||||||
|
|
||||||
typedef struct _bic_inst {
|
struct bic_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} bic_inst;
|
};
|
||||||
|
|
||||||
typedef struct _sub_inst {
|
struct sub_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} sub_inst;
|
};
|
||||||
|
|
||||||
typedef struct _tst_inst {
|
struct tst_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} tst_inst;
|
};
|
||||||
|
|
||||||
typedef struct _cmn_inst {
|
struct cmn_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} cmn_inst;
|
};
|
||||||
|
|
||||||
typedef struct _teq_inst {
|
struct teq_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} teq_inst;
|
};
|
||||||
|
|
||||||
typedef struct _stm_inst {
|
struct stm_inst {
|
||||||
unsigned int inst;
|
unsigned int inst;
|
||||||
} stm_inst;
|
};
|
||||||
|
|
||||||
struct bkpt_inst {
|
struct bkpt_inst {
|
||||||
u32 imm;
|
u32 imm;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct blx1_inst {
|
struct stc_inst {
|
||||||
unsigned int addr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct blx2_inst {
|
struct ldc_inst {
|
||||||
unsigned int Rm;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct _stc_inst {
|
struct swi_inst {
|
||||||
} stc_inst;
|
|
||||||
|
|
||||||
typedef struct _ldc_inst {
|
|
||||||
} ldc_inst;
|
|
||||||
|
|
||||||
typedef struct _swi_inst {
|
|
||||||
unsigned int num;
|
unsigned int num;
|
||||||
} swi_inst;
|
};
|
||||||
|
|
||||||
typedef struct _cmp_inst {
|
struct cmp_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} cmp_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mov_inst {
|
struct mov_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} mov_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mvn_inst {
|
struct mvn_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} mvn_inst;
|
};
|
||||||
|
|
||||||
typedef struct _rev_inst {
|
struct rev_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int op1;
|
unsigned int op1;
|
||||||
unsigned int op2;
|
unsigned int op2;
|
||||||
} rev_inst;
|
};
|
||||||
|
|
||||||
typedef struct _rsb_inst {
|
struct rsb_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} rsb_inst;
|
};
|
||||||
|
|
||||||
typedef struct _rsc_inst {
|
struct rsc_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} rsc_inst;
|
};
|
||||||
|
|
||||||
typedef struct _sbc_inst {
|
struct sbc_inst {
|
||||||
unsigned int I;
|
unsigned int I;
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int shifter_operand;
|
unsigned int shifter_operand;
|
||||||
shtop_fp_t shtop_func;
|
shtop_fp_t shtop_func;
|
||||||
} sbc_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mul_inst {
|
struct mul_inst {
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} mul_inst;
|
};
|
||||||
|
|
||||||
typedef struct _smul_inst {
|
struct smul_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int x;
|
unsigned int x;
|
||||||
unsigned int y;
|
unsigned int y;
|
||||||
} smul_inst;
|
};
|
||||||
|
|
||||||
typedef struct _umull_inst {
|
struct umull_inst {
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int RdHi;
|
unsigned int RdHi;
|
||||||
unsigned int RdLo;
|
unsigned int RdLo;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} umull_inst;
|
};
|
||||||
typedef struct _smlad_inst {
|
|
||||||
|
struct smlad_inst {
|
||||||
unsigned int m;
|
unsigned int m;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
@ -903,58 +956,58 @@ typedef struct _smlad_inst {
|
|||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int op1;
|
unsigned int op1;
|
||||||
unsigned int op2;
|
unsigned int op2;
|
||||||
} smlad_inst;
|
};
|
||||||
|
|
||||||
typedef struct _smla_inst {
|
struct smla_inst {
|
||||||
unsigned int x;
|
unsigned int x;
|
||||||
unsigned int y;
|
unsigned int y;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
} smla_inst;
|
};
|
||||||
|
|
||||||
typedef struct smlalxy_inst {
|
struct smlalxy_inst {
|
||||||
unsigned int x;
|
unsigned int x;
|
||||||
unsigned int y;
|
unsigned int y;
|
||||||
unsigned int RdLo;
|
unsigned int RdLo;
|
||||||
unsigned int RdHi;
|
unsigned int RdHi;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
} smlalxy_inst;
|
};
|
||||||
|
|
||||||
typedef struct ssat_inst {
|
struct ssat_inst {
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int imm5;
|
unsigned int imm5;
|
||||||
unsigned int sat_imm;
|
unsigned int sat_imm;
|
||||||
unsigned int shift_type;
|
unsigned int shift_type;
|
||||||
} ssat_inst;
|
};
|
||||||
|
|
||||||
typedef struct umaal_inst {
|
struct umaal_inst {
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int RdHi;
|
unsigned int RdHi;
|
||||||
unsigned int RdLo;
|
unsigned int RdLo;
|
||||||
} umaal_inst;
|
};
|
||||||
|
|
||||||
typedef struct _umlal_inst {
|
struct umlal_inst {
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int RdHi;
|
unsigned int RdHi;
|
||||||
unsigned int RdLo;
|
unsigned int RdLo;
|
||||||
} umlal_inst;
|
};
|
||||||
|
|
||||||
typedef struct _smlal_inst {
|
struct smlal_inst {
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int RdHi;
|
unsigned int RdHi;
|
||||||
unsigned int RdLo;
|
unsigned int RdLo;
|
||||||
} smlal_inst;
|
};
|
||||||
|
|
||||||
typedef struct smlald_inst {
|
struct smlald_inst {
|
||||||
unsigned int RdLo;
|
unsigned int RdLo;
|
||||||
unsigned int RdHi;
|
unsigned int RdHi;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
@ -962,17 +1015,17 @@ typedef struct smlald_inst {
|
|||||||
unsigned int swap;
|
unsigned int swap;
|
||||||
unsigned int op1;
|
unsigned int op1;
|
||||||
unsigned int op2;
|
unsigned int op2;
|
||||||
} smlald_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mla_inst {
|
struct mla_inst {
|
||||||
unsigned int S;
|
unsigned int S;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rs;
|
unsigned int Rs;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} mla_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mrc_inst {
|
struct mrc_inst {
|
||||||
unsigned int opcode_1;
|
unsigned int opcode_1;
|
||||||
unsigned int opcode_2;
|
unsigned int opcode_2;
|
||||||
unsigned int cp_num;
|
unsigned int cp_num;
|
||||||
@ -980,9 +1033,9 @@ typedef struct _mrc_inst {
|
|||||||
unsigned int crm;
|
unsigned int crm;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int inst;
|
unsigned int inst;
|
||||||
} mrc_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mcr_inst {
|
struct mcr_inst {
|
||||||
unsigned int opcode_1;
|
unsigned int opcode_1;
|
||||||
unsigned int opcode_2;
|
unsigned int opcode_2;
|
||||||
unsigned int cp_num;
|
unsigned int cp_num;
|
||||||
@ -990,77 +1043,77 @@ typedef struct _mcr_inst {
|
|||||||
unsigned int crm;
|
unsigned int crm;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int inst;
|
unsigned int inst;
|
||||||
} mcr_inst;
|
};
|
||||||
|
|
||||||
typedef struct mcrr_inst {
|
struct mcrr_inst {
|
||||||
unsigned int opcode_1;
|
unsigned int opcode_1;
|
||||||
unsigned int cp_num;
|
unsigned int cp_num;
|
||||||
unsigned int crm;
|
unsigned int crm;
|
||||||
unsigned int rt;
|
unsigned int rt;
|
||||||
unsigned int rt2;
|
unsigned int rt2;
|
||||||
} mcrr_inst;
|
};
|
||||||
|
|
||||||
typedef struct _mrs_inst {
|
struct mrs_inst {
|
||||||
unsigned int R;
|
unsigned int R;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
} mrs_inst;
|
};
|
||||||
|
|
||||||
typedef struct _msr_inst {
|
struct msr_inst {
|
||||||
unsigned int field_mask;
|
unsigned int field_mask;
|
||||||
unsigned int R;
|
unsigned int R;
|
||||||
unsigned int inst;
|
unsigned int inst;
|
||||||
} msr_inst;
|
};
|
||||||
|
|
||||||
typedef struct _pld_inst {
|
struct pld_inst {
|
||||||
} pld_inst;
|
};
|
||||||
|
|
||||||
typedef struct _sxtb_inst {
|
struct sxtb_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
} sxtb_inst;
|
};
|
||||||
|
|
||||||
typedef struct _sxtab_inst {
|
struct sxtab_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned rotate;
|
unsigned rotate;
|
||||||
} sxtab_inst;
|
};
|
||||||
|
|
||||||
typedef struct _sxtah_inst {
|
struct sxtah_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
} sxtah_inst;
|
};
|
||||||
|
|
||||||
typedef struct _sxth_inst {
|
struct sxth_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
} sxth_inst;
|
};
|
||||||
|
|
||||||
typedef struct _uxtab_inst {
|
struct uxtab_inst {
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} uxtab_inst;
|
};
|
||||||
|
|
||||||
typedef struct _uxtah_inst {
|
struct uxtah_inst {
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} uxtah_inst;
|
};
|
||||||
|
|
||||||
typedef struct _uxth_inst {
|
struct uxth_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
} uxth_inst;
|
};
|
||||||
|
|
||||||
typedef struct _cdp_inst {
|
struct cdp_inst {
|
||||||
unsigned int opcode_1;
|
unsigned int opcode_1;
|
||||||
unsigned int CRn;
|
unsigned int CRn;
|
||||||
unsigned int CRd;
|
unsigned int CRd;
|
||||||
@ -1068,56 +1121,56 @@ typedef struct _cdp_inst {
|
|||||||
unsigned int opcode_2;
|
unsigned int opcode_2;
|
||||||
unsigned int CRm;
|
unsigned int CRm;
|
||||||
unsigned int inst;
|
unsigned int inst;
|
||||||
}cdp_inst;
|
};
|
||||||
|
|
||||||
typedef struct _uxtb_inst {
|
struct uxtb_inst {
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int rotate;
|
unsigned int rotate;
|
||||||
} uxtb_inst;
|
};
|
||||||
|
|
||||||
typedef struct _swp_inst {
|
struct swp_inst {
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
} swp_inst;
|
};
|
||||||
|
|
||||||
typedef struct setend_inst {
|
struct setend_inst {
|
||||||
unsigned int set_bigend;
|
unsigned int set_bigend;
|
||||||
} setend_inst;
|
};
|
||||||
|
|
||||||
typedef struct _b_2_thumb {
|
struct b_2_thumb {
|
||||||
unsigned int imm;
|
unsigned int imm;
|
||||||
}b_2_thumb;
|
};
|
||||||
typedef struct _b_cond_thumb {
|
struct b_cond_thumb {
|
||||||
unsigned int imm;
|
unsigned int imm;
|
||||||
unsigned int cond;
|
unsigned int cond;
|
||||||
}b_cond_thumb;
|
};
|
||||||
|
|
||||||
typedef struct _bl_1_thumb {
|
struct bl_1_thumb {
|
||||||
unsigned int imm;
|
unsigned int imm;
|
||||||
}bl_1_thumb;
|
};
|
||||||
typedef struct _bl_2_thumb {
|
struct bl_2_thumb {
|
||||||
unsigned int imm;
|
unsigned int imm;
|
||||||
}bl_2_thumb;
|
};
|
||||||
typedef struct _blx_1_thumb {
|
struct blx_1_thumb {
|
||||||
unsigned int imm;
|
unsigned int imm;
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
}blx_1_thumb;
|
};
|
||||||
|
|
||||||
typedef struct _pkh_inst {
|
struct pkh_inst {
|
||||||
unsigned int Rm;
|
unsigned int Rm;
|
||||||
unsigned int Rn;
|
unsigned int Rn;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
unsigned char imm;
|
unsigned char imm;
|
||||||
} pkh_inst;
|
};
|
||||||
|
|
||||||
typedef arm_inst * ARM_INST_PTR;
|
typedef arm_inst * ARM_INST_PTR;
|
||||||
|
|
||||||
#define CACHE_BUFFER_SIZE (64 * 1024 * 2000)
|
#define CACHE_BUFFER_SIZE (64 * 1024 * 2000)
|
||||||
char inst_buf[CACHE_BUFFER_SIZE];
|
static char inst_buf[CACHE_BUFFER_SIZE];
|
||||||
int top = 0;
|
static int top = 0;
|
||||||
inline void *AllocBuffer(unsigned int size) {
|
static inline void *AllocBuffer(unsigned int size) {
|
||||||
int start = top;
|
int start = top;
|
||||||
top += size;
|
top += size;
|
||||||
if (top > CACHE_BUFFER_SIZE) {
|
if (top > CACHE_BUFFER_SIZE) {
|
||||||
@ -1127,74 +1180,6 @@ inline void *AllocBuffer(unsigned int size) {
|
|||||||
return (void *)&inst_buf[start];
|
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) {
|
static shtop_fp_t get_shtop(unsigned int inst) {
|
||||||
if (BIT(inst, 25)) {
|
if (BIT(inst, 25)) {
|
||||||
return DPO(Immediate);
|
return DPO(Immediate);
|
||||||
|
@ -13,10 +13,10 @@
|
|||||||
/* VMLA */
|
/* VMLA */
|
||||||
/* cond 1110 0D00 Vn-- Vd-- 101X N0M0 Vm-- */
|
/* cond 1110 0D00 Vn-- Vd-- 101X N0M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmla_inst {
|
struct vmla_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vmla_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmla)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmla)(unsigned int inst, int index)
|
||||||
@ -63,10 +63,10 @@ VMLA_INST:
|
|||||||
/* VNMLS */
|
/* VNMLS */
|
||||||
/* cond 1110 0D00 Vn-- Vd-- 101X N1M0 Vm-- */
|
/* cond 1110 0D00 Vn-- Vd-- 101X N1M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmls_inst {
|
struct vmls_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vmls_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmls)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmls)(unsigned int inst, int index)
|
||||||
@ -113,10 +113,10 @@ VMLS_INST:
|
|||||||
/* VNMLA */
|
/* VNMLA */
|
||||||
/* cond 1110 0D01 Vn-- Vd-- 101X N1M0 Vm-- */
|
/* cond 1110 0D01 Vn-- Vd-- 101X N1M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vnmla_inst {
|
struct vnmla_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vnmla_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmla)(unsigned int inst, int index)
|
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-- */
|
/* cond 1110 0D01 Vn-- Vd-- 101X N0M0 Vm-- */
|
||||||
|
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vnmls_inst {
|
struct vnmls_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vnmls_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmls)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmls)(unsigned int inst, int index)
|
||||||
@ -214,10 +214,10 @@ VNMLS_INST:
|
|||||||
/* VNMUL */
|
/* VNMUL */
|
||||||
/* cond 1110 0D10 Vn-- Vd-- 101X N0M0 Vm-- */
|
/* cond 1110 0D10 Vn-- Vd-- 101X N0M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vnmul_inst {
|
struct vnmul_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vnmul_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmul)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vnmul)(unsigned int inst, int index)
|
||||||
@ -264,10 +264,10 @@ VNMUL_INST:
|
|||||||
/* VMUL */
|
/* VMUL */
|
||||||
/* cond 1110 0D10 Vn-- Vd-- 101X N0M0 Vm-- */
|
/* cond 1110 0D10 Vn-- Vd-- 101X N0M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmul_inst {
|
struct vmul_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vmul_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmul)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmul)(unsigned int inst, int index)
|
||||||
@ -314,10 +314,10 @@ VMUL_INST:
|
|||||||
/* VADD */
|
/* VADD */
|
||||||
/* cond 1110 0D11 Vn-- Vd-- 101X N0M0 Vm-- */
|
/* cond 1110 0D11 Vn-- Vd-- 101X N0M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vadd_inst {
|
struct vadd_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vadd_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vadd)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vadd)(unsigned int inst, int index)
|
||||||
@ -364,10 +364,10 @@ VADD_INST:
|
|||||||
/* VSUB */
|
/* VSUB */
|
||||||
/* cond 1110 0D11 Vn-- Vd-- 101X N1M0 Vm-- */
|
/* cond 1110 0D11 Vn-- Vd-- 101X N1M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vsub_inst {
|
struct vsub_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vsub_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vsub)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vsub)(unsigned int inst, int index)
|
||||||
@ -414,10 +414,10 @@ VSUB_INST:
|
|||||||
/* VDIV */
|
/* VDIV */
|
||||||
/* cond 1110 1D00 Vn-- Vd-- 101X N0M0 Vm-- */
|
/* cond 1110 1D00 Vn-- Vd-- 101X N0M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vdiv_inst {
|
struct vdiv_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vdiv_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vdiv)(unsigned int inst, int index)
|
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 1D11 im4H Vd-- 101X 0000 im4L */
|
||||||
/* cond 1110 opc1 CRn- CRd- copr op20 CRm- CDP */
|
/* cond 1110 opc1 CRn- CRd- copr op20 CRm- CDP */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovi_inst {
|
struct vmovi_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int imm;
|
unsigned int imm;
|
||||||
} vmovi_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovi)(unsigned int inst, int index)
|
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 1D11 0000 Vd-- 101X 01M0 Vm-- */
|
||||||
/* cond 1110 opc1 CRn- CRd- copr op20 CRm- CDP */
|
/* cond 1110 opc1 CRn- CRd- copr op20 CRm- CDP */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovr_inst {
|
struct vmovr_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int m;
|
unsigned int m;
|
||||||
} vmovr_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovr)(unsigned int inst, int index)
|
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-- */
|
/* cond 1110 1D11 0001 Vd-- 101X 11M0 Vm-- */
|
||||||
|
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vneg_inst {
|
struct vneg_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vneg_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vneg)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vneg)(unsigned int inst, int index)
|
||||||
@ -659,10 +659,10 @@ VNEG_INST:
|
|||||||
/* VSQRT */
|
/* VSQRT */
|
||||||
/* cond 1110 1D11 0001 Vd-- 101X 11M0 Vm-- */
|
/* cond 1110 1D11 0001 Vd-- 101X 11M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vsqrt_inst {
|
struct vsqrt_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vsqrt_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vsqrt)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vsqrt)(unsigned int inst, int index)
|
||||||
@ -709,10 +709,10 @@ VSQRT_INST:
|
|||||||
/* VCMP VCMPE */
|
/* VCMP VCMPE */
|
||||||
/* cond 1110 1D11 0100 Vd-- 101X E1M0 Vm-- Encoding 1 */
|
/* cond 1110 1D11 0100 Vd-- 101X E1M0 Vm-- Encoding 1 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vcmp_inst {
|
struct vcmp_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vcmp_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcmp)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcmp)(unsigned int inst, int index)
|
||||||
@ -759,10 +759,10 @@ VCMP_INST:
|
|||||||
/* VCMP VCMPE */
|
/* VCMP VCMPE */
|
||||||
/* cond 1110 1D11 0100 Vd-- 101X E1M0 Vm-- Encoding 2 */
|
/* cond 1110 1D11 0100 Vd-- 101X E1M0 Vm-- Encoding 2 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vcmp2_inst {
|
struct vcmp2_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vcmp2_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcmp2)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcmp2)(unsigned int inst, int index)
|
||||||
@ -809,10 +809,10 @@ VCMP2_INST:
|
|||||||
/* VCVTBDS between double and single */
|
/* VCVTBDS between double and single */
|
||||||
/* cond 1110 1D11 0111 Vd-- 101X 11M0 Vm-- */
|
/* cond 1110 1D11 0111 Vd-- 101X 11M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vcvtbds_inst {
|
struct vcvtbds_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vcvtbds_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbds)(unsigned int inst, int index)
|
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 */
|
/* VCVTBFF between floating point and fixed point */
|
||||||
/* cond 1110 1D11 1op2 Vd-- 101X X1M0 Vm-- */
|
/* cond 1110 1D11 1op2 Vd-- 101X X1M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vcvtbff_inst {
|
struct vcvtbff_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vcvtbff_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbff)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbff)(unsigned int inst, int index)
|
||||||
@ -911,10 +911,10 @@ VCVTBFF_INST:
|
|||||||
/* VCVTBFI between floating point and integer */
|
/* VCVTBFI between floating point and integer */
|
||||||
/* cond 1110 1D11 1op2 Vd-- 101X X1M0 Vm-- */
|
/* cond 1110 1D11 1op2 Vd-- 101X X1M0 Vm-- */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vcvtbfi_inst {
|
struct vcvtbfi_inst {
|
||||||
unsigned int instr;
|
unsigned int instr;
|
||||||
unsigned int dp_operation;
|
unsigned int dp_operation;
|
||||||
} vcvtbfi_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vcvtbfi)(unsigned int inst, int index)
|
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 000o Vn-- Rt-- 1010 N001 0000 */
|
||||||
/* cond 1110 op11 CRn- Rt-- copr op21 CRm- MRC */
|
/* cond 1110 op11 CRn- Rt-- copr op21 CRm- MRC */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovbrs_inst {
|
struct vmovbrs_inst {
|
||||||
unsigned int to_arm;
|
unsigned int to_arm;
|
||||||
unsigned int t;
|
unsigned int t;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
} vmovbrs_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrs)(unsigned int inst, int index)
|
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 1110 reg- Rt-- 1010 0001 0000 */
|
||||||
/* cond 1110 op10 CRn- Rt-- copr op21 CRm- MCR */
|
/* cond 1110 op10 CRn- Rt-- copr op21 CRm- MCR */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmsr_inst {
|
struct vmsr_inst {
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
unsigned int Rd;
|
unsigned int Rd;
|
||||||
} vmsr_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmsr)(unsigned int inst, int index)
|
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)) {
|
if ((inst_base->cond == 0xe) || CondPassed(cpu, inst_base->cond)) {
|
||||||
/* FIXME: special case for access to FPSID and FPEXC, VFP must be disabled ,
|
/* 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 */
|
/* Exceptions must be checked, according to v7 ref manual */
|
||||||
CHECK_VFP_ENABLED;
|
CHECK_VFP_ENABLED;
|
||||||
|
|
||||||
@ -1060,12 +1060,12 @@ VMSR_INST:
|
|||||||
/* cond 1110 0XX0 Vd-- Rt-- 1011 DXX1 0000 */
|
/* cond 1110 0XX0 Vd-- Rt-- 1011 DXX1 0000 */
|
||||||
/* cond 1110 op10 CRn- Rt-- copr op21 CRm- MCR */
|
/* cond 1110 op10 CRn- Rt-- copr op21 CRm- MCR */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovbrc_inst {
|
struct vmovbrc_inst {
|
||||||
unsigned int esize;
|
unsigned int esize;
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int t;
|
unsigned int t;
|
||||||
} vmovbrc_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrc)(unsigned int inst, int index)
|
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 1111 CRn- Rt-- 1010 0001 0000 */
|
||||||
/* cond 1110 op11 CRn- Rt-- copr op21 CRm- MRC */
|
/* cond 1110 op11 CRn- Rt-- copr op21 CRm- MRC */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmrs_inst {
|
struct vmrs_inst {
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
unsigned int Rt;
|
unsigned int Rt;
|
||||||
} vmrs_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmrs)(unsigned int inst, int index)
|
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)) {
|
if ((inst_base->cond == 0xe) || CondPassed(cpu, inst_base->cond)) {
|
||||||
/* FIXME: special case for access to FPSID and FPEXC, VFP must be disabled,
|
/* 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 */
|
/* Exceptions must be checked, according to v7 ref manual */
|
||||||
CHECK_VFP_ENABLED;
|
CHECK_VFP_ENABLED;
|
||||||
|
|
||||||
@ -1191,12 +1191,12 @@ VMRS_INST:
|
|||||||
/* cond 1110 XXX1 Vd-- Rt-- 1011 NXX1 0000 */
|
/* cond 1110 XXX1 Vd-- Rt-- 1011 NXX1 0000 */
|
||||||
/* cond 1110 op11 CRn- Rt-- copr op21 CRm- MCR */
|
/* cond 1110 op11 CRn- Rt-- copr op21 CRm- MCR */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovbcr_inst {
|
struct vmovbcr_inst {
|
||||||
unsigned int esize;
|
unsigned int esize;
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int t;
|
unsigned int t;
|
||||||
} vmovbcr_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbcr)(unsigned int inst, int index)
|
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 010X Rt2- Rt-- 1010 00X1 Vm-- */
|
||||||
/* cond 1100 0101 Rt2- Rt-- copr opc1 CRm- MRRC */
|
/* cond 1100 0101 Rt2- Rt-- copr opc1 CRm- MRRC */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovbrrss_inst {
|
struct vmovbrrss_inst {
|
||||||
unsigned int to_arm;
|
unsigned int to_arm;
|
||||||
unsigned int t;
|
unsigned int t;
|
||||||
unsigned int t2;
|
unsigned int t2;
|
||||||
unsigned int m;
|
unsigned int m;
|
||||||
} vmovbrrss_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrrss)(unsigned int inst, int index)
|
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 010X Rt2- Rt-- 1011 00X1 Vm-- */
|
||||||
/* cond 1100 0101 Rt2- Rt-- copr opc1 CRm- MRRC */
|
/* cond 1100 0101 Rt2- Rt-- copr opc1 CRm- MRRC */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vmovbrrd_inst {
|
struct vmovbrrd_inst {
|
||||||
unsigned int to_arm;
|
unsigned int to_arm;
|
||||||
unsigned int t;
|
unsigned int t;
|
||||||
unsigned int t2;
|
unsigned int t2;
|
||||||
unsigned int m;
|
unsigned int m;
|
||||||
} vmovbrrd_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrrd)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrrd)(unsigned int inst, int index)
|
||||||
@ -1347,13 +1347,13 @@ VMOVBRRD_INST:
|
|||||||
/* VSTR */
|
/* VSTR */
|
||||||
/* cond 1101 UD00 Rn-- Vd-- 101X imm8 imm8 */
|
/* cond 1101 UD00 Rn-- Vd-- 101X imm8 imm8 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vstr_inst {
|
struct vstr_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int imm32;
|
unsigned int imm32;
|
||||||
unsigned int add;
|
unsigned int add;
|
||||||
} vstr_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vstr)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vstr)(unsigned int inst, int index)
|
||||||
@ -1415,12 +1415,12 @@ VSTR_INST:
|
|||||||
/* VPUSH */
|
/* VPUSH */
|
||||||
/* cond 1101 0D10 1101 Vd-- 101X imm8 imm8 */
|
/* cond 1101 0D10 1101 Vd-- 101X imm8 imm8 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vpush_inst {
|
struct vpush_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int imm32;
|
unsigned int imm32;
|
||||||
unsigned int regs;
|
unsigned int regs;
|
||||||
} vpush_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vpush)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vpush)(unsigned int inst, int index)
|
||||||
@ -1488,7 +1488,7 @@ VPUSH_INST:
|
|||||||
/* VSTM */
|
/* VSTM */
|
||||||
/* cond 110P UDW0 Rn-- Vd-- 101X imm8 imm8 */
|
/* cond 110P UDW0 Rn-- Vd-- 101X imm8 imm8 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vstm_inst {
|
struct vstm_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int add;
|
unsigned int add;
|
||||||
unsigned int wback;
|
unsigned int wback;
|
||||||
@ -1496,7 +1496,7 @@ typedef struct _vstm_inst {
|
|||||||
unsigned int n;
|
unsigned int n;
|
||||||
unsigned int imm32;
|
unsigned int imm32;
|
||||||
unsigned int regs;
|
unsigned int regs;
|
||||||
} vstm_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vstm)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vstm)(unsigned int inst, int index)
|
||||||
@ -1570,12 +1570,12 @@ VSTM_INST: /* encoding 1 */
|
|||||||
/* VPOP */
|
/* VPOP */
|
||||||
/* cond 1100 1D11 1101 Vd-- 101X imm8 imm8 */
|
/* cond 1100 1D11 1101 Vd-- 101X imm8 imm8 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vpop_inst {
|
struct vpop_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int imm32;
|
unsigned int imm32;
|
||||||
unsigned int regs;
|
unsigned int regs;
|
||||||
} vpop_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vpop)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vpop)(unsigned int inst, int index)
|
||||||
@ -1643,13 +1643,13 @@ VPOP_INST:
|
|||||||
/* VLDR */
|
/* VLDR */
|
||||||
/* cond 1101 UD01 Rn-- Vd-- 101X imm8 imm8 */
|
/* cond 1101 UD01 Rn-- Vd-- 101X imm8 imm8 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vldr_inst {
|
struct vldr_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
unsigned int d;
|
unsigned int d;
|
||||||
unsigned int imm32;
|
unsigned int imm32;
|
||||||
unsigned int add;
|
unsigned int add;
|
||||||
} vldr_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vldr)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vldr)(unsigned int inst, int index)
|
||||||
@ -1711,7 +1711,7 @@ VLDR_INST:
|
|||||||
/* VLDM */
|
/* VLDM */
|
||||||
/* cond 110P UDW1 Rn-- Vd-- 101X imm8 imm8 */
|
/* cond 110P UDW1 Rn-- Vd-- 101X imm8 imm8 */
|
||||||
#ifdef VFP_INTERPRETER_STRUCT
|
#ifdef VFP_INTERPRETER_STRUCT
|
||||||
typedef struct _vldm_inst {
|
struct vldm_inst {
|
||||||
unsigned int single;
|
unsigned int single;
|
||||||
unsigned int add;
|
unsigned int add;
|
||||||
unsigned int wback;
|
unsigned int wback;
|
||||||
@ -1719,7 +1719,7 @@ typedef struct _vldm_inst {
|
|||||||
unsigned int n;
|
unsigned int n;
|
||||||
unsigned int imm32;
|
unsigned int imm32;
|
||||||
unsigned int regs;
|
unsigned int regs;
|
||||||
} vldm_inst;
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef VFP_INTERPRETER_TRANS
|
#ifdef VFP_INTERPRETER_TRANS
|
||||||
static ARM_INST_PTR INTERPRETER_TRANSLATE(vldm)(unsigned int inst, int index)
|
static ARM_INST_PTR INTERPRETER_TRANSLATE(vldm)(unsigned int inst, int index)
|
||||||
|
Loading…
Reference in New Issue
Block a user