diff --git a/src/common/x64/xbyak.h b/src/common/x64/xbyak.h index 5ee12576e9..9dec0370c4 100644 --- a/src/common/x64/xbyak.h +++ b/src/common/x64/xbyak.h @@ -24,14 +24,13 @@ // You must ensure this matches with src/common/x64/xbyak.h on root dir #include #include +#define XBYAK_NO_EXCEPTION 1 #define XBYAK_STD_UNORDERED_SET ankerl::unordered_dense::set #define XBYAK_STD_UNORDERED_MAP ankerl::unordered_dense::map #define XBYAK_STD_UNORDERED_MULTIMAP boost::unordered_multimap #include #include -#include - namespace Common::X64 { constexpr size_t RegToIndex(const Xbyak::Reg& reg) { diff --git a/src/dynarmic/CMakeLists.txt b/src/dynarmic/CMakeLists.txt index 4c4bf86d3e..633caaff27 100644 --- a/src/dynarmic/CMakeLists.txt +++ b/src/dynarmic/CMakeLists.txt @@ -113,6 +113,10 @@ else() # Clang mistakenly blames CMake for using unused arguments during compilation list(APPEND DYNARMIC_CXX_FLAGS -Wno-unused-command-line-argument) endif() + # TODO: oaknut exceptions + if ("x86_64" IN_LIST ARCHITECTURE) + list(APPEND DYNARMIC_CXX_FLAGS -fno-exceptions) + endif() endif() if (NOT Boost_FOUND) diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp index f41bea6c83..1a424f8970 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp @@ -66,10 +66,7 @@ public: #ifdef _WIN32 uint8_t* alloc(size_t size) override { void* p = VirtualAlloc(nullptr, size, MEM_RESERVE, PAGE_READWRITE); - if (p == nullptr) { - using Xbyak::Error; - XBYAK_THROW(Xbyak::ERR_CANT_ALLOC); - } + ASSERT(p != nullptr); return static_cast(p); } @@ -105,10 +102,7 @@ public: prot |= PROT_MPROTECT(PROT_READ) | PROT_MPROTECT(PROT_WRITE) | PROT_MPROTECT(PROT_EXEC); #endif void* p = mmap(nullptr, size, prot, mode, -1, 0); - if (p == MAP_FAILED) { - using Xbyak::Error; - XBYAK_THROW(Xbyak::ERR_CANT_ALLOC); - } + ASSERT(p != MAP_FAILED); std::memcpy(p, &size, sizeof(size_t)); return static_cast(p) + DYNARMIC_PAGE_SIZE; } @@ -532,13 +526,8 @@ size_t BlockOfCode::GetTotalCodeSize() const { } void* BlockOfCode::AllocateFromCodeSpace(size_t alloc_size) { - if (size_ + alloc_size >= maxSize_) { - using Xbyak::Error; - XBYAK_THROW(Xbyak::ERR_CODE_IS_TOO_BIG); - } - + ASSERT(size_ + alloc_size < maxSize_); EnsureMemoryCommitted(alloc_size); - void* ret = getCurr(); size_ += alloc_size; memset(ret, 0, alloc_size); diff --git a/src/dynarmic/src/dynarmic/backend/x64/xbyak.h b/src/dynarmic/src/dynarmic/backend/x64/xbyak.h index 38401678e6..a10348fd2f 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/xbyak.h +++ b/src/dynarmic/src/dynarmic/backend/x64/xbyak.h @@ -6,6 +6,7 @@ // You must ensure this matches with src/common/x64/xbyak.h on root dir #include #include +#define XBYAK_NO_EXCEPTION 1 #define XBYAK_STD_UNORDERED_SET ankerl::unordered_dense::set #define XBYAK_STD_UNORDERED_MAP ankerl::unordered_dense::map #define XBYAK_STD_UNORDERED_MULTIMAP boost::unordered_multimap