diff --git a/externals/powah/powah_emit.hpp b/externals/powah/powah_emit.hpp index 51fea03fc9..b2f26dc84a 100644 --- a/externals/powah/powah_emit.hpp +++ b/externals/powah/powah_emit.hpp @@ -254,14 +254,15 @@ struct Context { ); } void emit_M(uint32_t op, GPR const rs, GPR const ra, uint32_t sh, uint32_t mb, uint32_t me, bool rc) { - (void)op; - (void)rs; - (void)ra; - (void)sh; - (void)mb; - (void)me; - (void)rc; - std::abort(); + assert(sh <= 0x3f && mb <= 0x3f); + base[offset++] = (op | + bitExt(ra.index, 6, 5) + | bitExt(rs.index, 11, 5) + | bitExt(sh, 16, 5) + | bitExt(mb, 21, 4) + | bitExt(me, 26, 4) + | bitExt(rc, 31, 1) + ); } void emit_MD(uint32_t op, GPR const rs, GPR const ra, GPR const rb, uint32_t mb, bool rc) { assert(mb <= 0x3f); diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/abi.h b/src/dynarmic/src/dynarmic/backend/ppc64/abi.h index 364a7c8bc0..c5a536f1e5 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/abi.h +++ b/src/dynarmic/src/dynarmic/backend/ppc64/abi.h @@ -8,7 +8,7 @@ namespace Dynarmic::Backend::PPC64 { -constexpr powah::GPR RJIT = powah::R31; +constexpr powah::GPR RJIT = powah::R3; //yeah it's param, so what? constexpr powah::GPR ABI_PARAM1 = powah::R3; constexpr powah::GPR ABI_PARAM2 = powah::R4; @@ -20,4 +20,12 @@ constexpr std::initializer_list GPR_ORDER{ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; +constexpr std::initializer_list ABI_CALLEE_SAVED{ + powah::R14, powah::R15, powah::R16, powah::R17, + powah::R18, powah::R19, powah::R20, powah::R21, + powah::R22, powah::R23, powah::R24, powah::R25, + powah::R26, powah::R27, powah::R28, powah::R29, + powah::R30, powah::R31 +}; + } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.cpp index f95ca8aa82..94e1c50862 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.cpp @@ -24,76 +24,76 @@ void EmitIR(powah::Context&, EmitContext&, IR::Inst*) {} template<> void EmitIR(powah::Context&, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } EmittedBlockInfo EmitPPC64(powah::Context& code, IR::Block block, const EmitConfig& emit_conf) { EmittedBlockInfo ebi; RegAlloc reg_alloc{code}; EmitContext ctx{block, reg_alloc, emit_conf, ebi}; - ebi.entry_point = CodePtr(code.base + code.offset); - code.BLR(); + auto const start_offset = code.offset; + ebi.entry_point = CodePtr(code.base + start_offset); // Non-volatile saves std::vector gpr_order{GPR_ORDER}; @@ -127,12 +127,20 @@ EmittedBlockInfo EmitPPC64(powah::Context& code, IR::Block block, const EmitConf for (size_t i = 0; i < gpr_order.size(); ++i) code.LD(powah::GPR{gpr_order[i]}, powah::R1, -(i * 8)); code.BLR(); - ebi.size = code.offset; + + /* + llvm-objcopy -I binary -O elf64-powerpc --rename-section=.data=.text,code test.bin test.elf + llvm-objdump -d test.elf + */ + static FILE* fp = fopen("test.bin", "ab"); + fwrite(code.base, code.offset - start_offset, sizeof(uint32_t), fp); + + ebi.size = code.offset - start_offset; return ebi; } -void EmitRelocation(powah::Context& as, EmitContext& ctx, LinkTarget link_target) { - UNREACHABLE(); +void EmitRelocation(powah::Context& code, EmitContext& ctx, LinkTarget link_target) { + ASSERT(false && "unimp"); } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.h b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.h index aad9d0dd63..5d53027d1d 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.h +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64.h @@ -45,12 +45,12 @@ struct EmitConfig { struct EmitContext; -EmittedBlockInfo EmitPPC64(powah::Context& as, IR::Block block, const EmitConfig& emit_conf); +EmittedBlockInfo EmitPPC64(powah::Context& code, IR::Block block, const EmitConfig& emit_conf); template -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst); -void EmitRelocation(powah::Context& as, EmitContext& ctx, LinkTarget link_target); -void EmitA32Cond(powah::Context& as, EmitContext& ctx, IR::Cond cond, powah::Label* label); -void EmitA32Terminal(powah::Context& as, EmitContext& ctx); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst); +void EmitRelocation(powah::Context& code, EmitContext& ctx, LinkTarget link_target); +void EmitA32Cond(powah::Context& code, EmitContext& ctx, IR::Cond cond, powah::Label* label); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx); } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a32.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a32.cpp index f851882c4e..c032f38500 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a32.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a32.cpp @@ -15,340 +15,355 @@ namespace Dynarmic::Backend::PPC64 { -void EmitA32Cond(powah::Context& as, EmitContext&, IR::Cond cond, powah::Label* label) { - UNREACHABLE(); +void EmitA32Cond(powah::Context& code, EmitContext&, IR::Cond cond, powah::Label* label) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::Terminal terminal, IR::LocationDescriptor initial_location, bool is_single_step); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::Terminal terminal, IR::LocationDescriptor initial_location, bool is_single_step); void EmitA32Terminal(powah::Context&, EmitContext&, IR::Term::Interpret, IR::LocationDescriptor, bool) { - UNREACHABLE(); + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::ReturnToDispatch, IR::LocationDescriptor, bool) { - EmitRelocation(as, ctx, LinkTarget::ReturnFromRunCode); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::ReturnToDispatch, IR::LocationDescriptor, bool) { + EmitRelocation(code, ctx, LinkTarget::ReturnFromRunCode); } -void EmitSetUpperLocationDescriptor(powah::Context& as, EmitContext& ctx, IR::LocationDescriptor new_location, IR::LocationDescriptor old_location) { - UNREACHABLE(); +void EmitSetUpperLocationDescriptor(powah::Context& code, EmitContext& ctx, IR::LocationDescriptor new_location, IR::LocationDescriptor old_location) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::LinkBlock terminal, IR::LocationDescriptor initial_location, bool) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::LinkBlock terminal, IR::LocationDescriptor initial_location, bool) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::LinkBlockFast terminal, IR::LocationDescriptor initial_location, bool) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::LinkBlockFast terminal, IR::LocationDescriptor initial_location, bool) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::PopRSBHint, IR::LocationDescriptor, bool) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::PopRSBHint, IR::LocationDescriptor, bool) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::FastDispatchHint, IR::LocationDescriptor, bool) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::FastDispatchHint, IR::LocationDescriptor, bool) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::If terminal, IR::LocationDescriptor initial_location, bool is_single_step) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::If terminal, IR::LocationDescriptor initial_location, bool is_single_step) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::CheckBit terminal, IR::LocationDescriptor initial_location, bool is_single_step) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::CheckBit terminal, IR::LocationDescriptor initial_location, bool is_single_step) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::CheckHalt terminal, IR::LocationDescriptor initial_location, bool is_single_step) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::CheckHalt terminal, IR::LocationDescriptor initial_location, bool is_single_step) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx, IR::Term::Terminal terminal, IR::LocationDescriptor initial_location, bool is_single_step) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx, IR::Term::Terminal terminal, IR::LocationDescriptor initial_location, bool is_single_step) { + ASSERT(false && "unimp"); } -void EmitA32Terminal(powah::Context& as, EmitContext& ctx) { - UNREACHABLE(); +void EmitA32Terminal(powah::Context& code, EmitContext& ctx) { + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + auto args = ctx.reg_alloc.GetArgumentInfo(inst); + powah::GPR const result = ctx.reg_alloc.ScratchGpr(); + powah::GPR const index = ctx.reg_alloc.UseScratchGpr(args[1]); + code.SLDI(index, index, 3); + code.ADD(result, PPC64::RJIT, index); + code.LD(result, result, offsetof(A32JitState, regs)); + ctx.reg_alloc.DefineValue(inst, result); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + auto args = ctx.reg_alloc.GetArgumentInfo(inst); + powah::GPR const result = ctx.reg_alloc.ScratchGpr(); + powah::GPR const index = ctx.reg_alloc.UseScratchGpr(args[1]); + code.SLDI(index, index, 3); + code.ADD(result, PPC64::RJIT, index); + code.STD(result, result, offsetof(A32JitState, regs)); + ctx.reg_alloc.DefineValue(inst, result); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context& as, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + ASSERT(false && "unimp"); } template<> -void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); +void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { + powah::GPR const result = ctx.reg_alloc.ScratchGpr(); + code.LD(result, PPC64::RJIT, offsetof(A32JitState, cpsr_nzcv)); + code.RLWINM(result, result, 31, 31, 31); + ctx.reg_alloc.DefineValue(inst, result); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Memory template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Coprocesor template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a64.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a64.cpp index 2729d145f9..d74baa8252 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a64.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_a64.cpp @@ -17,288 +17,288 @@ namespace Dynarmic::Backend::PPC64 { template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Memory template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_data_processing.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_data_processing.cpp index a376929a36..34edd4270c 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_data_processing.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_data_processing.cpp @@ -18,17 +18,17 @@ namespace Dynarmic::Backend::PPC64 { template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } /* @@ -119,7 +119,7 @@ void EmitIR(powah::Context& code, EmitContext& ctx, IR::Ins code.RLDICL(result, source, (64 - shift - 1) & 0x3f, 63); } } else { - UNREACHABLE(); + ASSERT(false && "unimp"); } ctx.reg_alloc.DefineValue(inst, result); } @@ -244,7 +244,7 @@ static powah::GPR EmitConditionalSelectX(powah::Context& code, EmitContext& ctx, code.MR(nzcv, then_); } break; default: - UNREACHABLE(); + ASSERT(false && "unimp"); } return nzcv; } @@ -773,7 +773,7 @@ void EmitIR(powah::Context& code, EmitContext& template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // __builtin_bswap32 @@ -856,22 +856,22 @@ void EmitIR(powah::Context& code, EmitContext& template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context& code, EmitContext& ctx, IR::Inst* inst) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_floating_point.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_floating_point.cpp index b50f5027cd..a8bb06864e 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_floating_point.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_floating_point.cpp @@ -17,442 +17,442 @@ namespace Dynarmic::Backend::PPC64 { template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_misc.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_misc.cpp index 89d925e465..7db5dbd992 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_misc.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_misc.cpp @@ -17,364 +17,364 @@ namespace Dynarmic::Backend::PPC64 { template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Packed template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Crypto template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_vector.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_vector.cpp index ccc4daf4b1..d53b804d73 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_vector.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/emit_ppc64_vector.cpp @@ -17,1794 +17,1794 @@ namespace Dynarmic::Backend::PPC64 { template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Vector saturation template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } // Vector VFP template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } template<> void EmitIR(powah::Context&, EmitContext&, IR::Inst*) { - UNREACHABLE(); + ASSERT(false && "unimp"); } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.cpp b/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.cpp index 4e2037790a..e1d5cd9ee5 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.cpp +++ b/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.cpp @@ -1,16 +1,15 @@ // SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later -#include "dynarmic/backend/ppc64/reg_alloc.h" #include #include #include +#include "dynarmic/backend/ppc64/reg_alloc.h" +#include "dynarmic/backend/ppc64/abi.h" #include "dynarmic/common/assert.h" -#include #include "dynarmic/common/common_types.h" - #include "dynarmic/common/always_false.h" namespace Dynarmic::Backend::PPC64 { @@ -22,67 +21,9 @@ static bool IsValuelessType(IR::Type type) { return type == IR::Type::Table; } -IR::Type Argument::GetType() const { - return value.GetType(); -} - -bool Argument::IsImmediate() const { - return value.IsImmediate(); -} - -bool Argument::GetImmediateU1() const { - return value.GetU1(); -} - -u8 Argument::GetImmediateU8() const { - const u64 imm = value.GetImmediateAsU64(); - ASSERT(imm < 0x100); - return u8(imm); -} - -u16 Argument::GetImmediateU16() const { - const u64 imm = value.GetImmediateAsU64(); - ASSERT(imm < 0x10000); - return u16(imm); -} - -u32 Argument::GetImmediateU32() const { - const u64 imm = value.GetImmediateAsU64(); - ASSERT(imm < 0x100000000); - return u32(imm); -} - -u64 Argument::GetImmediateU64() const { - return value.GetImmediateAsU64(); -} - -IR::Cond Argument::GetImmediateCond() const { - ASSERT(IsImmediate() && GetType() == IR::Type::Cond); - return value.GetCond(); -} - -IR::AccType Argument::GetImmediateAccType() const { - ASSERT(IsImmediate() && GetType() == IR::Type::AccType); - return value.GetAccType(); -} - -bool HostLocInfo::Contains(const IR::Inst* value) const { - return std::find(values.begin(), values.end(), value) != values.end(); -} - -void HostLocInfo::SetupScratchLocation() { - ASSERT(IsCompletelyEmpty()); - realized = true; -} - -bool HostLocInfo::IsCompletelyEmpty() const { - return values.empty() && !locked && !realized && !accumulated_uses && !expected_uses && !uses_this_inst; -} - void HostLocInfo::UpdateUses() { accumulated_uses += uses_this_inst; uses_this_inst = 0; - if (accumulated_uses == expected_uses) { values.clear(); accumulated_uses = 0; @@ -139,34 +80,32 @@ void RegAlloc::AssertNoMoreUses() const { ASSERT(std::all_of(spills.begin(), spills.end(), is_empty)); } -u32 RegAlloc::AllocateRegister(const std::array& regs, const std::vector& order) const { - const auto empty = std::find_if(order.begin(), order.end(), [&](u32 i) { return regs[i].values.empty() && !regs[i].locked; }); - if (empty != order.end()) - return *empty; - +std::optional RegAlloc::AllocateRegister(const std::array& regs, const std::vector& order) const { + if (auto const it = std::find_if(order.begin(), order.end(), [&](u32 i) { + return regs[i].values.empty() && !regs[i].locked; + }); it != order.end()) + return *it; std::vector candidates; std::copy_if(order.begin(), order.end(), std::back_inserter(candidates), [&](u32 i) { return !regs[i].locked; }); - // TODO: LRU - return candidates[0]; + return candidates.empty() ? std::nullopt : std::optional{candidates[0]}; // TODO: LRU } void RegAlloc::SpillGpr(u32 index) { ASSERT(!gprs[index].locked && !gprs[index].realized); - if (gprs[index].values.empty()) - return; - const u32 new_location_index = FindFreeSpill(); - //as.SD(powah::GPR{index}, spill_offset + new_location_index * spill_slot_size, powah::sp); - spills[new_location_index] = std::exchange(gprs[index], {}); + if (!gprs[index].values.empty()) { + const u32 new_location_index = FindFreeSpill(); + code.STD(powah::GPR{index}, powah::R1, spill_offset + new_location_index * spill_slot_size); + spills[new_location_index] = std::exchange(gprs[index], {}); + } } void RegAlloc::SpillFpr(u32 index) { ASSERT(!fprs[index].locked && !fprs[index].realized); - if (fprs[index].values.empty()) { - return; + if (!fprs[index].values.empty()) { + const u32 new_location_index = FindFreeSpill(); + //code.FSD(powah::FPR{index}, spill_offset + new_location_index * spill_slot_size, powah::sp); + spills[new_location_index] = std::exchange(fprs[index], {}); } - const u32 new_location_index = FindFreeSpill(); - //as.FSD(powah::FPR{index}, spill_offset + new_location_index * spill_slot_size, powah::sp); - spills[new_location_index] = std::exchange(fprs[index], {}); } u32 RegAlloc::FindFreeSpill() const { @@ -190,16 +129,22 @@ std::optional RegAlloc::ValueLocation(const IR::Inst* value) const { return std::nullopt; } -HostLocInfo& RegAlloc::ValueInfo(HostLoc host_loc) { - // switch (host_loc.kind) { - // case HostLoc::Kind::Gpr: - // return gprs[size_t(host_loc.index)]; - // case HostLoc::Kind::Fpr: - // return fprs[size_t(host_loc.index)]; - // case HostLoc::Kind::Spill: - // return spills[size_t(host_loc.index)]; - // } - UNREACHABLE(); +static powah::GPR HostLocToReg(HostLoc h) noexcept { + if (u8(h) >= u8(HostLoc::R0) && u8(h) <= u8(HostLoc::R31)) + return powah::GPR{uint32_t(h)}; + ASSERT(false && "unimp"); +} + +HostLocInfo& RegAlloc::ValueInfo(HostLoc h) { + if (u8(h) >= u8(HostLoc::R0) && u8(h) <= u8(HostLoc::R31)) + return gprs[size_t(h)]; + else if (u8(h) >= u8(HostLoc::FR0) && u8(h) <= u8(HostLoc::FR31)) + return gprs[size_t(h) - size_t(HostLoc::FR0)]; + else if (u8(h) >= u8(HostLoc::VR0) && u8(h) <= u8(HostLoc::VR31)) + return vprs[size_t(h) - size_t(HostLoc::VR0)]; + auto const index = size_t(h) - size_t(HostLoc::FirstSpill); + ASSERT(index <= spills.size()); + return spills[index]; } HostLocInfo& RegAlloc::ValueInfo(const IR::Inst* value) { @@ -212,35 +157,49 @@ HostLocInfo& RegAlloc::ValueInfo(const IR::Inst* value) { return *iter; else if (const auto iter = std::find_if(spills.begin(), spills.end(), fn); iter != spills.end()) return *iter; - UNREACHABLE(); -} - -powah::GPR RegAlloc::ScratchGpr(std::optional> desired_locations) { - UNREACHABLE(); + ASSERT(false && "unimp"); } -void RegAlloc::Use(Argument& arg, HostLoc host_loc) { - UNREACHABLE(); -} - -void RegAlloc::UseScratch(Argument& arg, HostLoc host_loc) { - UNREACHABLE(); +powah::GPR RegAlloc::ScratchGpr() { + auto const r = AllocateRegister(gprs, PPC64::GPR_ORDER); + return powah::GPR{*r}; } powah::GPR RegAlloc::UseGpr(Argument& arg) { - UNREACHABLE(); + ASSERT(!arg.allocated); + arg.allocated = true; + return ScratchGpr(); } powah::GPR RegAlloc::UseScratchGpr(Argument& arg) { - UNREACHABLE(); + ASSERT(!arg.allocated); + arg.allocated = true; + return ScratchGpr(); } void RegAlloc::DefineValue(IR::Inst* inst, powah::GPR const gpr) noexcept { - UNREACHABLE(); + ASSERT(!ValueLocation(inst) && "inst has already been defined"); + ValueInfo(HostLoc(gpr.index)).values.push_back(inst); } void RegAlloc::DefineValue(IR::Inst* inst, Argument& arg) noexcept { - UNREACHABLE(); + ASSERT(!arg.allocated); + arg.allocated = true; + ASSERT(!ValueLocation(inst) && "inst has already been defined"); + if (arg.value.IsImmediate()) { + HostLoc const loc{u8(ScratchGpr().index)}; + ValueInfo(loc).values.push_back(inst); + auto const value = arg.value.GetImmediateAsU64(); + if (value >= 0x7fff) { + ASSERT(false && "unimp"); + } else { + //code.LI(HostLocToReg(loc), value); + } + } else { + ASSERT(ValueLocation(arg.value.GetInst()) && "arg.value must already be defined"); + const HostLoc loc = *ValueLocation(arg.value.GetInst()); + ValueInfo(loc).values.push_back(inst); + } } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.h b/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.h index 034935e311..4e5454b86e 100644 --- a/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.h +++ b/src/dynarmic/src/dynarmic/backend/ppc64/reg_alloc.h @@ -26,27 +26,47 @@ class RegAlloc; struct Argument { public: - using copyable_reference = std::reference_wrapper; - - IR::Type GetType() const; - bool IsImmediate() const; - - bool GetImmediateU1() const; - u8 GetImmediateU8() const; - u16 GetImmediateU16() const; - u32 GetImmediateU32() const; - u64 GetImmediateU64() const; - IR::Cond GetImmediateCond() const; - IR::AccType GetImmediateAccType() const; - + IR::Type GetType() const { + return value.GetType(); + } + bool IsImmediate() const { + return value.IsImmediate(); + } + bool GetImmediateU1() const { + return value.GetU1(); + } + u8 GetImmediateU8() const { + const u64 imm = value.GetImmediateAsU64(); + ASSERT(imm < 0x100); + return u8(imm); + } + u16 GetImmediateU16() const { + const u64 imm = value.GetImmediateAsU64(); + ASSERT(imm < 0x10000); + return u16(imm); + } + u32 GetImmediateU32() const { + const u64 imm = value.GetImmediateAsU64(); + ASSERT(imm < 0x100000000); + return u32(imm); + } + u64 GetImmediateU64() const { + return value.GetImmediateAsU64(); + } + IR::Cond GetImmediateCond() const { + ASSERT(IsImmediate() && GetType() == IR::Type::Cond); + return value.GetCond(); + } + IR::AccType GetImmediateAccType() const { + ASSERT(IsImmediate() && GetType() == IR::Type::AccType); + return value.GetAccType(); + } private: friend class RegAlloc; - explicit Argument(RegAlloc& reg_alloc) - : reg_alloc{reg_alloc} {} - - bool allocated = false; + explicit Argument(RegAlloc& reg_alloc) : reg_alloc{reg_alloc} {} RegAlloc& reg_alloc; IR::Value value; + bool allocated = false; }; struct HostLocInfo final { @@ -57,9 +77,16 @@ struct HostLocInfo final { size_t expected_uses = 0; bool realized = false; - bool Contains(const IR::Inst*) const; - void SetupScratchLocation(); - bool IsCompletelyEmpty() const; + bool Contains(const IR::Inst* value) const { + return std::find(values.begin(), values.end(), value) != values.end(); + } + void SetupScratchLocation() { + ASSERT(IsCompletelyEmpty()); + realized = true; + } + bool IsCompletelyEmpty() const { + return values.empty() && !locked && !realized && !accumulated_uses && !expected_uses && !uses_this_inst; + } void UpdateUses(); }; @@ -67,7 +94,7 @@ class RegAlloc { public: using ArgumentInfo = std::array; - explicit RegAlloc(powah::Context& as) : as{as} {} + explicit RegAlloc(powah::Context& code) : code{code} {} ArgumentInfo GetArgumentInfo(IR::Inst* inst); bool IsValueLive(IR::Inst* inst) const; @@ -77,15 +104,13 @@ public: void UpdateAllUses(); void AssertNoMoreUses() const; - powah::GPR ScratchGpr(std::optional> desired_locations = {}); - void Use(Argument& arg, HostLoc host_loc); - void UseScratch(Argument& arg, HostLoc host_loc); + powah::GPR ScratchGpr(); powah::GPR UseGpr(Argument& arg); powah::GPR UseScratchGpr(Argument& arg); void DefineValue(IR::Inst* inst, powah::GPR const gpr) noexcept; void DefineValue(IR::Inst* inst, Argument& arg) noexcept; private: - u32 AllocateRegister(const std::array& regs, const std::vector& order) const; + std::optional AllocateRegister(const std::array& regs, const std::vector& order) const; void SpillGpr(u32 index); void SpillFpr(u32 index); u32 FindFreeSpill() const; @@ -94,7 +119,7 @@ private: HostLocInfo& ValueInfo(HostLoc host_loc); HostLocInfo& ValueInfo(const IR::Inst* value); - powah::Context& as; + powah::Context& code; std::array gprs; std::array fprs; std::array vprs;