diff options
| author | 2022-11-06 16:45:36 -0500 | |
|---|---|---|
| committer | 2022-11-09 16:58:49 -0500 | |
| commit | cbaf642ffe4b05f8796798ebdc5c6892605928cc (patch) | |
| tree | 8ac4094f709da71b334c152e111247c89c958cee | |
| parent | Merge pull request #9215 from liamwhite/swordfight (diff) | |
| download | yuzu-cbaf642ffe4b05f8796798ebdc5c6892605928cc.tar.gz yuzu-cbaf642ffe4b05f8796798ebdc5c6892605928cc.tar.xz yuzu-cbaf642ffe4b05f8796798ebdc5c6892605928cc.zip | |
Initial ARM64 support
| -rw-r--r-- | CMakeLists.txt | 8 | ||||
| -rw-r--r-- | externals/CMakeLists.txt | 11 | ||||
| m--------- | externals/dynarmic | 0 | ||||
| m--------- | externals/xbyak | 0 | ||||
| -rw-r--r-- | src/audio_core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/common/common_funcs.h | 4 | ||||
| -rw-r--r-- | src/common/host_memory.cpp | 6 | ||||
| -rw-r--r-- | src/core/CMakeLists.txt | 14 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 5 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_cp15.cpp | 22 | ||||
| -rw-r--r-- | src/core/arm/exclusive_monitor.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/physical_core.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/CMakeLists.txt | 15 | ||||
| -rw-r--r-- | src/video_core/macro/macro.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/CMakeLists.txt | 2 |
15 files changed, 66 insertions, 34 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c6fc5dd9e..1d13dc74e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
| @@ -133,13 +133,13 @@ if (NOT ENABLE_GENERIC) | |||
| 133 | if (MSVC) | 133 | if (MSVC) |
| 134 | detect_architecture("_M_AMD64" x86_64) | 134 | detect_architecture("_M_AMD64" x86_64) |
| 135 | detect_architecture("_M_IX86" x86) | 135 | detect_architecture("_M_IX86" x86) |
| 136 | detect_architecture("_M_ARM" ARM) | 136 | detect_architecture("_M_ARM" arm) |
| 137 | detect_architecture("_M_ARM64" ARM64) | 137 | detect_architecture("_M_ARM64" arm64) |
| 138 | else() | 138 | else() |
| 139 | detect_architecture("__x86_64__" x86_64) | 139 | detect_architecture("__x86_64__" x86_64) |
| 140 | detect_architecture("__i386__" x86) | 140 | detect_architecture("__i386__" x86) |
| 141 | detect_architecture("__arm__" ARM) | 141 | detect_architecture("__arm__" arm) |
| 142 | detect_architecture("__aarch64__" ARM64) | 142 | detect_architecture("__aarch64__" arm64) |
| 143 | endif() | 143 | endif() |
| 144 | endif() | 144 | endif() |
| 145 | 145 | ||
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index e80fd124e..7f0a6d069 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt | |||
| @@ -7,15 +7,14 @@ include(DownloadExternals) | |||
| 7 | 7 | ||
| 8 | # xbyak | 8 | # xbyak |
| 9 | if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) | 9 | if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) |
| 10 | add_library(xbyak INTERFACE) | 10 | add_subdirectory(xbyak) |
| 11 | file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/xbyak/include) | ||
| 12 | file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/xbyak/xbyak DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/xbyak/include) | ||
| 13 | target_include_directories(xbyak SYSTEM INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/xbyak/include) | ||
| 14 | target_compile_definitions(xbyak INTERFACE XBYAK_NO_OP_NAMES) | ||
| 15 | endif() | 11 | endif() |
| 16 | 12 | ||
| 17 | # Dynarmic | 13 | # Dynarmic |
| 18 | if (ARCHITECTURE_x86_64) | 14 | if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) |
| 15 | if (ARCHITECTURE_arm64) | ||
| 16 | set(DYNARMIC_FRONTENDS "A32") | ||
| 17 | endif() | ||
| 19 | set(DYNARMIC_NO_BUNDLED_FMT ON) | 18 | set(DYNARMIC_NO_BUNDLED_FMT ON) |
| 20 | set(DYNARMIC_IGNORE_ASSERTS ON CACHE BOOL "" FORCE) | 19 | set(DYNARMIC_IGNORE_ASSERTS ON CACHE BOOL "" FORCE) |
| 21 | add_subdirectory(dynarmic) | 20 | add_subdirectory(dynarmic) |
diff --git a/externals/dynarmic b/externals/dynarmic | |||
| Subproject 2d4602a6516c67d547000d4c80bcc5f74976abd | Subproject 424fdb5c5026ec5bdd7553271190397f63fb503 | ||
diff --git a/externals/xbyak b/externals/xbyak | |||
| Subproject c306b8e5786eeeb87b8925a8af5c3bf057ff5a9 | Subproject 348e3e548ebac06d243e5881caec8440e249f65 | ||
diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt index 0a1f3bf18..8e3a8f5a8 100644 --- a/src/audio_core/CMakeLists.txt +++ b/src/audio_core/CMakeLists.txt | |||
| @@ -217,7 +217,7 @@ else() | |||
| 217 | endif() | 217 | endif() |
| 218 | 218 | ||
| 219 | target_link_libraries(audio_core PUBLIC common core) | 219 | target_link_libraries(audio_core PUBLIC common core) |
| 220 | if (ARCHITECTURE_x86_64) | 220 | if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) |
| 221 | target_link_libraries(audio_core PRIVATE dynarmic) | 221 | target_link_libraries(audio_core PRIVATE dynarmic) |
| 222 | endif() | 222 | endif() |
| 223 | 223 | ||
diff --git a/src/common/common_funcs.h b/src/common/common_funcs.h index e1e2a90fc..0dad9338a 100644 --- a/src/common/common_funcs.h +++ b/src/common/common_funcs.h | |||
| @@ -31,8 +31,10 @@ | |||
| 31 | 31 | ||
| 32 | #ifndef _MSC_VER | 32 | #ifndef _MSC_VER |
| 33 | 33 | ||
| 34 | #ifdef ARCHITECTURE_x86_64 | 34 | #if defined(ARCHITECTURE_x86_64) |
| 35 | #define Crash() __asm__ __volatile__("int $3") | 35 | #define Crash() __asm__ __volatile__("int $3") |
| 36 | #elif defined(ARCHITECTURE_arm64) | ||
| 37 | #define Crash() __asm__ __volatile__("brk #0") | ||
| 36 | #else | 38 | #else |
| 37 | #define Crash() exit(1) | 39 | #define Crash() exit(1) |
| 38 | #endif | 40 | #endif |
diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp index 7f9659612..909f6cf3f 100644 --- a/src/common/host_memory.cpp +++ b/src/common/host_memory.cpp | |||
| @@ -359,6 +359,12 @@ public: | |||
| 359 | } | 359 | } |
| 360 | }); | 360 | }); |
| 361 | 361 | ||
| 362 | long page_size = sysconf(_SC_PAGESIZE); | ||
| 363 | if (page_size != 0x1000) { | ||
| 364 | LOG_CRITICAL(HW_Memory, "page size {:#x} is incompatible with 4K paging", page_size); | ||
| 365 | throw std::bad_alloc{}; | ||
| 366 | } | ||
| 367 | |||
| 362 | // Backing memory initialization | 368 | // Backing memory initialization |
| 363 | #if defined(__FreeBSD__) && __FreeBSD__ < 13 | 369 | #if defined(__FreeBSD__) && __FreeBSD__ < 13 |
| 364 | // XXX Drop after FreeBSD 12.* reaches EOL on 2024-06-30 | 370 | // XXX Drop after FreeBSD 12.* reaches EOL on 2024-06-30 |
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index f6e082c36..f67f1ce92 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -497,10 +497,6 @@ add_library(core STATIC | |||
| 497 | hle/service/hid/irsensor/processor_base.h | 497 | hle/service/hid/irsensor/processor_base.h |
| 498 | hle/service/hid/irsensor/tera_plugin_processor.cpp | 498 | hle/service/hid/irsensor/tera_plugin_processor.cpp |
| 499 | hle/service/hid/irsensor/tera_plugin_processor.h | 499 | hle/service/hid/irsensor/tera_plugin_processor.h |
| 500 | hle/service/jit/jit_context.cpp | ||
| 501 | hle/service/jit/jit_context.h | ||
| 502 | hle/service/jit/jit.cpp | ||
| 503 | hle/service/jit/jit.h | ||
| 504 | hle/service/lbl/lbl.cpp | 500 | hle/service/lbl/lbl.cpp |
| 505 | hle/service/lbl/lbl.h | 501 | hle/service/lbl/lbl.h |
| 506 | hle/service/ldn/lan_discovery.cpp | 502 | hle/service/ldn/lan_discovery.cpp |
| @@ -805,14 +801,18 @@ if (ENABLE_WEB_SERVICE) | |||
| 805 | target_link_libraries(core PRIVATE web_service) | 801 | target_link_libraries(core PRIVATE web_service) |
| 806 | endif() | 802 | endif() |
| 807 | 803 | ||
| 808 | if (ARCHITECTURE_x86_64) | 804 | if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) |
| 809 | target_sources(core PRIVATE | 805 | target_sources(core PRIVATE |
| 810 | arm/dynarmic/arm_dynarmic_32.cpp | ||
| 811 | arm/dynarmic/arm_dynarmic_32.h | ||
| 812 | arm/dynarmic/arm_dynarmic_64.cpp | 806 | arm/dynarmic/arm_dynarmic_64.cpp |
| 813 | arm/dynarmic/arm_dynarmic_64.h | 807 | arm/dynarmic/arm_dynarmic_64.h |
| 808 | arm/dynarmic/arm_dynarmic_32.cpp | ||
| 809 | arm/dynarmic/arm_dynarmic_32.h | ||
| 814 | arm/dynarmic/arm_dynarmic_cp15.cpp | 810 | arm/dynarmic/arm_dynarmic_cp15.cpp |
| 815 | arm/dynarmic/arm_dynarmic_cp15.h | 811 | arm/dynarmic/arm_dynarmic_cp15.h |
| 812 | hle/service/jit/jit_context.cpp | ||
| 813 | hle/service/jit/jit_context.h | ||
| 814 | hle/service/jit/jit.cpp | ||
| 815 | hle/service/jit/jit.h | ||
| 816 | ) | 816 | ) |
| 817 | target_link_libraries(core PRIVATE dynarmic) | 817 | target_link_libraries(core PRIVATE dynarmic) |
| 818 | endif() | 818 | endif() |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 287ba102e..227e06ea1 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -301,6 +301,11 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||
| 301 | } | 301 | } |
| 302 | } | 302 | } |
| 303 | 303 | ||
| 304 | #ifdef ARCHITECTURE_arm64 | ||
| 305 | // TODO: remove when fixed in dynarmic | ||
| 306 | config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; | ||
| 307 | #endif | ||
| 308 | |||
| 304 | return std::make_unique<Dynarmic::A32::Jit>(config); | 309 | return std::make_unique<Dynarmic::A32::Jit>(config); |
| 305 | } | 310 | } |
| 306 | 311 | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic_cp15.cpp b/src/core/arm/dynarmic/arm_dynarmic_cp15.cpp index 200efe4db..5a4eba3eb 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_cp15.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_cp15.cpp | |||
| @@ -52,12 +52,16 @@ CallbackOrAccessOneWord DynarmicCP15::CompileSendOneWord(bool two, unsigned opc1 | |||
| 52 | case 4: | 52 | case 4: |
| 53 | // CP15_DATA_SYNC_BARRIER | 53 | // CP15_DATA_SYNC_BARRIER |
| 54 | return Callback{ | 54 | return Callback{ |
| 55 | [](Dynarmic::A32::Jit*, void*, std::uint32_t, std::uint32_t) -> std::uint64_t { | 55 | [](void*, std::uint32_t, std::uint32_t) -> std::uint64_t { |
| 56 | #ifdef _MSC_VER | 56 | #if defined(_MSC_VER) && defined(ARCHITECTURE_x86_64) |
| 57 | _mm_mfence(); | 57 | _mm_mfence(); |
| 58 | _mm_lfence(); | 58 | _mm_lfence(); |
| 59 | #else | 59 | #elif defined(ARCHITECTURE_x86_64) |
| 60 | asm volatile("mfence\n\tlfence\n\t" : : : "memory"); | 60 | asm volatile("mfence\n\tlfence\n\t" : : : "memory"); |
| 61 | #elif defined(ARCHITECTURE_arm64) | ||
| 62 | asm volatile("dsb sy\n\t" : : : "memory"); | ||
| 63 | #else | ||
| 64 | #error Unsupported architecture | ||
| 61 | #endif | 65 | #endif |
| 62 | return 0; | 66 | return 0; |
| 63 | }, | 67 | }, |
| @@ -66,11 +70,15 @@ CallbackOrAccessOneWord DynarmicCP15::CompileSendOneWord(bool two, unsigned opc1 | |||
| 66 | case 5: | 70 | case 5: |
| 67 | // CP15_DATA_MEMORY_BARRIER | 71 | // CP15_DATA_MEMORY_BARRIER |
| 68 | return Callback{ | 72 | return Callback{ |
| 69 | [](Dynarmic::A32::Jit*, void*, std::uint32_t, std::uint32_t) -> std::uint64_t { | 73 | [](void*, std::uint32_t, std::uint32_t) -> std::uint64_t { |
| 70 | #ifdef _MSC_VER | 74 | #if defined(_MSC_VER) && defined(ARCHITECTURE_x86_64) |
| 71 | _mm_mfence(); | 75 | _mm_mfence(); |
| 72 | #else | 76 | #elif defined(ARCHITECTURE_x86_64) |
| 73 | asm volatile("mfence\n\t" : : : "memory"); | 77 | asm volatile("mfence\n\t" : : : "memory"); |
| 78 | #elif defined(ARCHITECTURE_arm64) | ||
| 79 | asm volatile("dmb sy\n\t" : : : "memory"); | ||
| 80 | #else | ||
| 81 | #error Unsupported architecture | ||
| 74 | #endif | 82 | #endif |
| 75 | return 0; | 83 | return 0; |
| 76 | }, | 84 | }, |
| @@ -115,7 +123,7 @@ CallbackOrAccessOneWord DynarmicCP15::CompileGetOneWord(bool two, unsigned opc1, | |||
| 115 | CallbackOrAccessTwoWords DynarmicCP15::CompileGetTwoWords(bool two, unsigned opc, CoprocReg CRm) { | 123 | CallbackOrAccessTwoWords DynarmicCP15::CompileGetTwoWords(bool two, unsigned opc, CoprocReg CRm) { |
| 116 | if (!two && opc == 0 && CRm == CoprocReg::C14) { | 124 | if (!two && opc == 0 && CRm == CoprocReg::C14) { |
| 117 | // CNTPCT | 125 | // CNTPCT |
| 118 | const auto callback = [](Dynarmic::A32::Jit*, void* arg, u32, u32) -> u64 { | 126 | const auto callback = [](void* arg, u32, u32) -> u64 { |
| 119 | const auto& parent_arg = *static_cast<ARM_Dynarmic_32*>(arg); | 127 | const auto& parent_arg = *static_cast<ARM_Dynarmic_32*>(arg); |
| 120 | return parent_arg.system.CoreTiming().GetClockTicks(); | 128 | return parent_arg.system.CoreTiming().GetClockTicks(); |
| 121 | }; | 129 | }; |
diff --git a/src/core/arm/exclusive_monitor.cpp b/src/core/arm/exclusive_monitor.cpp index 2db0b035d..20550faeb 100644 --- a/src/core/arm/exclusive_monitor.cpp +++ b/src/core/arm/exclusive_monitor.cpp | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #ifdef ARCHITECTURE_x86_64 | 4 | #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) |
| 5 | #include "core/arm/dynarmic/arm_exclusive_monitor.h" | 5 | #include "core/arm/dynarmic/arm_exclusive_monitor.h" |
| 6 | #endif | 6 | #endif |
| 7 | #include "core/arm/exclusive_monitor.h" | 7 | #include "core/arm/exclusive_monitor.h" |
| @@ -13,7 +13,7 @@ ExclusiveMonitor::~ExclusiveMonitor() = default; | |||
| 13 | 13 | ||
| 14 | std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::Memory& memory, | 14 | std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::Memory& memory, |
| 15 | std::size_t num_cores) { | 15 | std::size_t num_cores) { |
| 16 | #ifdef ARCHITECTURE_x86_64 | 16 | #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) |
| 17 | return std::make_unique<Core::DynarmicExclusiveMonitor>(memory, num_cores); | 17 | return std::make_unique<Core::DynarmicExclusiveMonitor>(memory, num_cores); |
| 18 | #else | 18 | #else |
| 19 | // TODO(merry): Passthrough exclusive monitor | 19 | // TODO(merry): Passthrough exclusive monitor |
diff --git a/src/core/hle/kernel/physical_core.cpp b/src/core/hle/kernel/physical_core.cpp index d4375962f..3044922ac 100644 --- a/src/core/hle/kernel/physical_core.cpp +++ b/src/core/hle/kernel/physical_core.cpp | |||
| @@ -12,7 +12,7 @@ namespace Kernel { | |||
| 12 | 12 | ||
| 13 | PhysicalCore::PhysicalCore(std::size_t core_index_, Core::System& system_, KScheduler& scheduler_) | 13 | PhysicalCore::PhysicalCore(std::size_t core_index_, Core::System& system_, KScheduler& scheduler_) |
| 14 | : core_index{core_index_}, system{system_}, scheduler{scheduler_} { | 14 | : core_index{core_index_}, system{system_}, scheduler{scheduler_} { |
| 15 | #ifdef ARCHITECTURE_x86_64 | 15 | #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) |
| 16 | // TODO(bunnei): Initialization relies on a core being available. We may later replace this with | 16 | // TODO(bunnei): Initialization relies on a core being available. We may later replace this with |
| 17 | // a 32-bit instance of Dynarmic. This should be abstracted out to a CPU manager. | 17 | // a 32-bit instance of Dynarmic. This should be abstracted out to a CPU manager. |
| 18 | auto& kernel = system.Kernel(); | 18 | auto& kernel = system.Kernel(); |
| @@ -26,7 +26,7 @@ PhysicalCore::PhysicalCore(std::size_t core_index_, Core::System& system_, KSche | |||
| 26 | PhysicalCore::~PhysicalCore() = default; | 26 | PhysicalCore::~PhysicalCore() = default; |
| 27 | 27 | ||
| 28 | void PhysicalCore::Initialize([[maybe_unused]] bool is_64_bit) { | 28 | void PhysicalCore::Initialize([[maybe_unused]] bool is_64_bit) { |
| 29 | #ifdef ARCHITECTURE_x86_64 | 29 | #if defined(ARCHITECTURE_x86_64) || defined(ARCHITECTURE_arm64) |
| 30 | auto& kernel = system.Kernel(); | 30 | auto& kernel = system.Kernel(); |
| 31 | if (!is_64_bit) { | 31 | if (!is_64_bit) { |
| 32 | // We already initialized a 64-bit core, replace with a 32-bit one. | 32 | // We already initialized a 64-bit core, replace with a 32-bit one. |
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 106991969..d7f7d336c 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt | |||
| @@ -73,8 +73,6 @@ add_library(video_core STATIC | |||
| 73 | macro/macro_hle.h | 73 | macro/macro_hle.h |
| 74 | macro/macro_interpreter.cpp | 74 | macro/macro_interpreter.cpp |
| 75 | macro/macro_interpreter.h | 75 | macro/macro_interpreter.h |
| 76 | macro/macro_jit_x64.cpp | ||
| 77 | macro/macro_jit_x64.h | ||
| 78 | fence_manager.h | 76 | fence_manager.h |
| 79 | gpu.cpp | 77 | gpu.cpp |
| 80 | gpu.h | 78 | gpu.h |
| @@ -245,7 +243,7 @@ add_library(video_core STATIC | |||
| 245 | create_target_directory_groups(video_core) | 243 | create_target_directory_groups(video_core) |
| 246 | 244 | ||
| 247 | target_link_libraries(video_core PUBLIC common core) | 245 | target_link_libraries(video_core PUBLIC common core) |
| 248 | target_link_libraries(video_core PUBLIC glad shader_recompiler xbyak) | 246 | target_link_libraries(video_core PUBLIC glad shader_recompiler) |
| 249 | 247 | ||
| 250 | if (YUZU_USE_BUNDLED_FFMPEG AND NOT WIN32) | 248 | if (YUZU_USE_BUNDLED_FFMPEG AND NOT WIN32) |
| 251 | add_dependencies(video_core ffmpeg-build) | 249 | add_dependencies(video_core ffmpeg-build) |
| @@ -282,8 +280,19 @@ else() | |||
| 282 | 280 | ||
| 283 | -Wno-sign-conversion | 281 | -Wno-sign-conversion |
| 284 | ) | 282 | ) |
| 283 | |||
| 284 | # xbyak | ||
| 285 | set_source_files_properties(macro/macro_jit_x64.cpp PROPERTIES COMPILE_OPTIONS "-Wno-conversion;-Wno-shadow") | ||
| 285 | endif() | 286 | endif() |
| 286 | 287 | ||
| 287 | if (ARCHITECTURE_x86_64) | 288 | if (ARCHITECTURE_x86_64) |
| 289 | target_sources(video_core PRIVATE | ||
| 290 | macro/macro_jit_x64.cpp | ||
| 291 | macro/macro_jit_x64.h | ||
| 292 | ) | ||
| 293 | target_link_libraries(video_core PUBLIC xbyak) | ||
| 294 | endif() | ||
| 295 | |||
| 296 | if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) | ||
| 288 | target_link_libraries(video_core PRIVATE dynarmic) | 297 | target_link_libraries(video_core PRIVATE dynarmic) |
| 289 | endif() | 298 | endif() |
diff --git a/src/video_core/macro/macro.cpp b/src/video_core/macro/macro.cpp index f61d5998e..505d81c1e 100644 --- a/src/video_core/macro/macro.cpp +++ b/src/video_core/macro/macro.cpp | |||
| @@ -16,7 +16,10 @@ | |||
| 16 | #include "video_core/macro/macro.h" | 16 | #include "video_core/macro/macro.h" |
| 17 | #include "video_core/macro/macro_hle.h" | 17 | #include "video_core/macro/macro_hle.h" |
| 18 | #include "video_core/macro/macro_interpreter.h" | 18 | #include "video_core/macro/macro_interpreter.h" |
| 19 | |||
| 20 | #ifdef ARCHITECTURE_x86_64 | ||
| 19 | #include "video_core/macro/macro_jit_x64.h" | 21 | #include "video_core/macro/macro_jit_x64.h" |
| 22 | #endif | ||
| 20 | 23 | ||
| 21 | namespace Tegra { | 24 | namespace Tegra { |
| 22 | 25 | ||
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 239f12382..5cc1fbf32 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt | |||
| @@ -385,6 +385,6 @@ if (NOT APPLE) | |||
| 385 | target_compile_definitions(yuzu PRIVATE HAS_OPENGL) | 385 | target_compile_definitions(yuzu PRIVATE HAS_OPENGL) |
| 386 | endif() | 386 | endif() |
| 387 | 387 | ||
| 388 | if (ARCHITECTURE_x86_64) | 388 | if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) |
| 389 | target_link_libraries(yuzu PRIVATE dynarmic) | 389 | target_link_libraries(yuzu PRIVATE dynarmic) |
| 390 | endif() | 390 | endif() |