diff --git a/src/dynarmic/src/dynarmic/backend/arm64/a32_address_space.cpp b/src/dynarmic/src/dynarmic/backend/arm64/a32_address_space.cpp index 01af361b27..499b663af9 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/a32_address_space.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/a32_address_space.cpp @@ -93,9 +93,9 @@ static void* EmitExclusiveReadCallTrampoline(oaknut::CodeGenerator& code, const code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(&conf)); + code.dx(std::bit_cast(&conf)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); return target; } @@ -151,9 +151,9 @@ static void* EmitExclusiveWriteCallTrampoline(oaknut::CodeGenerator& code, const code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(&conf)); + code.dx(std::bit_cast(&conf)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); return target; } @@ -219,7 +219,7 @@ void A32AddressSpace::EmitPrelude() { code.MOV(Xstate, X1); code.MOV(Xhalt, X2); if (conf.page_table) { - code.MOV(Xpagetable, mcl::bit_cast(conf.page_table)); + code.MOV(Xpagetable, std::bit_cast(conf.page_table)); } if (conf.fastmem_pointer) { code.MOV(Xfastmem, *conf.fastmem_pointer); @@ -258,7 +258,7 @@ void A32AddressSpace::EmitPrelude() { code.MOV(Xstate, X1); code.MOV(Xhalt, X2); if (conf.page_table) { - code.MOV(Xpagetable, mcl::bit_cast(conf.page_table)); + code.MOV(Xpagetable, std::bit_cast(conf.page_table)); } if (conf.fastmem_pointer) { code.MOV(Xfastmem, *conf.fastmem_pointer); @@ -317,9 +317,9 @@ void A32AddressSpace::EmitPrelude() { code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(this)); + code.dx(std::bit_cast(this)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); } prelude_info.return_from_run_code = code.xptr(); @@ -347,7 +347,7 @@ void A32AddressSpace::EmitPrelude() { code.align(8); code.l(l_return_to_dispatcher); - code.dx(mcl::bit_cast(prelude_info.return_to_dispatcher)); + code.dx(std::bit_cast(prelude_info.return_to_dispatcher)); prelude_info.end_of_prelude = code.offset(); @@ -369,7 +369,7 @@ EmitConfig A32AddressSpace::GetEmitConfig() { .check_halt_on_memory_access = conf.check_halt_on_memory_access, - .page_table_pointer = mcl::bit_cast(conf.page_table), + .page_table_pointer = std::bit_cast(conf.page_table), .page_table_address_space_bits = 32, .page_table_pointer_mask_bits = conf.page_table_pointer_mask_bits, .silently_mirror_page_table = true, diff --git a/src/dynarmic/src/dynarmic/backend/arm64/a64_address_space.cpp b/src/dynarmic/src/dynarmic/backend/arm64/a64_address_space.cpp index c4c1c42792..c4195b6af2 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/a64_address_space.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/a64_address_space.cpp @@ -92,9 +92,9 @@ static void* EmitExclusiveReadCallTrampoline(oaknut::CodeGenerator& code, const code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(&conf)); + code.dx(std::bit_cast(&conf)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); return target; } @@ -150,9 +150,9 @@ static void* EmitExclusiveWriteCallTrampoline(oaknut::CodeGenerator& code, const code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(&conf)); + code.dx(std::bit_cast(&conf)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); return target; } @@ -235,9 +235,9 @@ static void* EmitExclusiveRead128CallTrampoline(oaknut::CodeGenerator& code, con code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(&conf)); + code.dx(std::bit_cast(&conf)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); return target; } @@ -317,9 +317,9 @@ static void* EmitExclusiveWrite128CallTrampoline(oaknut::CodeGenerator& code, co code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(&conf)); + code.dx(std::bit_cast(&conf)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); return target; } @@ -396,7 +396,7 @@ void A64AddressSpace::EmitPrelude() { code.MOV(Xstate, X1); code.MOV(Xhalt, X2); if (conf.page_table) { - code.MOV(Xpagetable, mcl::bit_cast(conf.page_table)); + code.MOV(Xpagetable, std::bit_cast(conf.page_table)); } if (conf.fastmem_pointer) { code.MOV(Xfastmem, *conf.fastmem_pointer); @@ -434,7 +434,7 @@ void A64AddressSpace::EmitPrelude() { code.MOV(Xstate, X1); code.MOV(Xhalt, X2); if (conf.page_table) { - code.MOV(Xpagetable, mcl::bit_cast(conf.page_table)); + code.MOV(Xpagetable, std::bit_cast(conf.page_table)); } if (conf.fastmem_pointer) { code.MOV(Xfastmem, *conf.fastmem_pointer); @@ -492,9 +492,9 @@ void A64AddressSpace::EmitPrelude() { code.align(8); code.l(l_this); - code.dx(mcl::bit_cast(this)); + code.dx(std::bit_cast(this)); code.l(l_addr); - code.dx(mcl::bit_cast(Common::FptrCast(fn))); + code.dx(std::bit_cast(Common::FptrCast(fn))); } prelude_info.return_from_run_code = code.xptr(); @@ -522,7 +522,7 @@ void A64AddressSpace::EmitPrelude() { code.align(8); code.l(l_return_to_dispatcher); - code.dx(mcl::bit_cast(prelude_info.return_to_dispatcher)); + code.dx(std::bit_cast(prelude_info.return_to_dispatcher)); prelude_info.end_of_prelude = code.offset(); @@ -544,7 +544,7 @@ EmitConfig A64AddressSpace::GetEmitConfig() { .check_halt_on_memory_access = conf.check_halt_on_memory_access, - .page_table_pointer = mcl::bit_cast(conf.page_table), + .page_table_pointer = std::bit_cast(conf.page_table), .page_table_address_space_bits = conf.page_table_address_space_bits, .page_table_pointer_mask_bits = conf.page_table_pointer_mask_bits, .silently_mirror_page_table = conf.silently_mirror_page_table, diff --git a/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp b/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp index 614ca03364..c31c6d16d8 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp @@ -5,7 +5,7 @@ #include -#include +#include #include "dynarmic/backend/arm64/a64_address_space.h" #include "dynarmic/backend/arm64/a64_jitstate.h" @@ -99,7 +99,7 @@ void AddressSpace::ClearCache() { void AddressSpace::DumpDisassembly() const { for (u32* ptr = mem.ptr(); ptr < code.xptr(); ptr++) { - std::printf("%s", Common::DisassembleAArch64(*ptr, mcl::bit_cast(ptr)).c_str()); + std::printf("%s", Common::DisassembleAArch64(*ptr, std::bit_cast(ptr)).c_str()); } } @@ -316,7 +316,7 @@ void AddressSpace::RelinkForDescriptor(IR::LocationDescriptor target_descriptor, FakeCall AddressSpace::FastmemCallback(u64 host_pc) { { - const auto host_ptr = mcl::bit_cast(host_pc); + const auto host_ptr = std::bit_cast(host_pc); const auto entry_point = ReverseGetEntryPoint(host_ptr); if (!entry_point) { diff --git a/src/dynarmic/src/dynarmic/backend/arm64/devirtualize.h b/src/dynarmic/src/dynarmic/backend/arm64/devirtualize.h index 14dc3809a5..db520c5c90 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/devirtualize.h +++ b/src/dynarmic/src/dynarmic/backend/arm64/devirtualize.h @@ -8,7 +8,7 @@ #pragma once -#include +#include #include "dynarmic/common/common_types.h" #include @@ -23,7 +23,7 @@ struct DevirtualizedCall { template DevirtualizedCall DevirtualizeWindows(mcl::class_type* this_) { static_assert(sizeof(mfp) == 8); - return DevirtualizedCall{mcl::bit_cast(mfp), reinterpret_cast(this_)}; + return DevirtualizedCall{std::bit_cast(mfp), reinterpret_cast(this_)}; } // https://github.com/ARM-software/abi-aa/blob/main/cppabi64/cppabi64.rst#representation-of-pointer-to-member-function @@ -34,16 +34,16 @@ DevirtualizedCall DevirtualizeDefault(mcl::class_type* this_) { u64 ptr; // LSB is discriminator for if function is virtual. Other bits are this adjustment. u64 adj; - } mfp_struct = mcl::bit_cast(mfp); + } mfp_struct = std::bit_cast(mfp); static_assert(sizeof(MemberFunctionPointer) == 16); static_assert(sizeof(MemberFunctionPointer) == sizeof(mfp)); u64 fn_ptr = mfp_struct.ptr; - u64 this_ptr = mcl::bit_cast(this_) + (mfp_struct.adj >> 1); + u64 this_ptr = std::bit_cast(this_) + (mfp_struct.adj >> 1); if (mfp_struct.adj & 1) { - u64 vtable = mcl::bit_cast_pointee(this_ptr); - fn_ptr = mcl::bit_cast_pointee(vtable + fn_ptr); + u64 vtable = std::bit_cast(this_ptr); + fn_ptr = std::bit_cast(vtable + fn_ptr); } return DevirtualizedCall{fn_ptr, this_ptr}; } diff --git a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_a64.cpp b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_a64.cpp index 5152a54ba2..a5597344cf 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_a64.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_a64.cpp @@ -3,7 +3,7 @@ * SPDX-License-Identifier: 0BSD */ -#include +#include #include #include "dynarmic/backend/arm64/a64_jitstate.h" @@ -495,7 +495,7 @@ template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { auto Xvalue = ctx.reg_alloc.WriteX(inst); RegAlloc::Realize(Xvalue); - code.MOV(Xscratch0, mcl::bit_cast(ctx.conf.tpidr_el0)); + code.MOV(Xscratch0, std::bit_cast(ctx.conf.tpidr_el0)); code.LDR(Xvalue, Xscratch0); } @@ -503,7 +503,7 @@ template<> void EmitIR(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst) { auto Xvalue = ctx.reg_alloc.WriteX(inst); RegAlloc::Realize(Xvalue); - code.MOV(Xscratch0, mcl::bit_cast(ctx.conf.tpidrro_el0)); + code.MOV(Xscratch0, std::bit_cast(ctx.conf.tpidrro_el0)); code.LDR(Xvalue, Xscratch0); } @@ -512,7 +512,7 @@ void EmitIR(oaknut::CodeGenerator& code, EmitContext& c auto args = ctx.reg_alloc.GetArgumentInfo(inst); auto Xvalue = ctx.reg_alloc.ReadX(args[0]); RegAlloc::Realize(Xvalue); - code.MOV(Xscratch0, mcl::bit_cast(ctx.conf.tpidr_el0)); + code.MOV(Xscratch0, std::bit_cast(ctx.conf.tpidr_el0)); code.STR(Xvalue, Xscratch0); } diff --git a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.cpp b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.cpp index 339e2c59a0..4c28e6545a 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include "dynarmic/backend/arm64/abi.h" @@ -548,7 +548,7 @@ void FastmemEmitReadMemory(oaknut::CodeGenerator& code, EmitContext& ctx, IR::In FastmemPatchInfo{ .marker = marker, .fc = FakeCall{ - .call_pc = mcl::bit_cast(code.xptr()), + .call_pc = std::bit_cast(code.xptr()), }, .recompile = ctx.conf.recompile_on_fastmem_failure, }); @@ -598,7 +598,7 @@ void FastmemEmitWriteMemory(oaknut::CodeGenerator& code, EmitContext& ctx, IR::I FastmemPatchInfo{ .marker = marker, .fc = FakeCall{ - .call_pc = mcl::bit_cast(code.xptr()), + .call_pc = std::bit_cast(code.xptr()), }, .recompile = ctx.conf.recompile_on_fastmem_failure, }); diff --git a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_vector_floating_point.cpp b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_vector_floating_point.cpp index 09127df1c7..4ab4f6b165 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_vector_floating_point.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/emit_arm64_vector_floating_point.cpp @@ -6,7 +6,7 @@ * SPDX-License-Identifier: 0BSD */ -#include +#include #include #include #include @@ -269,7 +269,7 @@ static void EmitTwoOpFallbackWithoutRegAlloc(oaknut::CodeGenerator& code, EmitCo ABI_PushRegisters(code, ABI_CALLER_SAVE & ~(1ull << Qresult.index()), stack_size); - code.MOV(Xscratch0, mcl::bit_cast(fn)); + code.MOV(Xscratch0, std::bit_cast(fn)); code.ADD(X0, SP, 0 * 16); code.ADD(X1, SP, 1 * 16); code.MOV(X2, fpcr); diff --git a/src/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp b/src/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp index 557fd57065..843df2116f 100644 --- a/src/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp +++ b/src/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp @@ -14,7 +14,7 @@ #include "dynarmic/common/assert.h" #include -#include +#include #include #include "dynarmic/common/common_types.h" @@ -245,7 +245,7 @@ void RegAlloc::AssertNoMoreUses() const { } void RegAlloc::EmitVerboseDebuggingOutput() { - code.MOV(X19, mcl::bit_cast(&PrintVerboseDebuggingOutputLine)); // Non-volatile register + code.MOV(X19, std::bit_cast(&PrintVerboseDebuggingOutputLine)); // Non-volatile register const auto do_location = [&](HostLocInfo& info, HostLocType type, size_t index) { using namespace oaknut::util; diff --git a/src/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp b/src/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp index 76e517f05b..67eb704e29 100644 --- a/src/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp +++ b/src/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp @@ -19,7 +19,7 @@ #include #include "dynarmic/common/assert.h" -#include +#include #include #include "dynarmic/common/common_types.h" @@ -146,7 +146,7 @@ kern_return_t MachHandler::HandleRequest(x86_thread_state64_t* ts) { FakeCall fc = iter->cb(ts->__rip); ts->__rsp -= sizeof(u64); - *mcl::bit_cast(ts->__rsp) = fc.ret_rip; + *std::bit_cast(ts->__rsp) = fc.ret_rip; ts->__rip = fc.call_rip; return KERN_SUCCESS; @@ -271,13 +271,13 @@ ExceptionHandler::~ExceptionHandler() = default; #if defined(ARCHITECTURE_x86_64) void ExceptionHandler::Register(X64::BlockOfCode& code) { - const u64 code_begin = mcl::bit_cast(code.getCode()); + const u64 code_begin = std::bit_cast(code.getCode()); const u64 code_end = code_begin + code.GetTotalCodeSize(); impl = std::make_unique(code_begin, code_end); } #elif defined(ARCHITECTURE_arm64) void ExceptionHandler::Register(oaknut::CodeBlock& mem, std::size_t size) { - const u64 code_begin = mcl::bit_cast(mem.ptr()); + const u64 code_begin = std::bit_cast(mem.ptr()); const u64 code_end = code_begin + size; impl = std::make_unique(code_begin, code_end); } diff --git a/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp b/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp index f1f208179f..045c3868b1 100644 --- a/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp +++ b/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp @@ -27,7 +27,7 @@ #else # error "Invalid architecture" #endif -#include +#include namespace Dynarmic::Backend { @@ -122,7 +122,7 @@ void SigHandler::SigAction(int sig, siginfo_t* info, void* raw_context) { if (auto const iter = sig_handler->FindCodeBlockInfo(CTX_RIP); iter != sig_handler->code_block_infos.end()) { FakeCall fc = iter->second.cb(CTX_RIP); CTX_RSP -= sizeof(u64); - *mcl::bit_cast(CTX_RSP) = fc.ret_rip; + *std::bit_cast(CTX_RSP) = fc.ret_rip; CTX_RIP = fc.call_rip; return; } @@ -189,15 +189,15 @@ ExceptionHandler::~ExceptionHandler() = default; #if defined(MCL_ARCHITECTURE_X86_64) void ExceptionHandler::Register(X64::BlockOfCode& code) { - impl = std::make_unique(mcl::bit_cast(code.getCode()), code.GetTotalCodeSize()); + impl = std::make_unique(std::bit_cast(code.getCode()), code.GetTotalCodeSize()); } #elif defined(MCL_ARCHITECTURE_ARM64) void ExceptionHandler::Register(oaknut::CodeBlock& mem, std::size_t size) { - impl = std::make_unique(mcl::bit_cast(mem.ptr()), size); + impl = std::make_unique(std::bit_cast(mem.ptr()), size); } #elif defined(MCL_ARCHITECTURE_RISCV) void ExceptionHandler::Register(RV64::CodeBlock& mem, std::size_t size) { - impl = std::make_unique(mcl::bit_cast(mem.ptr()), size); + impl = std::make_unique(std::bit_cast(mem.ptr()), size); } #else # error "Invalid architecture" diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp index 382eb70f3f..6c27b4fb43 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp @@ -13,7 +13,7 @@ #include #include #include "dynarmic/common/assert.h" -#include +#include #include #include "dynarmic/common/common_types.h" @@ -47,7 +47,7 @@ static RunCodeCallbacks GenRunCodeCallbacks(A32::UserCallbacks* cb, CodePtr (*Lo static std::function GenRCP(const A32::UserConfig& conf) { return [conf](BlockOfCode& code) { if (conf.page_table) { - code.mov(code.r14, mcl::bit_cast(conf.page_table)); + code.mov(code.r14, std::bit_cast(conf.page_table)); } if (conf.fastmem_pointer) { code.mov(code.r13, *conf.fastmem_pointer); diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp index c65b582982..1ca2926a09 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp @@ -12,7 +12,7 @@ #include #include "dynarmic/common/assert.h" -#include +#include #include #include "dynarmic/backend/x64/a64_emit_x64.h" @@ -43,7 +43,7 @@ static RunCodeCallbacks GenRunCodeCallbacks(A64::UserCallbacks* cb, CodePtr (*Lo static std::function GenRCP(const A64::UserConfig& conf) { return [conf](BlockOfCode& code) { if (conf.page_table) { - code.mov(code.r14, mcl::bit_cast(conf.page_table)); + code.mov(code.r14, std::bit_cast(conf.page_table)); } if (conf.fastmem_pointer) { code.mov(code.r13, *conf.fastmem_pointer); diff --git a/src/dynarmic/src/dynarmic/backend/x64/devirtualize.h b/src/dynarmic/src/dynarmic/backend/x64/devirtualize.h index 318a702194..9d7e566d93 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/devirtualize.h +++ b/src/dynarmic/src/dynarmic/backend/x64/devirtualize.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include "dynarmic/common/common_types.h" #include @@ -42,7 +42,7 @@ ArgCallback DevirtualizeGeneric(mcl::class_type* this_) { template ArgCallback DevirtualizeWindows(mcl::class_type* this_) { static_assert(sizeof(mfp) == 8); - return ArgCallback{mcl::bit_cast(mfp), reinterpret_cast(this_)}; + return ArgCallback{std::bit_cast(mfp), reinterpret_cast(this_)}; } template @@ -53,7 +53,7 @@ ArgCallback DevirtualizeItanium(mcl::class_type* this_) { u64 ptr; /// The required adjustment to `this`, prior to the call. u64 adj; - } mfp_struct = mcl::bit_cast(mfp); + } mfp_struct = std::bit_cast(mfp); static_assert(sizeof(MemberFunctionPointer) == 16); static_assert(sizeof(MemberFunctionPointer) == sizeof(mfp)); @@ -61,8 +61,8 @@ ArgCallback DevirtualizeItanium(mcl::class_type* this_) { u64 fn_ptr = mfp_struct.ptr; u64 this_ptr = reinterpret_cast(this_) + mfp_struct.adj; if (mfp_struct.ptr & 1) { - u64 vtable = mcl::bit_cast_pointee(this_ptr); - fn_ptr = mcl::bit_cast_pointee(vtable + fn_ptr - 1); + u64 vtable = std::bit_cast(this_ptr); + fn_ptr = std::bit_cast(vtable + fn_ptr - 1); } return ArgCallback{fn_ptr, this_ptr}; } diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp index 5331942bf2..4fc2535f09 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp @@ -204,7 +204,7 @@ void PostProcessNaN(BlockOfCode& code, Xbyak::Xmm result, Xbyak::Xmm tmp) { // We allow for the case where op1 and result are the same register. We do not read from op1 once result is written to. template void EmitPostProcessNaNs(BlockOfCode& code, Xbyak::Xmm result, Xbyak::Xmm op1, Xbyak::Xmm op2, Xbyak::Reg64 tmp, Xbyak::Label end) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT exponent_mask = FP::FPInfo::exponent_mask; constexpr FPT mantissa_msb = FP::FPInfo::mantissa_msb; constexpr u8 mantissa_msb_bit = static_cast(FP::FPInfo::explicit_mantissa_width - 1); @@ -298,7 +298,7 @@ void FPTwoOp(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst, Function fn) { template void FPThreeOp(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst, Function fn) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -357,7 +357,7 @@ void FPThreeOp(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst, Function fn) template void FPAbs(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT non_sign_mask = FP::FPInfo::sign_mask - FPT(1u); auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -383,7 +383,7 @@ void EmitX64::EmitFPAbs64(EmitContext& ctx, IR::Inst* inst) { template void FPNeg(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT sign_mask = FP::FPInfo::sign_mask; auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -473,7 +473,7 @@ static void EmitFPMinMax(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { template static inline void EmitFPMinMaxNumeric(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) noexcept { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT default_nan = FP::FPInfo::DefaultNaN(); auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -625,7 +625,7 @@ void EmitX64::EmitFPMul64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPMulAdd(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; const auto fallback_fn = negate_product ? &FP::FPMulSub : &FP::FPMulAdd; auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -852,7 +852,7 @@ void EmitX64::EmitFPMulSub64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPMulX(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -912,7 +912,7 @@ void EmitX64::EmitFPMulX64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPRecipEstimate(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; if (fsize != 16) { if (ctx.HasOptimization(OptimizationFlag::Unsafe_ReducedErrorFP)) { @@ -958,7 +958,7 @@ void EmitX64::EmitFPRecipEstimate64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPRecipExponent(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; auto args = ctx.reg_alloc.GetArgumentInfo(inst); ctx.reg_alloc.HostCall(inst, args[0]); @@ -981,7 +981,7 @@ void EmitX64::EmitFPRecipExponent64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPRecipStepFused(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -1118,7 +1118,7 @@ void EmitX64::EmitFPRoundInt64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPRSqrtEstimate(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; if (fsize != 16) { if (ctx.HasOptimization(OptimizationFlag::Unsafe_ReducedErrorFP)) { @@ -1297,7 +1297,7 @@ void EmitX64::EmitFPRSqrtEstimate64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPRSqrtStepFused(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; auto args = ctx.reg_alloc.GetArgumentInfo(inst); diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc index af9f392662..6b51eb501c 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc @@ -4,6 +4,7 @@ */ #include +#include "dynarmic/common/fp/util.h" #define AxxEmitX64 CONCATENATE_TOKENS(Axx, EmitX64) #define AxxEmitContext CONCATENATE_TOKENS(Axx, EmitContext) @@ -102,10 +103,10 @@ void AxxEmitX64::EmitMemoryRead(AxxEmitContext& ctx, IR::Inst* inst) { code.call(wrapped_fn); fastmem_patch_info.emplace( - mcl::bit_cast(location), + std::bit_cast(location), FastmemPatchInfo{ - mcl::bit_cast(code.getCurr()), - mcl::bit_cast(wrapped_fn), + std::bit_cast(code.getCurr()), + std::bit_cast(wrapped_fn), *fastmem_marker, conf.recompile_on_fastmem_failure, }); @@ -189,10 +190,10 @@ void AxxEmitX64::EmitMemoryWrite(AxxEmitContext& ctx, IR::Inst* inst) { code.call(wrapped_fn); fastmem_patch_info.emplace( - mcl::bit_cast(location), + std::bit_cast(location), FastmemPatchInfo{ - mcl::bit_cast(code.getCurr()), - mcl::bit_cast(wrapped_fn), + std::bit_cast(code.getCurr()), + std::bit_cast(wrapped_fn), *fastmem_marker, conf.recompile_on_fastmem_failure, }); @@ -223,7 +224,7 @@ void AxxEmitX64::EmitExclusiveReadMemory(AxxEmitContext& ctx, IR::Inst* inst) { const bool ordered = IsOrdered(args[2].GetImmediateAccType()); if constexpr (bitsize != 128) { - using T = UnsignedIntegerN; + using T = FP::UnsignedIntegerN; ctx.reg_alloc.HostCall(inst, {}, args[1]); @@ -290,7 +291,7 @@ void AxxEmitX64::EmitExclusiveWriteMemory(AxxEmitContext& ctx, IR::Inst* inst) { code.mov(code.byte[code.ABI_JIT_PTR + offsetof(AxxJitState, exclusive_state)], u8(0)); code.mov(code.ABI_PARAM1, reinterpret_cast(&conf)); if constexpr (bitsize != 128) { - using T = UnsignedIntegerN; + using T = FP::UnsignedIntegerN; code.CallLambda( [](AxxUserConfig& conf, Axx::VAddr vaddr, T value) -> u32 { @@ -356,7 +357,7 @@ void AxxEmitX64::EmitExclusiveReadMemoryInline(AxxEmitContext& ctx, IR::Inst* in EmitExclusiveLock(code, conf, tmp, tmp2.cvt32()); code.mov(code.byte[code.ABI_JIT_PTR + offsetof(AxxJitState, exclusive_state)], u8(1)); - code.mov(tmp, mcl::bit_cast(GetExclusiveMonitorAddressPointer(conf.global_monitor, conf.processor_id))); + code.mov(tmp, std::bit_cast(GetExclusiveMonitorAddressPointer(conf.global_monitor, conf.processor_id))); code.mov(qword[tmp], vaddr); const auto fastmem_marker = ShouldFastmem(ctx, inst); @@ -369,10 +370,10 @@ void AxxEmitX64::EmitExclusiveReadMemoryInline(AxxEmitContext& ctx, IR::Inst* in const auto location = EmitReadMemoryMov(code, value_idx, src_ptr, ordered); fastmem_patch_info.emplace( - mcl::bit_cast(location), + std::bit_cast(location), FastmemPatchInfo{ - mcl::bit_cast(code.getCurr()), - mcl::bit_cast(wrapped_fn), + std::bit_cast(code.getCurr()), + std::bit_cast(wrapped_fn), *fastmem_marker, conf.recompile_on_exclusive_fastmem_failure, }); @@ -390,7 +391,7 @@ void AxxEmitX64::EmitExclusiveReadMemoryInline(AxxEmitContext& ctx, IR::Inst* in code.call(wrapped_fn); } - code.mov(tmp, mcl::bit_cast(GetExclusiveMonitorValuePointer(conf.global_monitor, conf.processor_id))); + code.mov(tmp, std::bit_cast(GetExclusiveMonitorValuePointer(conf.global_monitor, conf.processor_id))); EmitWriteMemoryMov(code, tmp, value_idx, false); EmitExclusiveUnlock(code, conf, tmp, tmp2.cvt32()); @@ -437,7 +438,7 @@ void AxxEmitX64::EmitExclusiveWriteMemoryInline(AxxEmitContext& ctx, IR::Inst* i SharedLabel end = GenSharedLabel(); - code.mov(tmp, mcl::bit_cast(GetExclusiveMonitorAddressPointer(conf.global_monitor, conf.processor_id))); + code.mov(tmp, std::bit_cast(GetExclusiveMonitorAddressPointer(conf.global_monitor, conf.processor_id))); code.mov(status, u32(1)); code.cmp(code.byte[code.ABI_JIT_PTR + offsetof(AxxJitState, exclusive_state)], u8(0)); code.je(*end, code.T_NEAR); @@ -447,7 +448,7 @@ void AxxEmitX64::EmitExclusiveWriteMemoryInline(AxxEmitContext& ctx, IR::Inst* i EmitExclusiveTestAndClear(code, conf, vaddr, tmp, rax); code.mov(code.byte[code.ABI_JIT_PTR + offsetof(AxxJitState, exclusive_state)], u8(0)); - code.mov(tmp, mcl::bit_cast(GetExclusiveMonitorValuePointer(conf.global_monitor, conf.processor_id))); + code.mov(tmp, std::bit_cast(GetExclusiveMonitorValuePointer(conf.global_monitor, conf.processor_id))); if constexpr (bitsize == 128) { code.mov(rax, qword[tmp + 0]); @@ -506,10 +507,10 @@ void AxxEmitX64::EmitExclusiveWriteMemoryInline(AxxEmitContext& ctx, IR::Inst* i code.call(wrapped_fn); fastmem_patch_info.emplace( - mcl::bit_cast(location), + std::bit_cast(location), FastmemPatchInfo{ - mcl::bit_cast(code.getCurr()), - mcl::bit_cast(wrapped_fn), + std::bit_cast(code.getCurr()), + std::bit_cast(wrapped_fn), *fastmem_marker, conf.recompile_on_exclusive_fastmem_failure, }); diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h index 75a47c6a80..a4abbe5cf8 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h @@ -3,7 +3,7 @@ * SPDX-License-Identifier: 0BSD */ -#include +#include #include #include "dynarmic/backend/x64/a32_emit_x64.h" @@ -342,7 +342,7 @@ void EmitExclusiveLock(BlockOfCode& code, const UserConfig& conf, Xbyak::Reg64 p return; } - code.mov(pointer, mcl::bit_cast(GetExclusiveMonitorLockPointer(conf.global_monitor))); + code.mov(pointer, std::bit_cast(GetExclusiveMonitorLockPointer(conf.global_monitor))); EmitSpinLockLock(code, pointer, tmp); } @@ -352,7 +352,7 @@ void EmitExclusiveUnlock(BlockOfCode& code, const UserConfig& conf, Xbyak::Reg64 return; } - code.mov(pointer, mcl::bit_cast(GetExclusiveMonitorLockPointer(conf.global_monitor))); + code.mov(pointer, std::bit_cast(GetExclusiveMonitorLockPointer(conf.global_monitor))); EmitSpinLockUnlock(code, pointer, tmp); } @@ -369,7 +369,7 @@ void EmitExclusiveTestAndClear(BlockOfCode& code, const UserConfig& conf, Xbyak: continue; } Xbyak::Label ok; - code.mov(pointer, mcl::bit_cast(GetExclusiveMonitorAddressPointer(conf.global_monitor, processor_index))); + code.mov(pointer, std::bit_cast(GetExclusiveMonitorAddressPointer(conf.global_monitor, processor_index))); code.cmp(qword[pointer], vaddr); code.jne(ok, code.T_NEAR); code.mov(qword[pointer], tmp); diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp index 6a693a2d61..50f5161564 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp @@ -17,6 +17,7 @@ #include "dynarmic/ir/basic_block.h" #include "dynarmic/ir/microinstruction.h" #include "dynarmic/ir/opcodes.h" +#include "dynarmic/common/fp/util.h" namespace Dynarmic::Backend::X64 { @@ -37,7 +38,7 @@ void EmitSignedSaturatedOp(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) Xbyak::Reg addend = ctx.reg_alloc.UseGpr(args[1]).changeBit(size); Xbyak::Reg overflow = ctx.reg_alloc.ScratchGpr().changeBit(size); - constexpr u64 int_max = static_cast((std::numeric_limits>::max)()); + constexpr u64 int_max = static_cast((std::numeric_limits>::max)()); if constexpr (size < 64) { code.xor_(overflow.cvt32(), overflow.cvt32()); code.bt(result.cvt32(), size - 1); @@ -81,7 +82,7 @@ void EmitUnsignedSaturatedOp(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst Xbyak::Reg op_result = ctx.reg_alloc.UseScratchGpr(args[0]).changeBit(size); Xbyak::Reg addend = ctx.reg_alloc.UseScratchGpr(args[1]).changeBit(size); - constexpr u64 boundary = op == Op::Add ? (std::numeric_limits>::max)() : 0; + constexpr u64 boundary = op == Op::Add ? (std::numeric_limits>::max)() : 0; if constexpr (op == Op::Add) { code.add(op_result, addend); diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp index ec73f74c98..dcf2cbc832 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp @@ -75,7 +75,7 @@ void MaybeStandardFPSCRValue(BlockOfCode& code, EmitContext& ctx, bool fpcr_cont template class Indexer, size_t narg> struct NaNHandler { public: - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; using function_type = void (*)(std::array, narg>&, FP::FPCR); @@ -157,33 +157,33 @@ Xbyak::Address GetVectorOf(BlockOfCode& code) { template Xbyak::Address GetNaNVector(BlockOfCode& code) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; return GetVectorOf::DefaultNaN()>(code); } template Xbyak::Address GetNegativeZeroVector(BlockOfCode& code) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; return GetVectorOf::Zero(true)>(code); } template Xbyak::Address GetNonSignMaskVector(BlockOfCode& code) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT non_sign_mask = FP::FPInfo::exponent_mask | FP::FPInfo::mantissa_mask; return GetVectorOf(code); } template Xbyak::Address GetSmallestNormalVector(BlockOfCode& code) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT smallest_normal_number = FP::FPValue::exponent_min, 1>(); return GetVectorOf(code); } -template value> +template value> Xbyak::Address GetVectorOf(BlockOfCode& code) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; return GetVectorOf()>(code); } @@ -1084,7 +1084,7 @@ static void EmitFPVectorMinMaxNumeric(BlockOfCode& code, EmitContext& ctx, IR::I if (code.HasHostFeature(HostFeature::AVX)) { MaybeStandardFPSCRValue(code, ctx, fpcr_controlled, [&] { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; // result = xmm_a == SNaN || xmm_b == QNaN { @@ -1157,7 +1157,7 @@ static void EmitFPVectorMinMaxNumeric(BlockOfCode& code, EmitContext& ctx, IR::I } MaybeStandardFPSCRValue(code, ctx, fpcr_controlled, [&] { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; // result = xmm_a == SNaN || xmm_b == QNaN { @@ -1313,7 +1313,7 @@ static void EmitFPVectorMulAddFallback(VectorArray& result, const VectorArr template void EmitFPVectorMulAdd(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; const auto fallback_fn = [](VectorArray& result, const VectorArray& addend, const VectorArray& op1, const VectorArray& op2, FP::FPCR fpcr, FP::FPSR& fpsr) { for (size_t i = 0; i < result.size(); i++) { @@ -1424,7 +1424,7 @@ void EmitX64::EmitFPVectorMulAdd64(EmitContext& ctx, IR::Inst* inst) { template static void EmitFPVectorMulX(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; auto args = ctx.reg_alloc.GetArgumentInfo(inst); const bool fpcr_controlled = args[2].GetImmediateU1(); @@ -1490,7 +1490,7 @@ void EmitX64::EmitFPVectorMulX64(EmitContext& ctx, IR::Inst* inst) { template void FPVectorNeg(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; constexpr FPT sign_mask = FP::FPInfo::sign_mask; auto args = ctx.reg_alloc.GetArgumentInfo(inst); @@ -1543,7 +1543,7 @@ void EmitX64::EmitFPVectorPairedAddLower64(EmitContext& ctx, IR::Inst* inst) { template static void EmitRecipEstimate(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; if constexpr (fsize != 16) { if (ctx.HasOptimization(OptimizationFlag::Unsafe_ReducedErrorFP)) { @@ -1589,7 +1589,7 @@ void EmitX64::EmitFPVectorRecipEstimate64(EmitContext& ctx, IR::Inst* inst) { template static void EmitRecipStepFused(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; const auto fallback_fn = [](VectorArray& result, const VectorArray& op1, const VectorArray& op2, FP::FPCR fpcr, FP::FPSR& fpsr) { for (size_t i = 0; i < result.size(); i++) { @@ -1713,7 +1713,7 @@ void EmitFPVectorRoundInt(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { } // Do not make a LUT out of this, let the compiler do it's thing - using FPT = mcl::unsigned_integer_of_size; + using FPT = FP::UnsignedIntegerN; switch (rounding) { case FP::RoundingMode::ToNearest_TieEven: exact @@ -1759,7 +1759,7 @@ void EmitX64::EmitFPVectorRoundInt64(EmitContext& ctx, IR::Inst* inst) { template static void EmitRSqrtEstimate(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; const auto fallback_fn = [](VectorArray& result, const VectorArray& operand, FP::FPCR fpcr, FP::FPSR& fpsr) { for (size_t i = 0; i < result.size(); i++) { @@ -1851,7 +1851,7 @@ void EmitX64::EmitFPVectorRSqrtEstimate64(EmitContext& ctx, IR::Inst* inst) { template static void EmitRSqrtStepFused(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { - using FPT = UnsignedIntegerN; + using FPT = FP::UnsignedIntegerN; const auto fallback_fn = [](VectorArray& result, const VectorArray& op1, const VectorArray& op2, FP::FPCR fpcr, FP::FPSR& fpsr) { for (size_t i = 0; i < result.size(); i++) { @@ -2125,7 +2125,7 @@ void EmitFPVectorToFixed(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { FCODE(orp)(src, exceed_unsigned); } } else { - using FPT = UnsignedIntegerN; // WORKAROUND: For issue 678 on MSVC + using FPT = FP::UnsignedIntegerN; // WORKAROUND: For issue 678 on MSVC constexpr u64 integer_max = FPT((std::numeric_limits>>::max)()); code.movaps(xmm0, GetVectorOf(code)); @@ -2149,7 +2149,7 @@ void EmitFPVectorToFixed(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) { mp::lift_value>; static const auto lut = Common::GenerateLookupTableFromList([](I) { - using FPT = UnsignedIntegerN; // WORKAROUND: For issue 678 on MSVC + using FPT = FP::UnsignedIntegerN; // WORKAROUND: For issue 678 on MSVC return std::pair{ mp::lower_to_tuple_v, Common::FptrCast([](VectorArray& output, const VectorArray& input, FP::FPCR fpcr, FP::FPSR& fpsr) { diff --git a/src/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp b/src/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp index 95eacaae9b..4d2ca9de9a 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp @@ -13,7 +13,7 @@ #include #include "dynarmic/common/assert.h" -#include +#include #include "dynarmic/common/common_types.h" #include "dynarmic/backend/exception_handler.h" @@ -184,20 +184,20 @@ struct ExceptionHandler::Impl final { // Our 3rd argument is a PCONTEXT. // If not within our codeblock, ignore this exception. - code.mov(code.rax, Safe::Negate(mcl::bit_cast(code.getCode()))); + code.mov(code.rax, Safe::Negate(std::bit_cast(code.getCode()))); code.add(code.rax, code.qword[code.ABI_PARAM3 + Xbyak::RegExp(offsetof(CONTEXT, Rip))]); code.cmp(code.rax, static_cast(code.GetTotalCodeSize())); code.ja(exception_handler_without_cb); code.lea(code.rsp, code.ptr[code.rsp - 8]); - code.mov(code.ABI_PARAM1, mcl::bit_cast(&cb)); + code.mov(code.ABI_PARAM1, std::bit_cast(&cb)); code.mov(code.ABI_PARAM2, code.ABI_PARAM3); code.CallLambda( [](const std::function& cb_, PCONTEXT ctx) { FakeCall fc = cb_(ctx->Rip); ctx->Rsp -= sizeof(u64); - *mcl::bit_cast(ctx->Rsp) = fc.ret_rip; + *std::bit_cast(ctx->Rsp) = fc.ret_rip; ctx->Rip = fc.call_rip; }); code.add(code.rsp, 8); diff --git a/src/dynarmic/src/dynarmic/backend/x64/perf_map.h b/src/dynarmic/src/dynarmic/backend/x64/perf_map.h index 7d739ae63e..363dcfdbe9 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/perf_map.h +++ b/src/dynarmic/src/dynarmic/backend/x64/perf_map.h @@ -7,7 +7,7 @@ #include -#include +#include namespace Dynarmic::Backend::X64 { @@ -17,7 +17,7 @@ void PerfMapRegister(const void* start, const void* end, std::string_view friend template void PerfMapRegister(T start, const void* end, std::string_view friendly_name) { - detail::PerfMapRegister(mcl::bit_cast(start), end, friendly_name); + detail::PerfMapRegister(std::bit_cast(start), end, friendly_name); } void PerfMapClear(); diff --git a/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp b/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp index 29eab7908b..f9dc662930 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp @@ -14,7 +14,7 @@ #include #include "dynarmic/common/assert.h" -#include +#include #include #include "dynarmic/backend/x64/abi.h" diff --git a/src/dynarmic/src/dynarmic/common/assert.h b/src/dynarmic/src/dynarmic/common/assert.h index 0a3cb5331d..ce5e66edf9 100644 --- a/src/dynarmic/src/dynarmic/common/assert.h +++ b/src/dynarmic/src/dynarmic/common/assert.h @@ -16,38 +16,33 @@ template // Temporary until MCL is fully removed #ifndef ASSERT_MSG -#define ASSERT_MSG(_a_, ...) \ - ([&]() { \ - if (!(_a_)) [[unlikely]] { \ - assert_terminate(#_a_, __VA_ARGS__); \ - } \ - }()) +# define ASSERT_MSG(_a_, ...) do if (!(_a_)) [[unlikely]] assert_terminate(#_a_, __VA_ARGS__); while(0) #endif #ifndef ASSERT_FALSE -#define ASSERT_FALSE(...) \ - ([&]() { \ - assert_terminate("false", __VA_ARGS__); \ - }()) +# define ASSERT_FALSE(...) assert_terminate("false", __VA_ARGS__) #endif - #ifndef ASSERT -#define ASSERT(_a_) ASSERT_MSG(_a_, "") +# define ASSERT(_a_) ASSERT_MSG(_a_, "") #endif #ifndef UNREACHABLE -#define UNREACHABLE() ASSERT_MSG(false, "unreachable") +# ifdef _MSC_VER +# define UNREACHABLE() ASSERT_FALSE("unreachable") +# else +# define UNREACHABLE() __builtin_unreachable(); +# endif #endif #ifdef _DEBUG -#ifndef DEBUG_ASSERT -#define DEBUG_ASSERT(_a_) ASSERT(_a_) -#endif -#ifndef DEBUG_ASSERT_MSG -#define DEBUG_ASSERT_MSG(_a_, ...) ASSERT_MSG(_a_, __VA_ARGS__) -#endif +# ifndef DEBUG_ASSERT +# define DEBUG_ASSERT(_a_) ASSERT(_a_) +# endif +# ifndef DEBUG_ASSERT_MSG +# define DEBUG_ASSERT_MSG(_a_, ...) ASSERT_MSG(_a_, __VA_ARGS__) +# endif #else // not debug -#ifndef DEBUG_ASSERT -#define DEBUG_ASSERT(_a_) -#endif -#ifndef DEBUG_ASSERT_MSG -#define DEBUG_ASSERT_MSG(_a_, _desc_, ...) -#endif +# ifndef DEBUG_ASSERT +# define DEBUG_ASSERT(_a_) +# endif +# ifndef DEBUG_ASSERT_MSG +# define DEBUG_ASSERT_MSG(_a_, _desc_, ...) +# endif #endif diff --git a/src/dynarmic/src/dynarmic/common/fp/util.h b/src/dynarmic/src/dynarmic/common/fp/util.h index ac4a0efb1b..9e06d0ee59 100644 --- a/src/dynarmic/src/dynarmic/common/fp/util.h +++ b/src/dynarmic/src/dynarmic/common/fp/util.h @@ -104,7 +104,7 @@ template<> struct IntegerOfSize<16> { using U = std::uint16_t, S = std::int16_t; template<> struct IntegerOfSize<32> { using U = std::uint32_t, S = std::int32_t; }; template<> struct IntegerOfSize<64> { using U = std::uint64_t, S = std::int64_t; }; } -using UnsignedIntegerN = typename Detail::IntegerOfSize::U; -using SignedIntegerN = typename Detail::IntegerOfSize::S; +template using FP::UnsignedIntegerN = typename Detail::IntegerOfSize::U; +template using FP::SignedIntegerN = typename Detail::IntegerOfSize::S; } // namespace Dynarmic::FP diff --git a/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp b/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp index 31d55c134c..96fe94d9ea 100644 --- a/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp +++ b/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp @@ -16,7 +16,7 @@ #endif #include "dynarmic/common/assert.h" -#include +#include #include "dynarmic/common/common_types.h" #include "dynarmic/common/llvm_disassemble.h" @@ -53,7 +53,7 @@ std::string DisassembleX64(const void* begin, const void* end) { LLVMDisasmDispose(llvm_ctx); #else result += fmt::format("(recompile with DYNARMIC_USE_LLVM=ON to disassemble the generated x86_64 code)\n"); - result += fmt::format("start: {:016x}, end: {:016x}\n", mcl::bit_cast(begin), mcl::bit_cast(end)); + result += fmt::format("start: {:016x}, end: {:016x}\n", std::bit_cast(begin), std::bit_cast(end)); #endif return result; diff --git a/src/dynarmic/src/dynarmic/ir/ir_emitter.cpp b/src/dynarmic/src/dynarmic/ir/ir_emitter.cpp index a8ef7e2989..08758f0e6d 100644 --- a/src/dynarmic/src/dynarmic/ir/ir_emitter.cpp +++ b/src/dynarmic/src/dynarmic/ir/ir_emitter.cpp @@ -11,7 +11,7 @@ #include #include "dynarmic/common/assert.h" -#include +#include #include "dynarmic/ir/opcodes.h" diff --git a/src/dynarmic/src/dynarmic/ir/ir_emitter.h b/src/dynarmic/src/dynarmic/ir/ir_emitter.h index dba34bcc56..d041337ae1 100644 --- a/src/dynarmic/src/dynarmic/ir/ir_emitter.h +++ b/src/dynarmic/src/dynarmic/ir/ir_emitter.h @@ -12,7 +12,7 @@ #include "dynarmic/common/common_types.h" #include "dynarmic/common/assert.h" -#include +#include #include "dynarmic/ir/opcodes.h" #include "dynarmic/ir/acc_type.h" @@ -2931,19 +2931,19 @@ public: } void CallHostFunction(void (*fn)(void)) { - Inst(Opcode::CallHostFunction, Imm64(mcl::bit_cast(fn)), Value{}, Value{}, Value{}); + Inst(Opcode::CallHostFunction, Imm64(std::bit_cast(fn)), Value{}, Value{}, Value{}); } void CallHostFunction(void (*fn)(u64), const U64& arg1) { - Inst(Opcode::CallHostFunction, Imm64(mcl::bit_cast(fn)), arg1, Value{}, Value{}); + Inst(Opcode::CallHostFunction, Imm64(std::bit_cast(fn)), arg1, Value{}, Value{}); } void CallHostFunction(void (*fn)(u64, u64), const U64& arg1, const U64& arg2) { - Inst(Opcode::CallHostFunction, Imm64(mcl::bit_cast(fn)), arg1, arg2, Value{}); + Inst(Opcode::CallHostFunction, Imm64(std::bit_cast(fn)), arg1, arg2, Value{}); } void CallHostFunction(void (*fn)(u64, u64, u64), const U64& arg1, const U64& arg2, const U64& arg3) { - Inst(Opcode::CallHostFunction, Imm64(mcl::bit_cast(fn)), arg1, arg2, arg3); + Inst(Opcode::CallHostFunction, Imm64(std::bit_cast(fn)), arg1, arg2, arg3); } void SetTerm(const Terminal& terminal) {