| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- // Copyright 2021 yuzu Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #include "shader_recompiler/environment.h"
- #include "shader_recompiler/frontend/ir/basic_block.h"
- #include "shader_recompiler/frontend/ir/ir_emitter.h"
- #include "shader_recompiler/frontend/maxwell/instruction.h"
- namespace Shader::Maxwell {
- class TranslatorVisitor {
- public:
- explicit TranslatorVisitor(Environment& env_, IR::Block& block) : env{env_} ,ir(block) {}
- Environment& env;
- IR::IREmitter ir;
- void AL2P(u64 insn);
- void ALD(u64 insn);
- void AST(u64 insn);
- void ATOM_cas(u64 insn);
- void ATOM(u64 insn);
- void ATOMS_cas(u64 insn);
- void ATOMS(u64 insn);
- void B2R(u64 insn);
- void BAR(u64 insn);
- void BFE_reg(u64 insn);
- void BFE_cbuf(u64 insn);
- void BFE_imm(u64 insn);
- void BFI_reg(u64 insn);
- void BFI_rc(u64 insn);
- void BFI_cr(u64 insn);
- void BFI_imm(u64 insn);
- void BPT(u64 insn);
- void BRA(u64 insn);
- void BRK(u64 insn);
- void BRX(u64 insn);
- void CAL(u64 insn);
- void CCTL(u64 insn);
- void CCTLL(u64 insn);
- void CONT(u64 insn);
- void CS2R(u64 insn);
- void CSET(u64 insn);
- void CSETP(u64 insn);
- void DADD_reg(u64 insn);
- void DADD_cbuf(u64 insn);
- void DADD_imm(u64 insn);
- void DEPBAR();
- void DFMA_reg(u64 insn);
- void DFMA_rc(u64 insn);
- void DFMA_cr(u64 insn);
- void DFMA_imm(u64 insn);
- void DMNMX_reg(u64 insn);
- void DMNMX_cbuf(u64 insn);
- void DMNMX_imm(u64 insn);
- void DMUL_reg(u64 insn);
- void DMUL_cbuf(u64 insn);
- void DMUL_imm(u64 insn);
- void DSET_reg(u64 insn);
- void DSET_cbuf(u64 insn);
- void DSET_imm(u64 insn);
- void DSETP_reg(u64 insn);
- void DSETP_cbuf(u64 insn);
- void DSETP_imm(u64 insn);
- void EXIT(u64 insn);
- void F2F_reg(u64 insn);
- void F2F_cbuf(u64 insn);
- void F2F_imm(u64 insn);
- void F2I_reg(u64 insn);
- void F2I_cbuf(u64 insn);
- void F2I_imm(u64 insn);
- void FADD_reg(u64 insn);
- void FADD_cbuf(u64 insn);
- void FADD_imm(u64 insn);
- void FADD32I(u64 insn);
- void FCHK_reg(u64 insn);
- void FCHK_cbuf(u64 insn);
- void FCHK_imm(u64 insn);
- void FCMP_reg(u64 insn);
- void FCMP_rc(u64 insn);
- void FCMP_cr(u64 insn);
- void FCMP_imm(u64 insn);
- void FFMA_reg(u64 insn);
- void FFMA_rc(u64 insn);
- void FFMA_cr(u64 insn);
- void FFMA_imm(u64 insn);
- void FFMA32I(u64 insn);
- void FLO_reg(u64 insn);
- void FLO_cbuf(u64 insn);
- void FLO_imm(u64 insn);
- void FMNMX_reg(u64 insn);
- void FMNMX_cbuf(u64 insn);
- void FMNMX_imm(u64 insn);
- void FMUL_reg(u64 insn);
- void FMUL_cbuf(u64 insn);
- void FMUL_imm(u64 insn);
- void FMUL32I(u64 insn);
- void FSET_reg(u64 insn);
- void FSET_cbuf(u64 insn);
- void FSET_imm(u64 insn);
- void FSETP_reg(u64 insn);
- void FSETP_cbuf(u64 insn);
- void FSETP_imm(u64 insn);
- void FSWZADD(u64 insn);
- void GETCRSPTR(u64 insn);
- void GETLMEMBASE(u64 insn);
- void HADD2_reg(u64 insn);
- void HADD2_cbuf(u64 insn);
- void HADD2_imm(u64 insn);
- void HADD2_32I(u64 insn);
- void HFMA2_reg(u64 insn);
- void HFMA2_rc(u64 insn);
- void HFMA2_cr(u64 insn);
- void HFMA2_imm(u64 insn);
- void HFMA2_32I(u64 insn);
- void HMUL2_reg(u64 insn);
- void HMUL2_cbuf(u64 insn);
- void HMUL2_imm(u64 insn);
- void HMUL2_32I(u64 insn);
- void HSET2_reg(u64 insn);
- void HSET2_cbuf(u64 insn);
- void HSET2_imm(u64 insn);
- void HSETP2_reg(u64 insn);
- void HSETP2_cbuf(u64 insn);
- void HSETP2_imm(u64 insn);
- void I2F_reg(u64 insn);
- void I2F_cbuf(u64 insn);
- void I2F_imm(u64 insn);
- void I2I_reg(u64 insn);
- void I2I_cbuf(u64 insn);
- void I2I_imm(u64 insn);
- void IADD_reg(u64 insn);
- void IADD_cbuf(u64 insn);
- void IADD_imm(u64 insn);
- void IADD3_reg(u64 insn);
- void IADD3_cbuf(u64 insn);
- void IADD3_imm(u64 insn);
- void IADD32I(u64 insn);
- void ICMP_reg(u64 insn);
- void ICMP_rc(u64 insn);
- void ICMP_cr(u64 insn);
- void ICMP_imm(u64 insn);
- void IDE(u64 insn);
- void IDP_reg(u64 insn);
- void IDP_imm(u64 insn);
- void IMAD_reg(u64 insn);
- void IMAD_rc(u64 insn);
- void IMAD_cr(u64 insn);
- void IMAD_imm(u64 insn);
- void IMAD32I(u64 insn);
- void IMADSP_reg(u64 insn);
- void IMADSP_rc(u64 insn);
- void IMADSP_cr(u64 insn);
- void IMADSP_imm(u64 insn);
- void IMNMX_reg(u64 insn);
- void IMNMX_cbuf(u64 insn);
- void IMNMX_imm(u64 insn);
- void IMUL_reg(u64 insn);
- void IMUL_cbuf(u64 insn);
- void IMUL_imm(u64 insn);
- void IMUL32I(u64 insn);
- void IPA(u64 insn);
- void ISBERD(u64 insn);
- void ISCADD_reg(u64 insn);
- void ISCADD_cbuf(u64 insn);
- void ISCADD_imm(u64 insn);
- void ISCADD32I(u64 insn);
- void ISET_reg(u64 insn);
- void ISET_cbuf(u64 insn);
- void ISET_imm(u64 insn);
- void ISETP_reg(u64 insn);
- void ISETP_cbuf(u64 insn);
- void ISETP_imm(u64 insn);
- void JCAL(u64 insn);
- void JMP(u64 insn);
- void JMX(u64 insn);
- void KIL(u64 insn);
- void LD(u64 insn);
- void LDC(u64 insn);
- void LDG(u64 insn);
- void LDL(u64 insn);
- void LDS(u64 insn);
- void LEA_hi_reg(u64 insn);
- void LEA_hi_cbuf(u64 insn);
- void LEA_lo_reg(u64 insn);
- void LEA_lo_cbuf(u64 insn);
- void LEA_lo_imm(u64 insn);
- void LEPC(u64 insn);
- void LONGJMP(u64 insn);
- void LOP_reg(u64 insn);
- void LOP_cbuf(u64 insn);
- void LOP_imm(u64 insn);
- void LOP3_reg(u64 insn);
- void LOP3_cbuf(u64 insn);
- void LOP3_imm(u64 insn);
- void LOP32I(u64 insn);
- void MEMBAR(u64 insn);
- void MOV_reg(u64 insn);
- void MOV_cbuf(u64 insn);
- void MOV_imm(u64 insn);
- void MOV32I(u64 insn);
- void MUFU(u64 insn);
- void NOP(u64 insn);
- void OUT_reg(u64 insn);
- void OUT_cbuf(u64 insn);
- void OUT_imm(u64 insn);
- void P2R_reg(u64 insn);
- void P2R_cbuf(u64 insn);
- void P2R_imm(u64 insn);
- void PBK();
- void PCNT(u64 insn);
- void PEXIT(u64 insn);
- void PIXLD(u64 insn);
- void PLONGJMP(u64 insn);
- void POPC_reg(u64 insn);
- void POPC_cbuf(u64 insn);
- void POPC_imm(u64 insn);
- void PRET(u64 insn);
- void PRMT_reg(u64 insn);
- void PRMT_rc(u64 insn);
- void PRMT_cr(u64 insn);
- void PRMT_imm(u64 insn);
- void PSET(u64 insn);
- void PSETP(u64 insn);
- void R2B(u64 insn);
- void R2P_reg(u64 insn);
- void R2P_cbuf(u64 insn);
- void R2P_imm(u64 insn);
- void RAM(u64 insn);
- void RED(u64 insn);
- void RET(u64 insn);
- void RRO_reg(u64 insn);
- void RRO_cbuf(u64 insn);
- void RRO_imm(u64 insn);
- void RTT(u64 insn);
- void S2R(u64 insn);
- void SAM(u64 insn);
- void SEL_reg(u64 insn);
- void SEL_cbuf(u64 insn);
- void SEL_imm(u64 insn);
- void SETCRSPTR(u64 insn);
- void SETLMEMBASE(u64 insn);
- void SHF_l_reg(u64 insn);
- void SHF_l_imm(u64 insn);
- void SHF_r_reg(u64 insn);
- void SHF_r_imm(u64 insn);
- void SHFL(u64 insn);
- void SHL_reg(u64 insn);
- void SHL_cbuf(u64 insn);
- void SHL_imm(u64 insn);
- void SHR_reg(u64 insn);
- void SHR_cbuf(u64 insn);
- void SHR_imm(u64 insn);
- void SSY();
- void ST(u64 insn);
- void STG(u64 insn);
- void STL(u64 insn);
- void STP(u64 insn);
- void STS(u64 insn);
- void SUATOM_cas(u64 insn);
- void SULD(u64 insn);
- void SURED(u64 insn);
- void SUST(u64 insn);
- void SYNC(u64 insn);
- void TEX(u64 insn);
- void TEX_b(u64 insn);
- void TEXS(u64 insn);
- void TLD(u64 insn);
- void TLD_b(u64 insn);
- void TLD4(u64 insn);
- void TLD4_b(u64 insn);
- void TLD4S(u64 insn);
- void TLDS(u64 insn);
- void TMML(u64 insn);
- void TMML_b(u64 insn);
- void TXA(u64 insn);
- void TXD(u64 insn);
- void TXD_b(u64 insn);
- void TXQ(u64 insn);
- void TXQ_b(u64 insn);
- void VABSDIFF(u64 insn);
- void VABSDIFF4(u64 insn);
- void VADD(u64 insn);
- void VMAD(u64 insn);
- void VMNMX(u64 insn);
- void VOTE(u64 insn);
- void VOTE_vtg(u64 insn);
- void VSET(u64 insn);
- void VSETP(u64 insn);
- void VSHL(u64 insn);
- void VSHR(u64 insn);
- void XMAD_reg(u64 insn);
- void XMAD_rc(u64 insn);
- void XMAD_cr(u64 insn);
- void XMAD_imm(u64 insn);
- [[nodiscard]] IR::U32 X(IR::Reg reg);
- void X(IR::Reg dest_reg, const IR::U32& value);
- [[nodiscard]] IR::U32 GetReg20(u64 insn);
- [[nodiscard]] IR::U32 GetReg39(u64 insn);
- [[nodiscard]] IR::U32 GetCbuf(u64 insn);
- [[nodiscard]] IR::U32 GetImm20(u64 insn);
- [[nodiscard]] IR::U32 GetImm32(u64 insn);
- void SetZFlag(const IR::U1& value);
- void SetSFlag(const IR::U1& value);
- void SetCFlag(const IR::U1& value);
- void SetOFlag(const IR::U1& value);
- void ResetZero();
- void ResetSFlag();
- void ResetCFlag();
- void ResetOFlag();
- };
- } // namespace Shader::Maxwell
|