#pragma once #include "Emu/CPU/CPUDisAsm.h" enum class arm_encoding; class ARMv7DisAsm final : public CPUDisAsm { public: ARMv7DisAsm(CPUDisAsmMode mode) : CPUDisAsm(mode) { } protected: virtual u32 DisAsmBranchTarget(const s32 imm) override { // TODO: ARM return dump_pc + (true ? 4 : 8) + imm; } virtual void Write(const std::string& value) override; private: template void write(const char* fmt, const Args&... args) { Write(fmt::format(fmt, args...)); } public: void UNK(const u32 op, const u32 cond); template void HACK(const u32, const u32); template void MRC_(const u32, const u32); template void ADC_IMM(const u32, const u32); template void ADC_REG(const u32, const u32); template void ADC_RSR(const u32, const u32); template void ADD_IMM(const u32, const u32); template void ADD_REG(const u32, const u32); template void ADD_RSR(const u32, const u32); template void ADD_SPI(const u32, const u32); template void ADD_SPR(const u32, const u32); template void ADR(const u32, const u32); template void AND_IMM(const u32, const u32); template void AND_REG(const u32, const u32); template void AND_RSR(const u32, const u32); template void ASR_IMM(const u32, const u32); template void ASR_REG(const u32, const u32); template void B(const u32, const u32); template void BFC(const u32, const u32); template void BFI(const u32, const u32); template void BIC_IMM(const u32, const u32); template void BIC_REG(const u32, const u32); template void BIC_RSR(const u32, const u32); template void BKPT(const u32, const u32); template void BL(const u32, const u32); template void BLX(const u32, const u32); template void BX(const u32, const u32); template void CB_Z(const u32, const u32); template void CLZ(const u32, const u32); template void CMN_IMM(const u32, const u32); template void CMN_REG(const u32, const u32); template void CMN_RSR(const u32, const u32); template void CMP_IMM(const u32, const u32); template void CMP_REG(const u32, const u32); template void CMP_RSR(const u32, const u32); template void DBG(const u32, const u32); template void DMB(const u32, const u32); template void DSB(const u32, const u32); template void EOR_IMM(const u32, const u32); template void EOR_REG(const u32, const u32); template void EOR_RSR(const u32, const u32); template void IT(const u32, const u32); template void LDM(const u32, const u32); template void LDMDA(const u32, const u32); template void LDMDB(const u32, const u32); template void LDMIB(const u32, const u32); template void LDR_IMM(const u32, const u32); template void LDR_LIT(const u32, const u32); template void LDR_REG(const u32, const u32); template void LDRB_IMM(const u32, const u32); template void LDRB_LIT(const u32, const u32); template void LDRB_REG(const u32, const u32); template void LDRD_IMM(const u32, const u32); template void LDRD_LIT(const u32, const u32); template void LDRD_REG(const u32, const u32); template void LDRH_IMM(const u32, const u32); template void LDRH_LIT(const u32, const u32); template void LDRH_REG(const u32, const u32); template void LDRSB_IMM(const u32, const u32); template void LDRSB_LIT(const u32, const u32); template void LDRSB_REG(const u32, const u32); template void LDRSH_IMM(const u32, const u32); template void LDRSH_LIT(const u32, const u32); template void LDRSH_REG(const u32, const u32); template void LDREX(const u32, const u32); template void LDREXB(const u32, const u32); template void LDREXD(const u32, const u32); template void LDREXH(const u32, const u32); template void LSL_IMM(const u32, const u32); template void LSL_REG(const u32, const u32); template void LSR_IMM(const u32, const u32); template void LSR_REG(const u32, const u32); template void MLA(const u32, const u32); template void MLS(const u32, const u32); template void MOV_IMM(const u32, const u32); template void MOV_REG(const u32, const u32); template void MOVT(const u32, const u32); template void MRS(const u32, const u32); template void MSR_IMM(const u32, const u32); template void MSR_REG(const u32, const u32); template void MUL(const u32, const u32); template void MVN_IMM(const u32, const u32); template void MVN_REG(const u32, const u32); template void MVN_RSR(const u32, const u32); template void NOP(const u32, const u32); template void ORN_IMM(const u32, const u32); template void ORN_REG(const u32, const u32); template void ORR_IMM(const u32, const u32); template void ORR_REG(const u32, const u32); template void ORR_RSR(const u32, const u32); template void PKH(const u32, const u32); template void POP(const u32, const u32); template void PUSH(const u32, const u32); template void QADD(const u32, const u32); template void QADD16(const u32, const u32); template void QADD8(const u32, const u32); template void QASX(const u32, const u32); template void QDADD(const u32, const u32); template void QDSUB(const u32, const u32); template void QSAX(const u32, const u32); template void QSUB(const u32, const u32); template void QSUB16(const u32, const u32); template void QSUB8(const u32, const u32); template void RBIT(const u32, const u32); template void REV(const u32, const u32); template void REV16(const u32, const u32); template void REVSH(const u32, const u32); template void ROR_IMM(const u32, const u32); template void ROR_REG(const u32, const u32); template void RRX(const u32, const u32); template void RSB_IMM(const u32, const u32); template void RSB_REG(const u32, const u32); template void RSB_RSR(const u32, const u32); template void RSC_IMM(const u32, const u32); template void RSC_REG(const u32, const u32); template void RSC_RSR(const u32, const u32); template void SADD16(const u32, const u32); template void SADD8(const u32, const u32); template void SASX(const u32, const u32); template void SBC_IMM(const u32, const u32); template void SBC_REG(const u32, const u32); template void SBC_RSR(const u32, const u32); template void SBFX(const u32, const u32); template void SDIV(const u32, const u32); template void SEL(const u32, const u32); template void SHADD16(const u32, const u32); template void SHADD8(const u32, const u32); template void SHASX(const u32, const u32); template void SHSAX(const u32, const u32); template void SHSUB16(const u32, const u32); template void SHSUB8(const u32, const u32); template void SMLA__(const u32, const u32); template void SMLAD(const u32, const u32); template void SMLAL(const u32, const u32); template void SMLAL__(const u32, const u32); template void SMLALD(const u32, const u32); template void SMLAW_(const u32, const u32); template void SMLSD(const u32, const u32); template void SMLSLD(const u32, const u32); template void SMMLA(const u32, const u32); template void SMMLS(const u32, const u32); template void SMMUL(const u32, const u32); template void SMUAD(const u32, const u32); template void SMUL__(const u32, const u32); template void SMULL(const u32, const u32); template void SMULW_(const u32, const u32); template void SMUSD(const u32, const u32); template void SSAT(const u32, const u32); template void SSAT16(const u32, const u32); template void SSAX(const u32, const u32); template void SSUB16(const u32, const u32); template void SSUB8(const u32, const u32); template void STM(const u32, const u32); template void STMDA(const u32, const u32); template void STMDB(const u32, const u32); template void STMIB(const u32, const u32); template void STR_IMM(const u32, const u32); template void STR_REG(const u32, const u32); template void STRB_IMM(const u32, const u32); template void STRB_REG(const u32, const u32); template void STRD_IMM(const u32, const u32); template void STRD_REG(const u32, const u32); template void STRH_IMM(const u32, const u32); template void STRH_REG(const u32, const u32); template void STREX(const u32, const u32); template void STREXB(const u32, const u32); template void STREXD(const u32, const u32); template void STREXH(const u32, const u32); template void SUB_IMM(const u32, const u32); template void SUB_REG(const u32, const u32); template void SUB_RSR(const u32, const u32); template void SUB_SPI(const u32, const u32); template void SUB_SPR(const u32, const u32); template void SVC(const u32, const u32); template void SXTAB(const u32, const u32); template void SXTAB16(const u32, const u32); template void SXTAH(const u32, const u32); template void SXTB(const u32, const u32); template void SXTB16(const u32, const u32); template void SXTH(const u32, const u32); template void TB_(const u32, const u32); template void TEQ_IMM(const u32, const u32); template void TEQ_REG(const u32, const u32); template void TEQ_RSR(const u32, const u32); template void TST_IMM(const u32, const u32); template void TST_REG(const u32, const u32); template void TST_RSR(const u32, const u32); template void UADD16(const u32, const u32); template void UADD8(const u32, const u32); template void UASX(const u32, const u32); template void UBFX(const u32, const u32); template void UDIV(const u32, const u32); template void UHADD16(const u32, const u32); template void UHADD8(const u32, const u32); template void UHASX(const u32, const u32); template void UHSAX(const u32, const u32); template void UHSUB16(const u32, const u32); template void UHSUB8(const u32, const u32); template void UMAAL(const u32, const u32); template void UMLAL(const u32, const u32); template void UMULL(const u32, const u32); template void UQADD16(const u32, const u32); template void UQADD8(const u32, const u32); template void UQASX(const u32, const u32); template void UQSAX(const u32, const u32); template void UQSUB16(const u32, const u32); template void UQSUB8(const u32, const u32); template void USAD8(const u32, const u32); template void USADA8(const u32, const u32); template void USAT(const u32, const u32); template void USAT16(const u32, const u32); template void USAX(const u32, const u32); template void USUB16(const u32, const u32); template void USUB8(const u32, const u32); template void UXTAB(const u32, const u32); template void UXTAB16(const u32, const u32); template void UXTAH(const u32, const u32); template void UXTB(const u32, const u32); template void UXTB16(const u32, const u32); template void UXTH(const u32, const u32); template void VABA_(const u32, const u32); template void VABD_(const u32, const u32); template void VABD_FP(const u32, const u32); template void VABS(const u32, const u32); template void VAC__(const u32, const u32); template void VADD(const u32, const u32); template void VADD_FP(const u32, const u32); template void VADDHN(const u32, const u32); template void VADD_(const u32, const u32); template void VAND(const u32, const u32); template void VBIC_IMM(const u32, const u32); template void VBIC_REG(const u32, const u32); template void VB__(const u32, const u32); template void VCEQ_REG(const u32, const u32); template void VCEQ_ZERO(const u32, const u32); template void VCGE_REG(const u32, const u32); template void VCGE_ZERO(const u32, const u32); template void VCGT_REG(const u32, const u32); template void VCGT_ZERO(const u32, const u32); template void VCLE_ZERO(const u32, const u32); template void VCLS(const u32, const u32); template void VCLT_ZERO(const u32, const u32); template void VCLZ(const u32, const u32); template void VCMP_(const u32, const u32); template void VCNT(const u32, const u32); template void VCVT_FIA(const u32, const u32); template void VCVT_FIF(const u32, const u32); template void VCVT_FFA(const u32, const u32); template void VCVT_FFF(const u32, const u32); template void VCVT_DF(const u32, const u32); template void VCVT_HFA(const u32, const u32); template void VCVT_HFF(const u32, const u32); template void VDIV(const u32, const u32); template void VDUP_S(const u32, const u32); template void VDUP_R(const u32, const u32); template void VEOR(const u32, const u32); template void VEXT(const u32, const u32); template void VHADDSUB(const u32, const u32); template void VLD__MS(const u32, const u32); template void VLD1_SL(const u32, const u32); template void VLD1_SAL(const u32, const u32); template void VLD2_SL(const u32, const u32); template void VLD2_SAL(const u32, const u32); template void VLD3_SL(const u32, const u32); template void VLD3_SAL(const u32, const u32); template void VLD4_SL(const u32, const u32); template void VLD4_SAL(const u32, const u32); template void VLDM(const u32, const u32); template void VLDR(const u32, const u32); template void VMAXMIN(const u32, const u32); template void VMAXMIN_FP(const u32, const u32); template void VML__(const u32, const u32); template void VML__FP(const u32, const u32); template void VML__S(const u32, const u32); template void VMOV_IMM(const u32, const u32); template void VMOV_REG(const u32, const u32); template void VMOV_RS(const u32, const u32); template void VMOV_SR(const u32, const u32); template void VMOV_RF(const u32, const u32); template void VMOV_2RF(const u32, const u32); template void VMOV_2RD(const u32, const u32); template void VMOVL(const u32, const u32); template void VMOVN(const u32, const u32); template void VMRS(const u32, const u32); template void VMSR(const u32, const u32); template void VMUL_(const u32, const u32); template void VMUL_FP(const u32, const u32); template void VMUL_S(const u32, const u32); template void VMVN_IMM(const u32, const u32); template void VMVN_REG(const u32, const u32); template void VNEG(const u32, const u32); template void VNM__(const u32, const u32); template void VORN_REG(const u32, const u32); template void VORR_IMM(const u32, const u32); template void VORR_REG(const u32, const u32); template void VPADAL(const u32, const u32); template void VPADD(const u32, const u32); template void VPADD_FP(const u32, const u32); template void VPADDL(const u32, const u32); template void VPMAXMIN(const u32, const u32); template void VPMAXMIN_FP(const u32, const u32); template void VPOP(const u32, const u32); template void VPUSH(const u32, const u32); template void VQABS(const u32, const u32); template void VQADD(const u32, const u32); template void VQDML_L(const u32, const u32); template void VQDMULH(const u32, const u32); template void VQDMULL(const u32, const u32); template void VQMOV_N(const u32, const u32); template void VQNEG(const u32, const u32); template void VQRDMULH(const u32, const u32); template void VQRSHL(const u32, const u32); template void VQRSHR_N(const u32, const u32); template void VQSHL_REG(const u32, const u32); template void VQSHL_IMM(const u32, const u32); template void VQSHR_N(const u32, const u32); template void VQSUB(const u32, const u32); template void VRADDHN(const u32, const u32); template void VRECPE(const u32, const u32); template void VRECPS(const u32, const u32); template void VREV__(const u32, const u32); template void VRHADD(const u32, const u32); template void VRSHL(const u32, const u32); template void VRSHR(const u32, const u32); template void VRSHRN(const u32, const u32); template void VRSQRTE(const u32, const u32); template void VRSQRTS(const u32, const u32); template void VRSRA(const u32, const u32); template void VRSUBHN(const u32, const u32); template void VSHL_IMM(const u32, const u32); template void VSHL_REG(const u32, const u32); template void VSHLL(const u32, const u32); template void VSHR(const u32, const u32); template void VSHRN(const u32, const u32); template void VSLI(const u32, const u32); template void VSQRT(const u32, const u32); template void VSRA(const u32, const u32); template void VSRI(const u32, const u32); template void VST__MS(const u32, const u32); template void VST1_SL(const u32, const u32); template void VST2_SL(const u32, const u32); template void VST3_SL(const u32, const u32); template void VST4_SL(const u32, const u32); template void VSTM(const u32, const u32); template void VSTR(const u32, const u32); template void VSUB(const u32, const u32); template void VSUB_FP(const u32, const u32); template void VSUBHN(const u32, const u32); template void VSUB_(const u32, const u32); template void VSWP(const u32, const u32); template void VTB_(const u32, const u32); template void VTRN(const u32, const u32); template void VTST(const u32, const u32); template void VUZP(const u32, const u32); template void VZIP(const u32, const u32); template void WFE(const u32, const u32); template void WFI(const u32, const u32); template void YIELD(const u32, const u32); public: u32 disasm(u32 pc) override; };