From 02d8a7ff10126e86810a95a210124f8220f39615 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sat, 17 Feb 2024 20:06:10 +0800 Subject: [PATCH] backend/rv64: Stub all IR instruction implementations --- src/dynarmic/CMakeLists.txt | 17 +- .../backend/riscv64/a32_interface.cpp | 4 +- src/dynarmic/backend/riscv64/emit_riscv64.cpp | 51 +- .../backend/riscv64/emit_riscv64_a32.cpp | 150 +- .../riscv64/emit_riscv64_a32_coprocessor.cpp | 55 + .../riscv64/emit_riscv64_a32_memory.cpp | 105 ++ .../backend/riscv64/emit_riscv64_a64.cpp | 200 +++ .../riscv64/emit_riscv64_a64_memory.cpp | 125 ++ .../riscv64/emit_riscv64_cryptography.cpp | 100 ++ .../riscv64/emit_riscv64_data_processing.cpp | 396 ++++- .../riscv64/emit_riscv64_floating_point.cpp | 445 ++++++ .../backend/riscv64/emit_riscv64_packed.cpp | 190 +++ .../riscv64/emit_riscv64_saturation.cpp | 130 ++ .../backend/riscv64/emit_riscv64_vector.cpp | 1395 +++++++++++++++++ .../emit_riscv64_vector_floating_point.cpp | 355 +++++ .../emit_riscv64_vector_saturation.cpp | 100 ++ src/dynarmic/backend/riscv64/reg_alloc.cpp | 2 +- 17 files changed, 3796 insertions(+), 24 deletions(-) create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_a32_coprocessor.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_a32_memory.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_a64.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_a64_memory.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_cryptography.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_floating_point.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_packed.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_saturation.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_vector.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_vector_floating_point.cpp create mode 100644 src/dynarmic/backend/riscv64/emit_riscv64_vector_saturation.cpp diff --git a/src/dynarmic/CMakeLists.txt b/src/dynarmic/CMakeLists.txt index f6340ff9..6f0813ca 100644 --- a/src/dynarmic/CMakeLists.txt +++ b/src/dynarmic/CMakeLists.txt @@ -404,8 +404,22 @@ if ("riscv" IN_LIST ARCHITECTURE) target_sources(dynarmic PRIVATE backend/riscv64/abi.h + backend/riscv64/a32_jitstate.cpp + backend/riscv64/a32_jitstate.h backend/riscv64/emit_context.h + backend/riscv64/emit_riscv64_a32.cpp + backend/riscv64/emit_riscv64_a32_coprocessor.cpp + backend/riscv64/emit_riscv64_a32_memory.cpp + backend/riscv64/emit_riscv64_a64.cpp + backend/riscv64/emit_riscv64_a64_memory.cpp + backend/riscv64/emit_riscv64_cryptography.cpp backend/riscv64/emit_riscv64_data_processing.cpp + backend/riscv64/emit_riscv64_floating_point.cpp + backend/riscv64/emit_riscv64_packed.cpp + backend/riscv64/emit_riscv64_saturation.cpp + backend/riscv64/emit_riscv64_vector_floating_point.cpp + backend/riscv64/emit_riscv64_vector_saturation.cpp + backend/riscv64/emit_riscv64_vector.cpp backend/riscv64/emit_riscv64.cpp backend/riscv64/emit_riscv64.h backend/riscv64/reg_alloc.cpp @@ -419,10 +433,7 @@ if ("riscv" IN_LIST ARCHITECTURE) backend/riscv64/a32_address_space.h backend/riscv64/a32_core.h backend/riscv64/a32_interface.cpp - backend/riscv64/a32_jitstate.cpp - backend/riscv64/a32_jitstate.h backend/riscv64/code_block.h - backend/riscv64/emit_riscv64_a32.cpp ) endif() diff --git a/src/dynarmic/backend/riscv64/a32_interface.cpp b/src/dynarmic/backend/riscv64/a32_interface.cpp index 02aabb33..dac4d2d2 100644 --- a/src/dynarmic/backend/riscv64/a32_interface.cpp +++ b/src/dynarmic/backend/riscv64/a32_interface.cpp @@ -49,7 +49,7 @@ struct Jit::Impl final { jit_interface->is_executing = false; }; - ASSERT_FALSE("Unimplemented"); + UNIMPLEMENTED(); RequestCacheInvalidation(); @@ -117,7 +117,7 @@ struct Jit::Impl final { } void DumpDisassembly() const { - ASSERT_FALSE("Unimplemented"); + UNIMPLEMENTED(); } private: diff --git a/src/dynarmic/backend/riscv64/emit_riscv64.cpp b/src/dynarmic/backend/riscv64/emit_riscv64.cpp index 0aae01f0..32a5506b 100644 --- a/src/dynarmic/backend/riscv64/emit_riscv64.cpp +++ b/src/dynarmic/backend/riscv64/emit_riscv64.cpp @@ -21,11 +21,6 @@ namespace Dynarmic::Backend::RV64 { -template -void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { - ASSERT_FALSE("Unimplemented opcode {} ", op); -} - template<> void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) {} @@ -36,13 +31,19 @@ void EmitIR(biscuit::Assembler&, EmitContext& ctx, IR::Ins } template<> -void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst); +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> -void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst); +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> -void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst); -template<> -void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst); +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} template<> void EmitIR(biscuit::Assembler&, EmitContext& ctx, IR::Inst* inst) { @@ -50,6 +51,16 @@ void EmitIR(biscuit::Assembler&, EmitContext& ctx, I ASSERT(ctx.reg_alloc.IsValueLive(inst)); } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> void EmitIR(biscuit::Assembler&, EmitContext& ctx, IR::Inst* inst) { [[maybe_unused]] auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -71,6 +82,26 @@ void EmitIR(biscuit::Assembler& as, EmitContext& ctx, I as.OR(Xnz, Xnz, Xscratch0); } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + EmittedBlockInfo EmitRV64(biscuit::Assembler& as, IR::Block block, const EmitConfig& emit_conf) { using namespace biscuit; diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_a32.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_a32.cpp index ff9bc462..95a11bec 100644 --- a/src/dynarmic/backend/riscv64/emit_riscv64_a32.cpp +++ b/src/dynarmic/backend/riscv64/emit_riscv64_a32.cpp @@ -205,6 +205,11 @@ void EmitA32Terminal(biscuit::Assembler& as, EmitContext& ctx) { EmitA32Terminal(as, ctx, ctx.block.GetTerminal(), location.SetSingleStepping(false), location.SingleStepping()); } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { const A32::Reg reg = inst->GetArg(0).GetA32RegRef(); @@ -215,6 +220,21 @@ void EmitIR(biscuit::Assembler& as, EmitContext& ctx as.LWU(Xresult, offsetof(A32JitState, regs) + sizeof(u32) * static_cast(reg), Xstate); } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { const A32::Reg reg = inst->GetArg(0).GetA32RegRef(); @@ -229,6 +249,56 @@ void EmitIR(biscuit::Assembler& as, EmitContext& ctx as.SW(Xvalue, offsetof(A32JitState, regs) + sizeof(u32) * static_cast(reg), Xstate); } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { + auto args = ctx.reg_alloc.GetArgumentInfo(inst); + + auto Xnzcv = ctx.reg_alloc.ReadX(args[0]); + RegAlloc::Realize(Xnzcv); + + as.SW(Xnzcv, offsetof(A32JitState, cpsr_nzcv), Xstate); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -249,13 +319,83 @@ void EmitIR(biscuit::Assembler& as, EmitContext& ctx, } template<> -void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { - auto args = ctx.reg_alloc.GetArgumentInfo(inst); +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} - auto Xnzcv = ctx.reg_alloc.ReadX(args[0]); - RegAlloc::Realize(Xnzcv); +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} - as.SW(Xnzcv, offsetof(A32JitState, cpsr_nzcv), Xstate); +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); } } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_a32_coprocessor.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_a32_coprocessor.cpp new file mode 100644 index 00000000..a014d57f --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_a32_coprocessor.cpp @@ -0,0 +1,55 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_a32_memory.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_a32_memory.cpp new file mode 100644 index 00000000..f9a3aabf --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_a32_memory.cpp @@ -0,0 +1,105 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_a64.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_a64.cpp new file mode 100644 index 00000000..38ea167f --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_a64.cpp @@ -0,0 +1,200 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_a64_memory.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_a64_memory.cpp new file mode 100644 index 00000000..a5c0c1b8 --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_a64_memory.cpp @@ -0,0 +1,125 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_cryptography.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_cryptography.cpp new file mode 100644 index 00000000..c1d3fa0e --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_cryptography.cpp @@ -0,0 +1,100 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_data_processing.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_data_processing.cpp index 90565af5..ffb82d74 100644 --- a/src/dynarmic/backend/riscv64/emit_riscv64_data_processing.cpp +++ b/src/dynarmic/backend/riscv64/emit_riscv64_data_processing.cpp @@ -17,6 +17,71 @@ namespace Dynarmic::Backend::RV64 { +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { const auto carry_inst = inst->GetAssociatedPseudoOperation(IR::Opcode::GetCarryFromOp); @@ -54,6 +119,86 @@ void EmitIR(biscuit::Assembler& as, EmitContext& } } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template static void AddImmWithFlags(biscuit::Assembler& as, biscuit::GPR rd, biscuit::GPR rs, u64 imm, biscuit::GPR flags) { static_assert(bitsize == 32 || bitsize == 64); @@ -122,19 +267,264 @@ static void EmitSub(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { AddImmWithFlags(as, *Xresult, *Xa, -imm, *Xflags); } } else { - ASSERT_FALSE("Unimplemented"); + UNIMPLEMENTED(); } } else { - ASSERT_FALSE("Unimplemented"); + UNIMPLEMENTED(); } } else { - ASSERT_FALSE("Unimplemented"); + UNIMPLEMENTED(); } } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + template<> void EmitIR(biscuit::Assembler& as, EmitContext& ctx, IR::Inst* inst) { EmitSub<32>(as, ctx, inst); } +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + } // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_floating_point.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_floating_point.cpp new file mode 100644 index 00000000..f6b6ecf7 --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_floating_point.cpp @@ -0,0 +1,445 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_packed.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_packed.cpp new file mode 100644 index 00000000..5272dbb1 --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_packed.cpp @@ -0,0 +1,190 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_saturation.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_saturation.cpp new file mode 100644 index 00000000..3bceeb08 --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_saturation.cpp @@ -0,0 +1,130 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_vector.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_vector.cpp new file mode 100644 index 00000000..31cfd65c --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_vector.cpp @@ -0,0 +1,1395 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_vector_floating_point.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_vector_floating_point.cpp new file mode 100644 index 00000000..c3bf9708 --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_vector_floating_point.cpp @@ -0,0 +1,355 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/emit_riscv64_vector_saturation.cpp b/src/dynarmic/backend/riscv64/emit_riscv64_vector_saturation.cpp new file mode 100644 index 00000000..0d3868ec --- /dev/null +++ b/src/dynarmic/backend/riscv64/emit_riscv64_vector_saturation.cpp @@ -0,0 +1,100 @@ +/* This file is part of the dynarmic project. + * Copyright (c) 2024 MerryMage + * SPDX-License-Identifier: 0BSD + */ + +#include +#include + +#include "dynarmic/backend/riscv64/a32_jitstate.h" +#include "dynarmic/backend/riscv64/abi.h" +#include "dynarmic/backend/riscv64/emit_context.h" +#include "dynarmic/backend/riscv64/emit_riscv64.h" +#include "dynarmic/backend/riscv64/reg_alloc.h" +#include "dynarmic/ir/basic_block.h" +#include "dynarmic/ir/microinstruction.h" +#include "dynarmic/ir/opcodes.h" + +namespace Dynarmic::Backend::RV64 { + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +template<> +void EmitIR(biscuit::Assembler&, EmitContext&, IR::Inst*) { + UNIMPLEMENTED(); +} + +} // namespace Dynarmic::Backend::RV64 diff --git a/src/dynarmic/backend/riscv64/reg_alloc.cpp b/src/dynarmic/backend/riscv64/reg_alloc.cpp index 1451b430..e8a0a64f 100644 --- a/src/dynarmic/backend/riscv64/reg_alloc.cpp +++ b/src/dynarmic/backend/riscv64/reg_alloc.cpp @@ -159,7 +159,7 @@ u32 RegAlloc::GenerateImmediate(const IR::Value& value) { return new_location_index; } else if constexpr (kind == HostLoc::Kind::Fpr) { - ASSERT_FALSE("Unimplemented"); + UNIMPLEMENTED(); } else { static_assert(Common::always_false_v>); }