mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 03:18:55 +02:00
[dynarmic] nuke mcl dependency (#3777)
crueter will love this one mcl nuked off externals, i did however copy some important headers (notably intrusive list and bit.hpp); because grand part of dynarmic still uses them but i made the appropriate adjustments anyways solves mcl for #3373 depends on #3718 Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3777 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
813a35abca
commit
47c6a73971
120 changed files with 1284 additions and 539 deletions
|
|
@ -1,55 +0,0 @@
|
||||||
diff --git a/include/mcl/assert.hpp b/include/mcl/assert.hpp
|
|
||||||
index f77dbe7..9ec0b9c 100644
|
|
||||||
--- a/include/mcl/assert.hpp
|
|
||||||
+++ b/include/mcl/assert.hpp
|
|
||||||
@@ -23,8 +23,11 @@ template<typename... Ts>
|
|
||||||
|
|
||||||
} // namespace mcl::detail
|
|
||||||
|
|
||||||
+#ifndef UNREACHABLE
|
|
||||||
#define UNREACHABLE() ASSERT_FALSE("Unreachable code!")
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
+#ifndef ASSERT
|
|
||||||
#define ASSERT(expr) \
|
|
||||||
[&] { \
|
|
||||||
if (std::is_constant_evaluated()) { \
|
|
||||||
@@ -37,7 +40,9 @@ template<typename... Ts>
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
}()
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
+#ifndef ASSERT_MSG
|
|
||||||
#define ASSERT_MSG(expr, ...) \
|
|
||||||
[&] { \
|
|
||||||
if (std::is_constant_evaluated()) { \
|
|
||||||
@@ -50,13 +55,24 @@ template<typename... Ts>
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
}()
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
+#ifndef ASSERT_FALSE
|
|
||||||
#define ASSERT_FALSE(...) ::mcl::detail::assert_terminate("false", __VA_ARGS__)
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#if defined(NDEBUG) || defined(MCL_IGNORE_ASSERTS)
|
|
||||||
-# define DEBUG_ASSERT(expr) ASSUME(expr)
|
|
||||||
-# define DEBUG_ASSERT_MSG(expr, ...) ASSUME(expr)
|
|
||||||
+# ifndef DEBUG_ASSERT
|
|
||||||
+# define DEBUG_ASSERT(expr) ASSUME(expr)
|
|
||||||
+# endif
|
|
||||||
+# ifndef DEBUG_ASSERT_MSG
|
|
||||||
+# define DEBUG_ASSERT_MSG(expr, ...) ASSUME(expr)
|
|
||||||
+# endif
|
|
||||||
#else
|
|
||||||
-# define DEBUG_ASSERT(expr) ASSERT(expr)
|
|
||||||
-# define DEBUG_ASSERT_MSG(expr, ...) ASSERT_MSG(expr, __VA_ARGS__)
|
|
||||||
+# ifndef DEBUG_ASSERT
|
|
||||||
+# define DEBUG_ASSERT(expr) ASSERT(expr)
|
|
||||||
+# endif
|
|
||||||
+# ifndef DEBUG_ASSERT_MSG
|
|
||||||
+# define DEBUG_ASSERT_MSG(expr, ...) ASSERT_MSG(expr, __VA_ARGS__)
|
|
||||||
+# endif
|
|
||||||
#endif
|
|
||||||
|
|
@ -526,7 +526,6 @@ if (NOT YUZU_STATIC_ROOM)
|
||||||
find_package(SPIRV-Tools)
|
find_package(SPIRV-Tools)
|
||||||
find_package(sirit)
|
find_package(sirit)
|
||||||
find_package(gamemode)
|
find_package(gamemode)
|
||||||
find_package(mcl)
|
|
||||||
find_package(frozen)
|
find_package(frozen)
|
||||||
|
|
||||||
if (ARCHITECTURE_riscv64)
|
if (ARCHITECTURE_riscv64)
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,6 @@ Certain other dependencies will be fetched by CPM regardless. System packages *c
|
||||||
* This package is known to be broken on the AUR.
|
* This package is known to be broken on the AUR.
|
||||||
* [cpp-jwt](https://github.com/arun11299/cpp-jwt) 1.4+ - if `ENABLE_WEB_SERVICE` is on
|
* [cpp-jwt](https://github.com/arun11299/cpp-jwt) 1.4+ - if `ENABLE_WEB_SERVICE` is on
|
||||||
* [unordered-dense](https://github.com/martinus/unordered_dense)
|
* [unordered-dense](https://github.com/martinus/unordered_dense)
|
||||||
* [mcl](https://github.com/azahar-emu/mcl) - subject to removal
|
|
||||||
|
|
||||||
On amd64:
|
On amd64:
|
||||||
|
|
||||||
|
|
|
||||||
3
externals/CMakeLists.txt
vendored
3
externals/CMakeLists.txt
vendored
|
|
@ -76,9 +76,6 @@ if (ARCHITECTURE_riscv64)
|
||||||
AddJsonPackage(biscuit)
|
AddJsonPackage(biscuit)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# mcl
|
|
||||||
AddJsonPackage(mcl)
|
|
||||||
|
|
||||||
# Vulkan stuff
|
# Vulkan stuff
|
||||||
AddDependentPackages(vulkan-headers vulkan-utility-libraries)
|
AddDependentPackages(vulkan-headers vulkan-utility-libraries)
|
||||||
|
|
||||||
|
|
|
||||||
12
externals/cpmfile.json
vendored
12
externals/cpmfile.json
vendored
|
|
@ -208,18 +208,6 @@
|
||||||
"version": "0.9.1",
|
"version": "0.9.1",
|
||||||
"git_version": "0.19.0"
|
"git_version": "0.19.0"
|
||||||
},
|
},
|
||||||
"mcl": {
|
|
||||||
"version": "0.1.12",
|
|
||||||
"repo": "azahar-emu/mcl",
|
|
||||||
"sha": "7b08d83418",
|
|
||||||
"hash": "9c6ba624cb22ef622f78046a82abb99bf5026284ba17dfacaf46ac842cbd3b0f515f5ba45a1598c7671318a78a2e648db72ce8d10e7537f34e39800bdcb57694",
|
|
||||||
"options": [
|
|
||||||
"MCL_INSTALL OFF"
|
|
||||||
],
|
|
||||||
"patches": [
|
|
||||||
"0001-assert-macro.patch"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"libusb": {
|
"libusb": {
|
||||||
"repo": "libusb/libusb",
|
"repo": "libusb/libusb",
|
||||||
"tag": "v%VERSION%",
|
"tag": "v%VERSION%",
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,9 @@ if (MSVC)
|
||||||
/Zc:throwingNew # Assumes new (without std::nothrow) never returns null.
|
/Zc:throwingNew # Assumes new (without std::nothrow) never returns null.
|
||||||
/volatile:iso # Use strict standard-abiding volatile semantics
|
/volatile:iso # Use strict standard-abiding volatile semantics
|
||||||
/bigobj # Increase number of sections in .obj files
|
/bigobj # Increase number of sections in .obj files
|
||||||
/DNOMINMAX)
|
/DNOMINMAX
|
||||||
|
/GR-
|
||||||
|
)
|
||||||
|
|
||||||
if (CXX_CLANG)
|
if (CXX_CLANG)
|
||||||
list(APPEND DYNARMIC_CXX_FLAGS
|
list(APPEND DYNARMIC_CXX_FLAGS
|
||||||
|
|
@ -91,8 +93,10 @@ else()
|
||||||
-Wextra
|
-Wextra
|
||||||
-Wcast-qual
|
-Wcast-qual
|
||||||
-pedantic
|
-pedantic
|
||||||
-Wno-missing-braces)
|
-Wno-missing-braces
|
||||||
|
-fno-rtti
|
||||||
|
#-fno-exceptions
|
||||||
|
)
|
||||||
if (CXX_GCC)
|
if (CXX_GCC)
|
||||||
# GCC produces bogus -Warray-bounds warnings from xbyak headers for code paths that are not
|
# GCC produces bogus -Warray-bounds warnings from xbyak headers for code paths that are not
|
||||||
# actually reachable. Specifically, it happens in cases where some code casts an Operand&
|
# actually reachable. Specifically, it happens in cases where some code casts an Operand&
|
||||||
|
|
@ -102,7 +106,6 @@ else()
|
||||||
list(APPEND DYNARMIC_CXX_FLAGS -Wno-array-bounds)
|
list(APPEND DYNARMIC_CXX_FLAGS -Wno-array-bounds)
|
||||||
list(APPEND DYNARMIC_CXX_FLAGS -Wstack-usage=4096)
|
list(APPEND DYNARMIC_CXX_FLAGS -Wstack-usage=4096)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (CXX_CLANG)
|
if (CXX_CLANG)
|
||||||
# Bracket depth determines maximum size of a fold expression in Clang since 9c9974c3ccb6.
|
# Bracket depth determines maximum size of a fold expression in Clang since 9c9974c3ccb6.
|
||||||
# And this in turns limits the size of a std::array.
|
# And this in turns limits the size of a std::array.
|
||||||
|
|
@ -117,7 +120,6 @@ if (NOT Boost_FOUND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(fmt 8 CONFIG)
|
find_package(fmt 8 CONFIG)
|
||||||
find_package(mcl 0.1.12 REQUIRED)
|
|
||||||
find_package(unordered_dense REQUIRED)
|
find_package(unordered_dense REQUIRED)
|
||||||
|
|
||||||
if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS)
|
if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
string(TOUPPER "${arch}" arch)
|
string(TOUPPER "${arch}" arch)
|
||||||
file(READ "${input_file}" f_contents)
|
file(READ "${input_file}" f_contents)
|
||||||
file(WRITE "${output_file}" "#include <mcl/macro/architecture.hpp>\n#if defined(MCL_ARCHITECTURE_${arch})\n${f_contents}\n#endif\n")
|
file(WRITE "${output_file}" "#if defined(ARCHITECTURE_${arch})\n${f_contents}\n#endif\n")
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,12 @@
|
||||||
include(TargetArchitectureSpecificSources)
|
include(TargetArchitectureSpecificSources)
|
||||||
|
|
||||||
add_library(dynarmic STATIC
|
add_library(dynarmic STATIC
|
||||||
|
mcl/bit.hpp
|
||||||
|
mcl/function_info.hpp
|
||||||
|
mcl/integer_of_size.hpp
|
||||||
|
mcl/intrusive_list.hpp
|
||||||
|
mcl/is_instance_of_template.hpp
|
||||||
|
|
||||||
backend/block_range_information.cpp
|
backend/block_range_information.cpp
|
||||||
backend/block_range_information.h
|
backend/block_range_information.h
|
||||||
backend/exception_handler.h
|
backend/exception_handler.h
|
||||||
|
|
@ -353,7 +359,7 @@ set_target_properties(dynarmic PROPERTIES
|
||||||
target_compile_options(dynarmic PRIVATE ${DYNARMIC_CXX_FLAGS})
|
target_compile_options(dynarmic PRIVATE ${DYNARMIC_CXX_FLAGS})
|
||||||
|
|
||||||
target_link_libraries(dynarmic PRIVATE unordered_dense::unordered_dense)
|
target_link_libraries(dynarmic PRIVATE unordered_dense::unordered_dense)
|
||||||
target_link_libraries(dynarmic PUBLIC fmt::fmt merry::mcl)
|
target_link_libraries(dynarmic PUBLIC fmt::fmt)
|
||||||
|
|
||||||
if (BOOST_NO_HEADERS)
|
if (BOOST_NO_HEADERS)
|
||||||
target_link_libraries(dynarmic PRIVATE Boost::variant Boost::icl Boost::pool)
|
target_link_libraries(dynarmic PRIVATE Boost::variant Boost::icl Boost::pool)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
#include <boost/icl/interval_set.hpp>
|
#include <boost/icl/interval_set.hpp>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a32_address_space.h"
|
#include "dynarmic/backend/arm64/a32_address_space.h"
|
||||||
|
|
@ -36,14 +35,9 @@ struct Jit::Impl final {
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
||||||
|
|
||||||
jit_interface->is_executing = true;
|
jit_interface->is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
jit_interface->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
HaltReason hr = core.Run(current_address_space, current_state, &halt_reason);
|
HaltReason hr = core.Run(current_address_space, current_state, &halt_reason);
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
jit_interface->is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,14 +46,9 @@ struct Jit::Impl final {
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
||||||
|
|
||||||
jit_interface->is_executing = true;
|
jit_interface->is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
jit_interface->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
HaltReason hr = core.Step(current_address_space, current_state, &halt_reason);
|
HaltReason hr = core.Step(current_address_space, current_state, &halt_reason);
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
jit_interface->is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
namespace Dynarmic::Backend::Arm64 {
|
namespace Dynarmic::Backend::Arm64 {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
#include <boost/icl/interval_set.hpp>
|
#include <boost/icl/interval_set.hpp>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a64_address_space.h"
|
#include "dynarmic/backend/arm64/a64_address_space.h"
|
||||||
|
|
@ -34,32 +33,20 @@ struct Jit::Impl final {
|
||||||
HaltReason Run() {
|
HaltReason Run() {
|
||||||
ASSERT(!is_executing);
|
ASSERT(!is_executing);
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
||||||
|
|
||||||
is_executing = true;
|
is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
HaltReason hr = core.Run(current_address_space, current_state, &halt_reason);
|
HaltReason hr = core.Run(current_address_space, current_state, &halt_reason);
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HaltReason Step() {
|
HaltReason Step() {
|
||||||
ASSERT(!is_executing);
|
ASSERT(!is_executing);
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&halt_reason)));
|
||||||
|
|
||||||
is_executing = true;
|
is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
HaltReason hr = core.Step(current_address_space, current_state, &halt_reason);
|
HaltReason hr = core.Step(current_address_space, current_state, &halt_reason);
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
|
|
@ -37,7 +36,7 @@ constexpr auto Rscratch0() {
|
||||||
} else if constexpr (bitsize == 64) {
|
} else if constexpr (bitsize == 64) {
|
||||||
return Xscratch0;
|
return Xscratch0;
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<bitsize>>);
|
return Xscratch0; //UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -48,7 +47,7 @@ constexpr auto Rscratch1() {
|
||||||
} else if constexpr (bitsize == 64) {
|
} else if constexpr (bitsize == 64) {
|
||||||
return Xscratch1;
|
return Xscratch1;
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<bitsize>>);
|
return Xscratch1; //UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <bit>
|
#include <bit>
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/function_info.hpp>
|
#include "dynarmic/mcl/function_info.hpp"
|
||||||
|
|
||||||
namespace Dynarmic::Backend::Arm64 {
|
namespace Dynarmic::Backend::Arm64 {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
||||||
|
|
@ -46,7 +45,7 @@ static void EmitTwoOpArranged(oaknut::CodeGenerator& code, EmitContext& ctx, IR:
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qoperand->D2());
|
emit(Qresult->D2(), Qoperand->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +68,7 @@ static void EmitTwoOpArrangedWiden(oaknut::CodeGenerator& code, EmitContext& ctx
|
||||||
} else if constexpr (size == 32) {
|
} else if constexpr (size == 32) {
|
||||||
emit(Qresult->D2(), Qoperand->toD().S2());
|
emit(Qresult->D2(), Qoperand->toD().S2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -84,7 +83,7 @@ static void EmitTwoOpArrangedNarrow(oaknut::CodeGenerator& code, EmitContext& ct
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->toD().S2(), Qoperand->D2());
|
emit(Qresult->toD().S2(), Qoperand->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -107,7 +106,7 @@ static void EmitTwoOpArrangedPairWiden(oaknut::CodeGenerator& code, EmitContext&
|
||||||
} else if constexpr (size == 32) {
|
} else if constexpr (size == 32) {
|
||||||
emit(Qresult->D2(), Qoperand->S4());
|
emit(Qresult->D2(), Qoperand->S4());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -122,7 +121,7 @@ static void EmitTwoOpArrangedLower(oaknut::CodeGenerator& code, EmitContext& ctx
|
||||||
} else if constexpr (size == 32) {
|
} else if constexpr (size == 32) {
|
||||||
emit(Qresult->toD().S2(), Qoperand->toD().S2());
|
emit(Qresult->toD().S2(), Qoperand->toD().S2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -150,7 +149,7 @@ static void EmitThreeOpArranged(oaknut::CodeGenerator& code, EmitContext& ctx, I
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qa->D2(), Qb->D2());
|
emit(Qresult->D2(), Qa->D2(), Qb->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -175,7 +174,7 @@ static void EmitThreeOpArrangedWiden(oaknut::CodeGenerator& code, EmitContext& c
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->Q1(), Qa->toD().D1(), Qb->toD().D1());
|
emit(Qresult->Q1(), Qa->toD().D1(), Qb->toD().D1());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -198,7 +197,7 @@ static void EmitThreeOpArrangedLower(oaknut::CodeGenerator& code, EmitContext& c
|
||||||
} else if constexpr (size == 32) {
|
} else if constexpr (size == 32) {
|
||||||
emit(Qresult->toD().S2(), Qa->toD().S2(), Qb->toD().S2());
|
emit(Qresult->toD().S2(), Qa->toD().S2(), Qb->toD().S2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -220,7 +219,7 @@ static void EmitSaturatedAccumulate(oaknut::CodeGenerator&, EmitContext& ctx, IR
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qaccumulator->D2(), Qoperand->D2());
|
emit(Qaccumulator->D2(), Qoperand->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -241,7 +240,7 @@ static void EmitImmShift(oaknut::CodeGenerator&, EmitContext& ctx, IR::Inst* ins
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qoperand->D2(), shift_amount);
|
emit(Qresult->D2(), Qoperand->D2(), shift_amount);
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -269,7 +268,7 @@ static void EmitReduce(oaknut::CodeGenerator&, EmitContext& ctx, IR::Inst* inst,
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Vresult, Qoperand->D2());
|
emit(Vresult, Qoperand->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bit>
|
#include <bit>
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
#include "dynarmic/mcl/function_info.hpp"
|
||||||
#include <mcl/mp/typelist/cartesian_product.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
#include <mcl/mp/typelist/get.hpp>
|
|
||||||
#include <mcl/mp/typelist/lift_sequence.hpp>
|
|
||||||
#include <mcl/mp/typelist/list.hpp>
|
|
||||||
#include <mcl/mp/typelist/lower_to_tuple.hpp>
|
|
||||||
#include <mcl/type_traits/function_info.hpp>
|
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
||||||
|
|
@ -38,8 +32,6 @@
|
||||||
namespace Dynarmic::Backend::Arm64 {
|
namespace Dynarmic::Backend::Arm64 {
|
||||||
|
|
||||||
using namespace oaknut::util;
|
using namespace oaknut::util;
|
||||||
namespace mp = mcl::mp;
|
|
||||||
|
|
||||||
using A64FullVectorWidth = std::integral_constant<size_t, 128>;
|
using A64FullVectorWidth = std::integral_constant<size_t, 128>;
|
||||||
|
|
||||||
// Array alias that always sizes itself according to the given type T
|
// Array alias that always sizes itself according to the given type T
|
||||||
|
|
@ -83,7 +75,7 @@ static void EmitTwoOpArranged(oaknut::CodeGenerator& code, EmitContext& ctx, IR:
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qa->D2());
|
emit(Qresult->D2(), Qa->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -111,7 +103,7 @@ static void EmitThreeOpArranged(oaknut::CodeGenerator& code, EmitContext& ctx, I
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qa->D2(), Qb->D2());
|
emit(Qresult->D2(), Qa->D2(), Qb->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -134,7 +126,7 @@ static void EmitFMA(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* ins
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qm->D2(), Qn->D2());
|
emit(Qresult->D2(), Qm->D2(), Qn->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +148,7 @@ static void EmitFromFixed(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Ins
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qto->D2(), Qfrom->D2(), fbits);
|
emit(Qto->D2(), Qfrom->D2(), fbits);
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -178,7 +170,7 @@ void EmitToFixed(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst)
|
||||||
} else if constexpr (fsize == 64) {
|
} else if constexpr (fsize == 64) {
|
||||||
return Qto->D2();
|
return Qto->D2();
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<fsize>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
auto Vfrom = [&] {
|
auto Vfrom = [&] {
|
||||||
|
|
@ -187,7 +179,7 @@ void EmitToFixed(oaknut::CodeGenerator& code, EmitContext& ctx, IR::Inst* inst)
|
||||||
} else if constexpr (fsize == 64) {
|
} else if constexpr (fsize == 64) {
|
||||||
return Qfrom->D2();
|
return Qfrom->D2();
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<fsize>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2022 MerryMage
|
* Copyright (c) 2022 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
#include "dynarmic/backend/arm64/a32_jitstate.h"
|
||||||
|
|
@ -39,7 +41,7 @@ static void Emit(oaknut::CodeGenerator&, EmitContext& ctx, IR::Inst* inst, EmitF
|
||||||
} else if constexpr (size == 64) {
|
} else if constexpr (size == 64) {
|
||||||
emit(Qresult->D2(), Qa->D2(), Qb->D2());
|
emit(Qresult->D2(), Qa->D2(), Qb->D2());
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<size>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,11 +10,10 @@
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#include <mcl/hash/xmrx.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
|
||||||
#include <ankerl/unordered_dense.h>
|
#include <ankerl/unordered_dense.h>
|
||||||
|
|
||||||
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
#include "dynarmic/common/common_types.h"
|
||||||
#include "dynarmic/backend/exception_handler.h"
|
#include "dynarmic/backend/exception_handler.h"
|
||||||
#include "dynarmic/ir/location_descriptor.h"
|
#include "dynarmic/ir/location_descriptor.h"
|
||||||
|
|
||||||
|
|
@ -22,9 +21,16 @@ namespace Dynarmic::Backend::Arm64 {
|
||||||
|
|
||||||
using DoNotFastmemMarker = std::tuple<IR::LocationDescriptor, unsigned>;
|
using DoNotFastmemMarker = std::tuple<IR::LocationDescriptor, unsigned>;
|
||||||
|
|
||||||
|
constexpr size_t xmrx(size_t x) noexcept {
|
||||||
|
x ^= x >> 32;
|
||||||
|
x *= 0xff51afd7ed558ccd;
|
||||||
|
x ^= mcl::bit::rotate_right(x, 47) ^ mcl::bit::rotate_right(x, 23);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
struct DoNotFastmemMarkerHash {
|
struct DoNotFastmemMarkerHash {
|
||||||
size_t operator()(const DoNotFastmemMarker& value) const {
|
[[nodiscard]] constexpr size_t operator()(const DoNotFastmemMarker& value) const noexcept {
|
||||||
return mcl::hash::xmrx(std::get<0>(value).Value() ^ static_cast<u64>(std::get<1>(value)));
|
return xmrx(std::get<0>(value).Value() ^ u64(std::get<1>(value)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,8 @@
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <bit>
|
#include <bit>
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/arm64/abi.h"
|
#include "dynarmic/backend/arm64/abi.h"
|
||||||
|
|
@ -299,7 +298,7 @@ int RegAlloc::GenerateImmediate(const IR::Value& value) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -366,7 +365,7 @@ int RegAlloc::RealizeReadImpl(const IR::Value& value) {
|
||||||
} else if constexpr (required_kind == HostLoc::Kind::Flags) {
|
} else if constexpr (required_kind == HostLoc::Kind::Flags) {
|
||||||
UNREACHABLE(); //A simple read from flags is likely a logic error
|
UNREACHABLE(); //A simple read from flags is likely a logic error
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<required_kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -390,7 +389,7 @@ int RegAlloc::RealizeWriteImpl(const IR::Inst* value) {
|
||||||
flags.SetupLocation(value);
|
flags.SetupLocation(value);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -410,7 +409,7 @@ int RegAlloc::RealizeReadWriteImpl(const IR::Value& read_value, const IR::Inst*
|
||||||
} else if constexpr (kind == HostLoc::Kind::Flags) {
|
} else if constexpr (kind == HostLoc::Kind::Flags) {
|
||||||
ASSERT(false && "Incorrect function for ReadWrite of flags");
|
ASSERT(false && "Incorrect function for ReadWrite of flags");
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/is_instance_of_template.hpp>
|
#include "dynarmic/mcl/is_instance_of_template.hpp"
|
||||||
#include <oaknut/oaknut.hpp>
|
#include <oaknut/oaknut.hpp>
|
||||||
#include <ankerl/unordered_dense.h>
|
#include <ankerl/unordered_dense.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include <mcl/macro/architecture.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#if defined(ARCHITECTURE_x86_64)
|
#if defined(ARCHITECTURE_x86_64)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -16,11 +16,10 @@
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <bit>
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <bit>
|
|
||||||
#include <mcl/macro/architecture.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/exception_handler.h"
|
#include "dynarmic/backend/exception_handler.h"
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,6 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/macro/architecture.hpp>
|
|
||||||
|
|
||||||
#if defined(ARCHITECTURE_x86_64)
|
#if defined(ARCHITECTURE_x86_64)
|
||||||
# include "dynarmic/backend/x64/mig/mach_exc_server.c"
|
# include "dynarmic/backend/x64/mig/mach_exc_server.c"
|
||||||
#elif defined(ARCHITECTURE_arm64)
|
#elif defined(ARCHITECTURE_arm64)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -6,8 +6,6 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/macro/architecture.hpp>
|
|
||||||
|
|
||||||
#if defined(ARCHITECTURE_x86_64)
|
#if defined(ARCHITECTURE_x86_64)
|
||||||
# include "dynarmic/backend/x64/exception_handler_windows.cpp"
|
# include "dynarmic/backend/x64/exception_handler_windows.cpp"
|
||||||
#elif defined(ARCHITECTURE_arm64)
|
#elif defined(ARCHITECTURE_arm64)
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ void A32AddressSpace::SetCursorPtr(CodePtr ptr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t A32AddressSpace::GetRemainingSize() {
|
size_t A32AddressSpace::GetRemainingSize() {
|
||||||
return conf.code_cache_size - (GetCursorPtr<sptr>() - GetMemPtr<sptr>());
|
return conf.code_cache_size - (GetCursorPtr<std::intptr_t>() - GetMemPtr<std::intptr_t>());
|
||||||
}
|
}
|
||||||
|
|
||||||
EmittedBlockInfo A32AddressSpace::Emit(IR::Block block) {
|
EmittedBlockInfo A32AddressSpace::Emit(IR::Block block) {
|
||||||
|
|
|
||||||
|
|
@ -41,25 +41,25 @@ private:
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T GetMemPtr() {
|
T GetMemPtr() {
|
||||||
static_assert(std::is_pointer_v<T> || std::is_same_v<T, uptr> || std::is_same_v<T, sptr>);
|
static_assert(std::is_pointer_v<T> || std::is_same_v<T, std::uintptr_t> || std::is_same_v<T, std::intptr_t>);
|
||||||
return reinterpret_cast<T>(as.GetBufferPointer(0));
|
return reinterpret_cast<T>(as.GetBufferPointer(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T GetMemPtr() const {
|
T GetMemPtr() const {
|
||||||
static_assert(std::is_pointer_v<T> || std::is_same_v<T, uptr> || std::is_same_v<T, sptr>);
|
static_assert(std::is_pointer_v<T> || std::is_same_v<T, std::uintptr_t> || std::is_same_v<T, std::intptr_t>);
|
||||||
return reinterpret_cast<const T>(as.GetBufferPointer(0));
|
return reinterpret_cast<const T>(as.GetBufferPointer(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T GetCursorPtr() {
|
T GetCursorPtr() {
|
||||||
static_assert(std::is_pointer_v<T> || std::is_same_v<T, uptr> || std::is_same_v<T, sptr>);
|
static_assert(std::is_pointer_v<T> || std::is_same_v<T, std::uintptr_t> || std::is_same_v<T, std::intptr_t>);
|
||||||
return reinterpret_cast<T>(as.GetCursorPointer());
|
return reinterpret_cast<T>(as.GetCursorPointer());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T GetCursorPtr() const {
|
T GetCursorPtr() const {
|
||||||
static_assert(std::is_pointer_v<T> || std::is_same_v<T, uptr> || std::is_same_v<T, sptr>);
|
static_assert(std::is_pointer_v<T> || std::is_same_v<T, std::uintptr_t> || std::is_same_v<T, std::intptr_t>);
|
||||||
return reinterpret_cast<const T>(as.GetCursorPointer());
|
return reinterpret_cast<const T>(as.GetCursorPointer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
#include <boost/icl/interval_set.hpp>
|
#include <boost/icl/interval_set.hpp>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/riscv64/a32_address_space.h"
|
#include "dynarmic/backend/riscv64/a32_address_space.h"
|
||||||
|
|
@ -34,28 +33,18 @@ struct Jit::Impl final {
|
||||||
HaltReason Run() {
|
HaltReason Run() {
|
||||||
ASSERT(!jit_interface->is_executing);
|
ASSERT(!jit_interface->is_executing);
|
||||||
jit_interface->is_executing = true;
|
jit_interface->is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
jit_interface->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
HaltReason hr = core.Run(current_address_space, current_state, &halt_reason);
|
HaltReason hr = core.Run(current_address_space, current_state, &halt_reason);
|
||||||
|
|
||||||
RequestCacheInvalidation();
|
RequestCacheInvalidation();
|
||||||
|
jit_interface->is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HaltReason Step() {
|
HaltReason Step() {
|
||||||
ASSERT(!jit_interface->is_executing);
|
ASSERT(!jit_interface->is_executing);
|
||||||
jit_interface->is_executing = true;
|
jit_interface->is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
jit_interface->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
UNIMPLEMENTED();
|
UNIMPLEMENTED();
|
||||||
|
|
||||||
RequestCacheInvalidation();
|
RequestCacheInvalidation();
|
||||||
|
jit_interface->is_executing = false;
|
||||||
return HaltReason{};
|
return HaltReason{};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/backend/riscv64/a32_jitstate.h"
|
#include "dynarmic/backend/riscv64/a32_jitstate.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
namespace Dynarmic::Backend::RV64 {
|
namespace Dynarmic::Backend::RV64 {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -30,7 +30,7 @@ public:
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T ptr() const noexcept {
|
T ptr() const noexcept {
|
||||||
static_assert(std::is_pointer_v<T> || std::is_same_v<T, uptr> || std::is_same_v<T, sptr>);
|
static_assert(std::is_pointer_v<T> || std::is_same_v<T, std::uintptr_t> || std::is_same_v<T, std::intptr_t>);
|
||||||
return reinterpret_cast<T>(mem);
|
return reinterpret_cast<T>(mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include <biscuit/assembler.hpp>
|
#include <biscuit/assembler.hpp>
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/ostream.h>
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/backend/riscv64/a32_jitstate.h"
|
#include "dynarmic/backend/riscv64/a32_jitstate.h"
|
||||||
#include "dynarmic/backend/riscv64/abi.h"
|
#include "dynarmic/backend/riscv64/abi.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/always_false.h"
|
#include "dynarmic/common/always_false.h"
|
||||||
|
|
@ -164,9 +163,8 @@ u32 RegAlloc::GenerateImmediate(const IR::Value& value) {
|
||||||
} else if constexpr (kind == HostLoc::Kind::Fpr) {
|
} else if constexpr (kind == HostLoc::Kind::Fpr) {
|
||||||
UNIMPLEMENTED();
|
UNIMPLEMENTED();
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -225,7 +223,7 @@ u32 RegAlloc::RealizeReadImpl(const IR::Value& value) {
|
||||||
fprs[new_location_index].realized = true;
|
fprs[new_location_index].realized = true;
|
||||||
return new_location_index;
|
return new_location_index;
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<required_kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,7 +250,7 @@ u32 RegAlloc::RealizeWriteImpl(const IR::Inst* value) {
|
||||||
setup_location(fprs[new_location_index]);
|
setup_location(fprs[new_location_index]);
|
||||||
return new_location_index;
|
return new_location_index;
|
||||||
} else {
|
} else {
|
||||||
static_assert(Common::always_false_v<mcl::mp::lift_value<required_kind>>);
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
#include <biscuit/registers.hpp>
|
#include <biscuit/registers.hpp>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/is_instance_of_template.hpp>
|
#include "dynarmic/mcl/is_instance_of_template.hpp"
|
||||||
#include <ankerl/unordered_dense.h>
|
#include <ankerl/unordered_dense.h>
|
||||||
|
|
||||||
#include "dynarmic/backend/riscv64/stack_layout.h"
|
#include "dynarmic/backend/riscv64/stack_layout.h"
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,7 @@
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/ostream.h>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <boost/container/static_vector.hpp>
|
#include <boost/container/static_vector.hpp>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/ostream.h>
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/a32_emit_x64.h"
|
#include "dynarmic/backend/x64/a32_emit_x64.h"
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <bit>
|
#include <bit>
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include "dynarmic/common/llvm_disassemble.h"
|
#include "dynarmic/common/llvm_disassemble.h"
|
||||||
|
|
||||||
|
|
@ -77,12 +76,7 @@ struct Jit::Impl {
|
||||||
HaltReason Run() {
|
HaltReason Run() {
|
||||||
ASSERT(!jit_interface->is_executing);
|
ASSERT(!jit_interface->is_executing);
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
||||||
|
|
||||||
jit_interface->is_executing = true;
|
jit_interface->is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
jit_interface->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const CodePtr current_codeptr = [this] {
|
const CodePtr current_codeptr = [this] {
|
||||||
// RSB optimization
|
// RSB optimization
|
||||||
const u32 new_rsb_ptr = (jit_state.rsb_ptr - 1) & A32JitState::RSBPtrMask;
|
const u32 new_rsb_ptr = (jit_state.rsb_ptr - 1) & A32JitState::RSBPtrMask;
|
||||||
|
|
@ -93,27 +87,19 @@ struct Jit::Impl {
|
||||||
|
|
||||||
return GetCurrentBlock();
|
return GetCurrentBlock();
|
||||||
}();
|
}();
|
||||||
|
|
||||||
const HaltReason hr = block_of_code.RunCode(&jit_state, current_codeptr);
|
const HaltReason hr = block_of_code.RunCode(&jit_state, current_codeptr);
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
jit_interface->is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HaltReason Step() {
|
HaltReason Step() {
|
||||||
ASSERT(!jit_interface->is_executing);
|
ASSERT(!jit_interface->is_executing);
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
||||||
|
|
||||||
jit_interface->is_executing = true;
|
jit_interface->is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
jit_interface->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const HaltReason hr = block_of_code.StepCode(&jit_state, GetCurrentSingleStep());
|
const HaltReason hr = block_of_code.StepCode(&jit_state, GetCurrentSingleStep());
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
jit_interface->is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include "dynarmic/backend/x64/a32_jitstate.h"
|
#include "dynarmic/backend/x64/a32_jitstate.h"
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/block_of_code.h"
|
#include "dynarmic/backend/x64/block_of_code.h"
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,8 @@
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/ostream.h>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
#include <boost/container/static_vector.hpp>
|
#include <boost/container/static_vector.hpp>
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/a64_jitstate.h"
|
#include "dynarmic/backend/x64/a64_jitstate.h"
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/ostream.h>
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/a64_emit_x64.h"
|
#include "dynarmic/backend/x64/a64_emit_x64.h"
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
#include "dynarmic/common/llvm_disassemble.h"
|
#include "dynarmic/common/llvm_disassemble.h"
|
||||||
#include <bit>
|
#include <bit>
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/a64_emit_x64.h"
|
#include "dynarmic/backend/x64/a64_emit_x64.h"
|
||||||
#include "dynarmic/backend/x64/a64_jitstate.h"
|
#include "dynarmic/backend/x64/a64_jitstate.h"
|
||||||
|
|
@ -75,14 +74,8 @@ public:
|
||||||
HaltReason Run() {
|
HaltReason Run() {
|
||||||
ASSERT(!is_executing);
|
ASSERT(!is_executing);
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
||||||
|
|
||||||
is_executing = true;
|
is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
this->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: Check code alignment
|
// TODO: Check code alignment
|
||||||
|
|
||||||
const CodePtr current_code_ptr = [this] {
|
const CodePtr current_code_ptr = [this] {
|
||||||
// RSB optimization
|
// RSB optimization
|
||||||
const u32 new_rsb_ptr = (jit_state.rsb_ptr - 1) & A64JitState::RSBPtrMask;
|
const u32 new_rsb_ptr = (jit_state.rsb_ptr - 1) & A64JitState::RSBPtrMask;
|
||||||
|
|
@ -92,27 +85,19 @@ public:
|
||||||
}
|
}
|
||||||
return CodePtr((uintptr_t(GetCurrentBlock()) + 15) & ~uintptr_t(15));
|
return CodePtr((uintptr_t(GetCurrentBlock()) + 15) & ~uintptr_t(15));
|
||||||
}();
|
}();
|
||||||
|
|
||||||
const HaltReason hr = block_of_code.RunCode(&jit_state, current_code_ptr);
|
const HaltReason hr = block_of_code.RunCode(&jit_state, current_code_ptr);
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HaltReason Step() {
|
HaltReason Step() {
|
||||||
ASSERT(!is_executing);
|
ASSERT(!is_executing);
|
||||||
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
PerformRequestedCacheInvalidation(static_cast<HaltReason>(Atomic::Load(&jit_state.halt_reason)));
|
||||||
|
|
||||||
is_executing = true;
|
is_executing = true;
|
||||||
SCOPE_EXIT {
|
|
||||||
this->is_executing = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const HaltReason hr = block_of_code.StepCode(&jit_state, GetCurrentSingleStep());
|
const HaltReason hr = block_of_code.StepCode(&jit_state, GetCurrentSingleStep());
|
||||||
|
|
||||||
PerformRequestedCacheInvalidation(hr);
|
PerformRequestedCacheInvalidation(hr);
|
||||||
|
is_executing = false;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2016 MerryMage
|
* Copyright (c) 2016 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -5,7 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/a64_jitstate.h"
|
#include "dynarmic/backend/x64/a64_jitstate.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A64/a64_location_descriptor.h"
|
#include "dynarmic/frontend/A64/a64_location_descriptor.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/a32_jitstate.h"
|
#include "dynarmic/backend/x64/a32_jitstate.h"
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
#include "dynarmic/backend/x64/abi.h"
|
#include "dynarmic/backend/x64/abi.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/rounding_mode.h"
|
#include "dynarmic/common/fp/rounding_mode.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include <bit>
|
#include <bit>
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/function_info.hpp>
|
#include "dynarmic/mcl/function_info.hpp"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/callback.h"
|
#include "dynarmic/backend/x64/callback.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,7 @@
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <boost/variant/detail/apply_visitor_binary.hpp>
|
#include <boost/variant/detail/apply_visitor_binary.hpp>
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/scope_exit.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <ankerl/unordered_dense.h>
|
#include <ankerl/unordered_dense.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mcl/bitsizeof.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <ankerl/unordered_dense.h>
|
#include <ankerl/unordered_dense.h>
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
#include <boost/container/small_vector.hpp>
|
#include <boost/container/small_vector.hpp>
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,8 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
|
||||||
#include <mcl/mp/typelist/cartesian_product.hpp>
|
|
||||||
#include <mcl/mp/typelist/get.hpp>
|
|
||||||
#include <mcl/mp/typelist/lift_sequence.hpp>
|
|
||||||
#include <mcl/mp/typelist/list.hpp>
|
|
||||||
#include <mcl/mp/typelist/lower_to_tuple.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/abi.h"
|
#include "dynarmic/backend/x64/abi.h"
|
||||||
|
|
@ -41,7 +35,6 @@
|
||||||
namespace Dynarmic::Backend::X64 {
|
namespace Dynarmic::Backend::X64 {
|
||||||
|
|
||||||
using namespace Xbyak::util;
|
using namespace Xbyak::util;
|
||||||
namespace mp = mcl::mp;
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/macro/concatenate_tokens.hpp>
|
#define CONCATENATE_TOKENS(x, y) CONCATENATE_TOKENS_IMPL(x, y)
|
||||||
|
#define CONCATENATE_TOKENS_IMPL(x, y) x##y
|
||||||
|
|
||||||
#define AxxEmitX64 CONCATENATE_TOKENS(Axx, EmitX64)
|
#define AxxEmitX64 CONCATENATE_TOKENS(Axx, EmitX64)
|
||||||
#define AxxEmitContext CONCATENATE_TOKENS(Axx, EmitContext)
|
#define AxxEmitContext CONCATENATE_TOKENS(Axx, EmitContext)
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/block_of_code.h"
|
#include "dynarmic/backend/x64/block_of_code.h"
|
||||||
#include "dynarmic/backend/x64/emit_x64.h"
|
#include "dynarmic/backend/x64/emit_x64.h"
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,9 @@
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
#include <mcl/bitsizeof.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
#include <mcl/type_traits/function_info.hpp>
|
#include "dynarmic/mcl/function_info.hpp"
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/abi.h"
|
#include "dynarmic/backend/x64/abi.h"
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,8 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/mp/metavalue/lift_value.hpp>
|
#include "dynarmic/mcl/function_info.hpp"
|
||||||
#include <mcl/mp/typelist/cartesian_product.hpp>
|
#include "dynarmic/mcl/integer_of_size.hpp"
|
||||||
#include <mcl/mp/typelist/get.hpp>
|
|
||||||
#include <mcl/mp/typelist/lift_sequence.hpp>
|
|
||||||
#include <mcl/mp/typelist/list.hpp>
|
|
||||||
#include <mcl/mp/typelist/lower_to_tuple.hpp>
|
|
||||||
#include <mcl/type_traits/function_info.hpp>
|
|
||||||
#include <mcl/type_traits/integer_of_size.hpp>
|
|
||||||
#include "dynarmic/backend/x64/xbyak.h"
|
#include "dynarmic/backend/x64/xbyak.h"
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/abi.h"
|
#include "dynarmic/backend/x64/abi.h"
|
||||||
|
|
@ -41,7 +35,6 @@
|
||||||
namespace Dynarmic::Backend::X64 {
|
namespace Dynarmic::Backend::X64 {
|
||||||
|
|
||||||
using namespace Xbyak::util;
|
using namespace Xbyak::util;
|
||||||
namespace mp = mcl::mp;
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
|
@ -2000,6 +1993,7 @@ void EmitX64::EmitFPVectorToHalf32(EmitContext& ctx, IR::Inst* inst) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Assembly thunk; just remember not to specialise too much otherwise i-cache death!
|
// Assembly thunk; just remember not to specialise too much otherwise i-cache death!
|
||||||
// template<typename FPT, size_t fbits, FP::RoundingMode rounding_mode>
|
// template<typename FPT, size_t fbits, FP::RoundingMode rounding_mode>
|
||||||
// static void EmitFPVectorToFixedThunk(VectorArray<FPT>& output, const VectorArray<FPT>& input, FP::FPCR fpcr, FP::FPSR& fpsr) {
|
// static void EmitFPVectorToFixedThunk(VectorArray<FPT>& output, const VectorArray<FPT>& input, FP::FPCR fpcr, FP::FPSR& fpsr) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -6,17 +6,16 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dynarmic/backend/x64/perf_map.h"
|
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#include "dynarmic/backend/x64/perf_map.h"
|
||||||
|
#include "dynarmic/common/common_types.h"
|
||||||
#if defined(__linux__) && !defined(__ANDROID__)
|
#if defined(__linux__) && !defined(__ANDROID__)
|
||||||
# include <cstdio>
|
# include <cstdio>
|
||||||
# include <cstdlib>
|
# include <cstdlib>
|
||||||
# include <mutex>
|
# include <mutex>
|
||||||
# include <fmt/format.h>
|
|
||||||
# include <mcl/stdint.hpp>
|
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -5,7 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mcl/type_traits/function_info.hpp>
|
#include "dynarmic/mcl/function_info.hpp"
|
||||||
|
|
||||||
namespace Dynarmic::Common {
|
namespace Dynarmic::Common {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/rounding_mode.h"
|
#include "dynarmic/common/fp/rounding_mode.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
namespace Dynarmic::FP {
|
namespace Dynarmic::FP {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -5,7 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fused.h"
|
#include "dynarmic/common/fp/fused.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/unpacked.h"
|
#include "dynarmic/common/fp/unpacked.h"
|
||||||
#include "dynarmic/common/u128.h"
|
#include "dynarmic/common/u128.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
namespace Dynarmic::FP {
|
namespace Dynarmic::FP {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,8 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bitsizeof.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
namespace Dynarmic::FP {
|
namespace Dynarmic::FP {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,8 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/common/fp/op/FPConvert.h"
|
#include "dynarmic/common/fp/op/FPConvert.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bitsizeof.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/common/fp/op/FPRecipExponent.h"
|
#include "dynarmic/common/fp/op/FPRecipExponent.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include "dynarmic/common/fp/op/FPRoundInt.h"
|
#include "dynarmic/common/fp/op/FPRoundInt.h"
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,8 +10,7 @@
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
#include "dynarmic/common/fp/fpsr.h"
|
#include "dynarmic/common/fp/fpsr.h"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -7,8 +10,7 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpsr.h"
|
#include "dynarmic/common/fp/fpsr.h"
|
||||||
#include "dynarmic/common/fp/info.h"
|
#include "dynarmic/common/fp/info.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
#include <mcl/bitsizeof.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/u128.h"
|
#include "dynarmic/common/u128.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -11,8 +11,7 @@
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bitsizeof.hpp>
|
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
namespace Dynarmic {
|
namespace Dynarmic {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/rounding_mode.h"
|
#include "dynarmic/common/fp/rounding_mode.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/ir/cond.h"
|
#include "dynarmic/ir/cond.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/ITState.h"
|
#include "dynarmic/frontend/A32/ITState.h"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2016 MerryMage
|
* Copyright (c) 2016 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -8,7 +11,7 @@
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
namespace Dynarmic::A32 {
|
namespace Dynarmic::A32 {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/frontend/decoder/decoder_detail.h"
|
#include "dynarmic/frontend/decoder/decoder_detail.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/frontend/decoder/decoder_detail.h"
|
#include "dynarmic/frontend/decoder/decoder_detail.h"
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,7 @@ bool CondCanContinue(const ConditionalState cond_state, const A32::IREmitter& ir
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsConditionPassed(TranslatorVisitor& v, IR::Cond cond) {
|
bool IsConditionPassed(TranslatorVisitor& v, IR::Cond cond) {
|
||||||
ASSERT_MSG(v.cond_state != ConditionalState::Break,
|
ASSERT(v.cond_state != ConditionalState::Break && "This should never happen. We requested a break but that wasn't honored.");
|
||||||
"This should never happen. We requested a break but that wasn't honored.");
|
|
||||||
|
|
||||||
if (cond == IR::Cond::NV) {
|
if (cond == IR::Cond::NV) {
|
||||||
// NV conditional is obsolete
|
// NV conditional is obsolete
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2016 MerryMage
|
* Copyright (c) 2016 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/rotate.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/a32_ir_emitter.h"
|
#include "dynarmic/frontend/A32/a32_ir_emitter.h"
|
||||||
#include "dynarmic/frontend/A32/a32_location_descriptor.h"
|
#include "dynarmic/frontend/A32/a32_location_descriptor.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -9,8 +9,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2020 MerryMage
|
* Copyright (c) 2020 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2020 MerryMage
|
* Copyright (c) 2020 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -5,7 +8,7 @@
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -7,8 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,7 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2016 MerryMage
|
* Copyright (c) 2016 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bitsizeof.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
#include "dynarmic/interface/A32/config.h"
|
#include "dynarmic/interface/A32/config.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bitsizeof.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2021 MerryMage
|
* Copyright (c) 2021 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2021 MerryMage
|
* Copyright (c) 2021 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
#include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h"
|
||||||
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
#include "dynarmic/frontend/A32/translate/impl/common.h"
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,7 @@
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#include "dynarmic/common/assert.h"
|
#include "dynarmic/common/assert.h"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/swap.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/frontend/A32/a32_ir_emitter.h"
|
#include "dynarmic/frontend/A32/a32_ir_emitter.h"
|
||||||
#include "dynarmic/frontend/A32/a32_location_descriptor.h"
|
#include "dynarmic/frontend/A32/a32_location_descriptor.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/fpcr.h"
|
#include "dynarmic/common/fp/fpcr.h"
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include "dynarmic/common/common_types.h"
|
#include "dynarmic/common/common_types.h"
|
||||||
|
|
||||||
#include "dynarmic/frontend/decoder/decoder_detail.h"
|
#include "dynarmic/frontend/decoder/decoder_detail.h"
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,7 @@
|
||||||
|
|
||||||
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
#include <mcl/bit/bit_field.hpp>
|
|
||||||
#include <mcl/bit/rotate.hpp>
|
|
||||||
|
|
||||||
#include "dynarmic/ir/terminal.h"
|
#include "dynarmic/ir/terminal.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/rounding_mode.h"
|
#include "dynarmic/common/fp/rounding_mode.h"
|
||||||
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
|
|
@ -5,7 +8,7 @@
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include <mcl/bit/bit_field.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
/* This file is part of the dynarmic project.
|
/* This file is part of the dynarmic project.
|
||||||
* Copyright (c) 2018 MerryMage
|
* Copyright (c) 2018 MerryMage
|
||||||
* SPDX-License-Identifier: 0BSD
|
* SPDX-License-Identifier: 0BSD
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mcl/bit/bit_count.hpp>
|
#include "dynarmic/mcl/bit.hpp"
|
||||||
|
|
||||||
#include "dynarmic/common/fp/rounding_mode.h"
|
#include "dynarmic/common/fp/rounding_mode.h"
|
||||||
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue