diff --git a/CMakeLists.txt b/CMakeLists.txt index 70d57d107..4bb5cf963 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,9 @@ option(WITH_HTTP "Enable HTTP protocol support (client/server)" ON) option(WITH_DEBUG_LOG "Enable debug log output" OFF) option(WITH_TLS "Enable OpenSSL support" ON) option(WITH_ASM "Enable ASM PoW implementations" ON) -option(WITH_MSR "Enable MSR mod & 1st-gen Ryzen fix" ON) +option(WITH_ASM_AMD "Enable ASM for AMD processors" ON) +option(WITH_MSR "Enable MSR mod" ON) +option(WITH_MSR_ZEN "Enable MSR mod for AMD Zen-based processors" ON) option(WITH_ENV_VARS "Enable environment variables support in config file" ON) option(WITH_EMBEDDED_CONFIG "Enable internal embedded JSON config" OFF) option(WITH_OPENCL "Enable OpenCL backend" ON) diff --git a/cmake/asm.cmake b/cmake/asm.cmake index e445defde..6c6edd184 100644 --- a/cmake/asm.cmake +++ b/cmake/asm.cmake @@ -44,9 +44,17 @@ if (WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8) set_property(TARGET ${XMRIG_ASM_LIBRARY} PROPERTY LINKER_LANGUAGE C) add_definitions(/DXMRIG_FEATURE_ASM) + if (WITH_ASM_AMD) + add_definitions(/DXMRIG_FEATURE_ASM_AMD) + message("-- WITH_ASM=ON (+amd)") + else() + message("-- WITH_ASM=ON (-amd)") + endif() else() set(XMRIG_ASM_SOURCES "") set(XMRIG_ASM_LIBRARY "") remove_definitions(/DXMRIG_FEATURE_ASM) + remove_definitions(/DXMRIG_FEATURE_ASM_AMD) + message("-- WITH_ASM=OFF") endif() diff --git a/cmake/randomx.cmake b/cmake/randomx.cmake index 2d54dbf78..292545739 100644 --- a/cmake/randomx.cmake +++ b/cmake/randomx.cmake @@ -104,8 +104,13 @@ if (WITH_RANDOMX) if (WITH_MSR AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8 AND (XMRIG_OS_WIN OR XMRIG_OS_LINUX)) add_definitions(/DXMRIG_FEATURE_MSR) - add_definitions(/DXMRIG_FIX_RYZEN) - message("-- WITH_MSR=ON") + if (WITH_MSR_ZEN) + add_definitions(/DXMRIG_FIX_RYZEN) + message("-- WITH_MSR=ON (+zen)") + else() + remove_definitions(/DXMRIG_FIX_RYZEN) + message("-- WITH_MSR=ON (-zen)") + endif() if (XMRIG_OS_WIN) list(APPEND SOURCES_CRYPTO diff --git a/src/core/config/usage.h b/src/core/config/usage.h index 53a8e58c9..0e3ae087b 100644 --- a/src/core/config/usage.h +++ b/src/core/config/usage.h @@ -94,7 +94,13 @@ static inline const std::string &usage() # ifdef XMRIG_ALGO_RANDOMX u += " --huge-pages-jit enable huge pages support for RandomX JIT code\n"; # endif +# ifdef XMRIG_FEATURE_ASM +# ifdef XMRIG_FEATURE_ASM_AMD u += " --asm=ASM ASM optimizations, possible values: auto, none, intel, ryzen, bulldozer\n"; +# else + u += " --asm=ASM ASM optimizations, possible values: auto, none, intel\n"; +# endif +# endif # if defined(__x86_64__) || defined(_M_AMD64) u += " --argon2-impl=IMPL argon2 implementation: x86_64, SSE2, SSSE3, XOP, AVX2, AVX-512F\n"; diff --git a/src/crypto/cn/CnHash.cpp b/src/crypto/cn/CnHash.cpp index 4b4b006f3..24cda934a 100644 --- a/src/crypto/cn/CnHash.cpp +++ b/src/crypto/cn/CnHash.cpp @@ -55,6 +55,7 @@ bool cn_vaes_enabled = false; #ifdef XMRIG_FEATURE_ASM +#ifdef XMRIG_FEATURE_ASM_AMD # define ADD_FN_ASM(algo) do { \ m_map[algo]->data[AV_SINGLE][Assembly::INTEL] = cryptonight_single_hash_asm<algo, Assembly::INTEL>; \ m_map[algo]->data[AV_SINGLE][Assembly::RYZEN] = cryptonight_single_hash_asm<algo, Assembly::RYZEN>; \ @@ -63,34 +64,50 @@ bool cn_vaes_enabled = false; m_map[algo]->data[AV_DOUBLE][Assembly::RYZEN] = cryptonight_double_hash_asm<algo, Assembly::RYZEN>; \ m_map[algo]->data[AV_DOUBLE][Assembly::BULLDOZER] = cryptonight_double_hash_asm<algo, Assembly::BULLDOZER>; \ } while (0) +#else +# define ADD_FN_ASM(algo) do { \ + m_map[algo]->data[AV_SINGLE][Assembly::INTEL] = cryptonight_single_hash_asm<algo, Assembly::INTEL>; \ + m_map[algo]->data[AV_DOUBLE][Assembly::INTEL] = cryptonight_double_hash_asm<algo, Assembly::INTEL>; \ + } while (0) +#endif namespace xmrig { cn_mainloop_fun cn_half_mainloop_ivybridge_asm = nullptr; +#ifdef XMRIG_FEATURE_ASM_AMD cn_mainloop_fun cn_half_mainloop_ryzen_asm = nullptr; cn_mainloop_fun cn_half_mainloop_bulldozer_asm = nullptr; +#endif cn_mainloop_fun cn_half_double_mainloop_sandybridge_asm = nullptr; cn_mainloop_fun cn_trtl_mainloop_ivybridge_asm = nullptr; +#ifdef XMRIG_FEATURE_ASM_AMD cn_mainloop_fun cn_trtl_mainloop_ryzen_asm = nullptr; cn_mainloop_fun cn_trtl_mainloop_bulldozer_asm = nullptr; +#endif cn_mainloop_fun cn_trtl_double_mainloop_sandybridge_asm = nullptr; cn_mainloop_fun cn_tlo_mainloop_ivybridge_asm = nullptr; +#ifdef XMRIG_FEATURE_ASM_AMD cn_mainloop_fun cn_tlo_mainloop_ryzen_asm = nullptr; cn_mainloop_fun cn_tlo_mainloop_bulldozer_asm = nullptr; +#endif cn_mainloop_fun cn_tlo_double_mainloop_sandybridge_asm = nullptr; cn_mainloop_fun cn_zls_mainloop_ivybridge_asm = nullptr; +#ifdef XMRIG_FEATURE_ASM_AMD cn_mainloop_fun cn_zls_mainloop_ryzen_asm = nullptr; cn_mainloop_fun cn_zls_mainloop_bulldozer_asm = nullptr; +#endif cn_mainloop_fun cn_zls_double_mainloop_sandybridge_asm = nullptr; cn_mainloop_fun cn_double_mainloop_ivybridge_asm = nullptr; +#ifdef XMRIG_FEATURE_ASM_AMD cn_mainloop_fun cn_double_mainloop_ryzen_asm = nullptr; cn_mainloop_fun cn_double_mainloop_bulldozer_asm = nullptr; +#endif cn_mainloop_fun cn_double_double_mainloop_sandybridge_asm = nullptr; cn_mainloop_fun cn_upx2_mainloop_asm = nullptr; @@ -160,31 +177,41 @@ static void patchAsmVariants() auto base = static_cast<uint8_t *>(VirtualMemory::allocateExecutableMemory(allocation_size, false)); cn_half_mainloop_ivybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x0000); +# ifdef XMRIG_FEATURE_ASM_AMD cn_half_mainloop_ryzen_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x1000); cn_half_mainloop_bulldozer_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x2000); +# endif cn_half_double_mainloop_sandybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x3000); # ifdef XMRIG_ALGO_CN_PICO cn_trtl_mainloop_ivybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x4000); +# ifdef XMRIG_FEATURE_ASM_AMD cn_trtl_mainloop_ryzen_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x5000); cn_trtl_mainloop_bulldozer_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x6000); +# endif cn_trtl_double_mainloop_sandybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x7000); # endif cn_zls_mainloop_ivybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x8000); +# ifdef XMRIG_FEATURE_ASM_AMD cn_zls_mainloop_ryzen_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x9000); cn_zls_mainloop_bulldozer_asm = reinterpret_cast<cn_mainloop_fun> (base + 0xA000); +# endif cn_zls_double_mainloop_sandybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0xB000); cn_double_mainloop_ivybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0xC000); +# ifdef XMRIG_FEATURE_ASM_AMD cn_double_mainloop_ryzen_asm = reinterpret_cast<cn_mainloop_fun> (base + 0xD000); cn_double_mainloop_bulldozer_asm = reinterpret_cast<cn_mainloop_fun> (base + 0xE000); +# endif cn_double_double_mainloop_sandybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0xF000); # ifdef XMRIG_ALGO_CN_PICO cn_tlo_mainloop_ivybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x10000); +# ifdef XMRIG_FEATURE_ASM_AMD cn_tlo_mainloop_ryzen_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x11000); cn_tlo_mainloop_bulldozer_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x12000); +# endif cn_tlo_double_mainloop_sandybridge_asm = reinterpret_cast<cn_mainloop_fun> (base + 0x13000); # endif @@ -220,8 +247,10 @@ static void patchAsmVariants() constexpr uint32_t ITER = CnAlgo<Algorithm::CN_HALF>().iterations(); patchCode(cn_half_mainloop_ivybridge_asm, cnv2_mainloop_ivybridge_asm, ITER); +# ifdef XMRIG_FEATURE_ASM_AMD patchCode(cn_half_mainloop_ryzen_asm, cnv2_mainloop_ryzen_asm, ITER); patchCode(cn_half_mainloop_bulldozer_asm, cnv2_mainloop_bulldozer_asm, ITER); +# endif patchCode(cn_half_double_mainloop_sandybridge_asm, cnv2_double_mainloop_sandybridge_asm, ITER); } @@ -231,8 +260,10 @@ static void patchAsmVariants() constexpr uint32_t MASK = CnAlgo<Algorithm::CN_PICO_0>().mask(); patchCode(cn_trtl_mainloop_ivybridge_asm, cnv2_mainloop_ivybridge_asm, ITER, MASK); +# ifdef XMRIG_FEATURE_ASM_AMD patchCode(cn_trtl_mainloop_ryzen_asm, cnv2_mainloop_ryzen_asm, ITER, MASK); patchCode(cn_trtl_mainloop_bulldozer_asm, cnv2_mainloop_bulldozer_asm, ITER, MASK); +# endif patchCode(cn_trtl_double_mainloop_sandybridge_asm, cnv2_double_mainloop_sandybridge_asm, ITER, MASK); } @@ -241,8 +272,10 @@ static void patchAsmVariants() constexpr uint32_t MASK = CnAlgo<Algorithm::CN_PICO_TLO>().mask(); patchCode(cn_tlo_mainloop_ivybridge_asm, cnv2_mainloop_ivybridge_asm, ITER, MASK); +# ifdef XMRIG_FEATURE_ASM_AMD patchCode(cn_tlo_mainloop_ryzen_asm, cnv2_mainloop_ryzen_asm, ITER, MASK); patchCode(cn_tlo_mainloop_bulldozer_asm, cnv2_mainloop_bulldozer_asm, ITER, MASK); +# endif patchCode(cn_tlo_double_mainloop_sandybridge_asm, cnv2_double_mainloop_sandybridge_asm, ITER, MASK); } # endif @@ -251,8 +284,10 @@ static void patchAsmVariants() constexpr uint32_t ITER = CnAlgo<Algorithm::CN_ZLS>().iterations(); patchCode(cn_zls_mainloop_ivybridge_asm, cnv2_mainloop_ivybridge_asm, ITER); +# ifdef XMRIG_FEATURE_ASM_AMD patchCode(cn_zls_mainloop_ryzen_asm, cnv2_mainloop_ryzen_asm, ITER); patchCode(cn_zls_mainloop_bulldozer_asm, cnv2_mainloop_bulldozer_asm, ITER); +# endif patchCode(cn_zls_double_mainloop_sandybridge_asm, cnv2_double_mainloop_sandybridge_asm, ITER); } @@ -260,8 +295,10 @@ static void patchAsmVariants() constexpr uint32_t ITER = CnAlgo<Algorithm::CN_DOUBLE>().iterations(); patchCode(cn_double_mainloop_ivybridge_asm, cnv2_mainloop_ivybridge_asm, ITER); +# ifdef XMRIG_FEATURE_ASM_AMD patchCode(cn_double_mainloop_ryzen_asm, cnv2_mainloop_ryzen_asm, ITER); patchCode(cn_double_mainloop_bulldozer_asm, cnv2_mainloop_bulldozer_asm, ITER); +# endif patchCode(cn_double_double_mainloop_sandybridge_asm, cnv2_double_mainloop_sandybridge_asm, ITER); } diff --git a/src/crypto/cn/CryptoNight_x86.h b/src/crypto/cn/CryptoNight_x86.h index 64622ee4c..8a3236c73 100644 --- a/src/crypto/cn/CryptoNight_x86.h +++ b/src/crypto/cn/CryptoNight_x86.h @@ -852,12 +852,16 @@ extern "C" void cnv1_single_mainloop_asm(cryptonight_ctx * *ctx); extern "C" void cnv1_double_mainloop_asm(cryptonight_ctx **ctx); extern "C" void cnv1_quad_mainloop_asm(cryptonight_ctx **ctx); extern "C" void cnv2_mainloop_ivybridge_asm(cryptonight_ctx **ctx); +#ifdef XMRIG_FEATURE_ASM_AMD extern "C" void cnv2_mainloop_ryzen_asm(cryptonight_ctx **ctx); extern "C" void cnv2_mainloop_bulldozer_asm(cryptonight_ctx **ctx); +#endif extern "C" void cnv2_double_mainloop_sandybridge_asm(cryptonight_ctx **ctx); extern "C" void cnv2_rwz_mainloop_asm(cryptonight_ctx **ctx); extern "C" void cnv2_rwz_double_mainloop_asm(cryptonight_ctx **ctx); +#ifdef XMRIG_FEATURE_ASM_AMD extern "C" void cnv2_upx_double_mainloop_zen3_asm(cryptonight_ctx **ctx); +#endif namespace xmrig { @@ -867,28 +871,38 @@ typedef void (*cn_mainloop_fun)(cryptonight_ctx **ctx); extern cn_mainloop_fun cn_half_mainloop_ivybridge_asm; +#ifdef XMRIG_FEATURE_ASM_AMD extern cn_mainloop_fun cn_half_mainloop_ryzen_asm; extern cn_mainloop_fun cn_half_mainloop_bulldozer_asm; +#endif extern cn_mainloop_fun cn_half_double_mainloop_sandybridge_asm; extern cn_mainloop_fun cn_trtl_mainloop_ivybridge_asm; +#ifdef XMRIG_FEATURE_ASM_AMD extern cn_mainloop_fun cn_trtl_mainloop_ryzen_asm; extern cn_mainloop_fun cn_trtl_mainloop_bulldozer_asm; +#endif extern cn_mainloop_fun cn_trtl_double_mainloop_sandybridge_asm; extern cn_mainloop_fun cn_tlo_mainloop_ivybridge_asm; +#ifdef XMRIG_FEATURE_ASM_AMD extern cn_mainloop_fun cn_tlo_mainloop_ryzen_asm; extern cn_mainloop_fun cn_tlo_mainloop_bulldozer_asm; +#endif extern cn_mainloop_fun cn_tlo_double_mainloop_sandybridge_asm; extern cn_mainloop_fun cn_zls_mainloop_ivybridge_asm; +#ifdef XMRIG_FEATURE_ASM_AMD extern cn_mainloop_fun cn_zls_mainloop_ryzen_asm; extern cn_mainloop_fun cn_zls_mainloop_bulldozer_asm; +#endif extern cn_mainloop_fun cn_zls_double_mainloop_sandybridge_asm; extern cn_mainloop_fun cn_double_mainloop_ivybridge_asm; +#ifdef XMRIG_FEATURE_ASM_AMD extern cn_mainloop_fun cn_double_mainloop_ryzen_asm; extern cn_mainloop_fun cn_double_mainloop_bulldozer_asm; +#endif extern cn_mainloop_fun cn_double_double_mainloop_sandybridge_asm; extern cn_mainloop_fun cn_upx2_mainloop_asm; @@ -964,46 +978,54 @@ inline void cryptonight_single_hash_asm(const uint8_t *__restrict__ input, size_ if (ASM == Assembly::INTEL) { cnv2_mainloop_ivybridge_asm(ctx); } +# ifdef XMRIG_FEATURE_ASM_AMD else if (ASM == Assembly::RYZEN) { cnv2_mainloop_ryzen_asm(ctx); } else { cnv2_mainloop_bulldozer_asm(ctx); } +# endif } else if (ALGO == Algorithm::CN_HALF) { if (ASM == Assembly::INTEL) { cn_half_mainloop_ivybridge_asm(ctx); } +# ifdef XMRIG_FEATURE_ASM_AMD else if (ASM == Assembly::RYZEN) { cn_half_mainloop_ryzen_asm(ctx); } else { cn_half_mainloop_bulldozer_asm(ctx); } +# endif } # ifdef XMRIG_ALGO_CN_PICO else if (ALGO == Algorithm::CN_PICO_0) { if (ASM == Assembly::INTEL) { cn_trtl_mainloop_ivybridge_asm(ctx); } +# ifdef XMRIG_FEATURE_ASM_AMD else if (ASM == Assembly::RYZEN) { cn_trtl_mainloop_ryzen_asm(ctx); } else { cn_trtl_mainloop_bulldozer_asm(ctx); } +# endif } else if (ALGO == Algorithm::CN_PICO_TLO) { if (ASM == Assembly::INTEL) { cn_tlo_mainloop_ivybridge_asm(ctx); } +# ifdef XMRIG_FEATURE_ASM_AMD else if (ASM == Assembly::RYZEN) { cn_tlo_mainloop_ryzen_asm(ctx); } else { cn_tlo_mainloop_bulldozer_asm(ctx); } +# endif } # endif else if (ALGO == Algorithm::CN_RWZ) { @@ -1013,23 +1035,27 @@ inline void cryptonight_single_hash_asm(const uint8_t *__restrict__ input, size_ if (ASM == Assembly::INTEL) { cn_zls_mainloop_ivybridge_asm(ctx); } +# ifdef XMRIG_FEATURE_ASM_AMD else if (ASM == Assembly::RYZEN) { cn_zls_mainloop_ryzen_asm(ctx); } else { cn_zls_mainloop_bulldozer_asm(ctx); } +# endif } else if (ALGO == Algorithm::CN_DOUBLE) { if (ASM == Assembly::INTEL) { cn_double_mainloop_ivybridge_asm(ctx); } +# ifdef XMRIG_FEATURE_ASM_AMD else if (ASM == Assembly::RYZEN) { cn_double_mainloop_ryzen_asm(ctx); } else { cn_double_mainloop_bulldozer_asm(ctx); } +# endif } # ifdef XMRIG_ALGO_CN_FEMTO else if (ALGO == Algorithm::CN_UPX2) { @@ -1094,12 +1120,16 @@ inline void cryptonight_double_hash_asm(const uint8_t *__restrict__ input, size_ # endif # ifdef XMRIG_ALGO_CN_FEMTO else if (ALGO == Algorithm::CN_UPX2) { +# ifdef XMRIG_FEATURE_ASM_AMD if (Cpu::info()->arch() == ICpuInfo::ARCH_ZEN3) { cnv2_upx_double_mainloop_zen3_asm(ctx); } else { cn_upx2_double_mainloop_asm(ctx); } +# else + cn_upx2_double_mainloop_asm(ctx); +# endif } # endif else if (ALGO == Algorithm::CN_RWZ) { diff --git a/src/crypto/cn/asm/cn_main_loop.S b/src/crypto/cn/asm/cn_main_loop.S index 527e20e12..0a2ea3610 100644 --- a/src/crypto/cn/asm/cn_main_loop.S +++ b/src/crypto/cn/asm/cn_main_loop.S @@ -15,12 +15,16 @@ .global FN_PREFIX(cnv1_double_mainloop_asm) .global FN_PREFIX(cnv1_quad_mainloop_asm) .global FN_PREFIX(cnv2_mainloop_ivybridge_asm) +#ifdef XMRIG_FEATURE_ASM_AMD .global FN_PREFIX(cnv2_mainloop_ryzen_asm) .global FN_PREFIX(cnv2_mainloop_bulldozer_asm) +#endif .global FN_PREFIX(cnv2_double_mainloop_sandybridge_asm) .global FN_PREFIX(cnv2_rwz_mainloop_asm) .global FN_PREFIX(cnv2_rwz_double_mainloop_asm) +#ifdef XMRIG_FEATURE_ASM_AMD .global FN_PREFIX(cnv2_upx_double_mainloop_zen3_asm) +#endif ALIGN(64) FN_PREFIX(cnv1_single_mainloop_asm): @@ -58,6 +62,7 @@ FN_PREFIX(cnv2_mainloop_ivybridge_asm): ret 0 mov eax, 3735929054 +#ifdef XMRIG_FEATURE_ASM_AMD ALIGN(64) FN_PREFIX(cnv2_mainloop_ryzen_asm): sub rsp, 48 @@ -75,6 +80,7 @@ FN_PREFIX(cnv2_mainloop_bulldozer_asm): add rsp, 48 ret 0 mov eax, 3735929054 +#endif ALIGN(64) FN_PREFIX(cnv2_double_mainloop_sandybridge_asm): @@ -103,6 +109,7 @@ FN_PREFIX(cnv2_rwz_double_mainloop_asm): ret 0 mov eax, 3735929054 +#ifdef XMRIG_FEATURE_ASM_AMD ALIGN(64) FN_PREFIX(cnv2_upx_double_mainloop_zen3_asm): sub rsp, 48 @@ -111,6 +118,7 @@ FN_PREFIX(cnv2_upx_double_mainloop_zen3_asm): add rsp, 48 ret 0 mov eax, 3735929054 +#endif #if defined(__linux__) && defined(__ELF__) .section .note.GNU-stack,"",%progbits diff --git a/src/crypto/cn/asm/win64/cn_main_loop.S b/src/crypto/cn/asm/win64/cn_main_loop.S index 9a227f0af..b4917ab09 100644 --- a/src/crypto/cn/asm/win64/cn_main_loop.S +++ b/src/crypto/cn/asm/win64/cn_main_loop.S @@ -5,12 +5,16 @@ .global cnv1_double_mainloop_asm .global cnv1_quad_mainloop_asm .global cnv2_mainloop_ivybridge_asm +#ifdef XMRIG_FEATURE_ASM_AMD .global cnv2_mainloop_ryzen_asm .global cnv2_mainloop_bulldozer_asm +#endif .global cnv2_double_mainloop_sandybridge_asm .global cnv2_rwz_mainloop_asm .global cnv2_rwz_double_mainloop_asm +#ifdef XMRIG_FEATURE_ASM_AMD .global cnv2_upx_double_mainloop_zen3_asm +#endif ALIGN(64) cnv1_single_mainloop_asm: @@ -36,6 +40,7 @@ cnv2_mainloop_ivybridge_asm: ret 0 mov eax, 3735929054 +#ifdef XMRIG_FEATURE_ASM_AMD ALIGN(64) cnv2_mainloop_ryzen_asm: #include "../cn2/cnv2_main_loop_ryzen.inc" @@ -47,6 +52,7 @@ cnv2_mainloop_bulldozer_asm: #include "../cn2/cnv2_main_loop_bulldozer.inc" ret 0 mov eax, 3735929054 +#endif ALIGN(64) cnv2_double_mainloop_sandybridge_asm: @@ -66,8 +72,10 @@ cnv2_rwz_double_mainloop_asm: ret 0 mov eax, 3735929054 +#ifdef XMRIG_FEATURE_ASM_AMD ALIGN(64) cnv2_upx_double_mainloop_zen3_asm: #include "cn2/cnv2_upx_double_mainloop_zen3.inc" ret 0 mov eax, 3735929054 +#endif diff --git a/src/crypto/rx/RxVm.cpp b/src/crypto/rx/RxVm.cpp index acaa25e05..5924f58b6 100644 --- a/src/crypto/rx/RxVm.cpp +++ b/src/crypto/rx/RxVm.cpp @@ -41,10 +41,12 @@ randomx_vm *xmrig::RxVm::create(RxDataset *dataset, uint8_t *scratchpad, bool so flags |= RANDOMX_FLAG_JIT; } +# ifdef XMRIG_FEATURE_ASM_AMD const auto asmId = assembly == Assembly::AUTO ? Cpu::info()->assembly() : assembly.id(); if ((asmId == Assembly::RYZEN) || (asmId == Assembly::BULLDOZER)) { flags |= RANDOMX_FLAG_AMD; } +# endif return randomx_create_vm(static_cast<randomx_flags>(flags), !dataset->get() ? dataset->cache()->get() : nullptr, dataset->get(), scratchpad, node); }