From 354c208569500c4c65a9dd5ed6ac442fea75113e Mon Sep 17 00:00:00 2001 From: psychocrypt <psychocryptHPC@gmail.com> Date: Mon, 17 Sep 2018 08:25:12 +0200 Subject: [PATCH] fix compiler incompatibilities - fix assembler code to pass the clang compiler - CMake: set asm file language - fix icc with gcc-7 compile issue with `_addcarry_u64` --- CMakeLists.txt | 1 + .../cpu/crypto/asm/cryptonigh_v8_main_loop_ivybridge.inc | 4 ++-- .../backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ryzen.inc | 4 ++-- xmrstak/backend/cpu/crypto/cryptonight_aesni.h | 4 +++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 067bbd0..cf43922 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -459,6 +459,7 @@ endif() target_link_libraries(xmr-stak-c ${LIBS}) enable_language(ASM) +set_property(SOURCE "xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop.S" PROPERTY LANGUAGE C) # asm optimized monero v8 code add_library(xmr-stak-asm STATIC diff --git a/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ivybridge.inc b/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ivybridge.inc index ea7f799..1cc20b3 100644 --- a/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ivybridge.inc +++ b/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ivybridge.inc @@ -157,14 +157,14 @@ $sqrt_fixup_ivybridge_ret: $sqrt_fixup_ivybridge: dec rdx - mov r13, -4389456576512 + movq r13, -4389456576512 mov rax, rdx shr rdx, 19 shr rax, 20 mov rcx, rdx sub rcx, rax add rax, r13 - mov r13, 4389456576511 + movq r13, 4389456576511 sub rcx, r13 mov r13d, -2147483647 imul rcx, rax diff --git a/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ryzen.inc b/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ryzen.inc index 5797f54..c564d89 100644 --- a/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ryzen.inc +++ b/xmrstak/backend/cpu/crypto/asm/cryptonigh_v8_main_loop_ryzen.inc @@ -157,14 +157,14 @@ $sqrt_fixup_ryzen_ret: $sqrt_fixup_ryzen: movq r9, xmm2 dec rdi - mov rdx, 4389456576511 + movq rdx, 4389456576511 mov rax, rdi shr rdi, 19 shr rax, 20 mov rcx, rdi sub rcx, rax sub rcx, rdx - mov rdx, -4389456576512 + movq rdx, -4389456576512 add rax, rdx imul rcx, rax sub rcx, r9 diff --git a/xmrstak/backend/cpu/crypto/cryptonight_aesni.h b/xmrstak/backend/cpu/crypto/cryptonight_aesni.h index 7c409d1..0838cfa 100644 --- a/xmrstak/backend/cpu/crypto/cryptonight_aesni.h +++ b/xmrstak/backend/cpu/crypto/cryptonight_aesni.h @@ -435,7 +435,9 @@ inline uint64_t int_sqrt33_1_double_precision(const uint64_t n0) uint64_t x2 = (s - (1022ULL << 32)) * (r - s - (1022ULL << 32) + 1); -#if defined _MSC_VER || (__GNUC__ >= 7) +#ifdef __INTEL_COMPILER + _addcarry_u64(_subborrow_u64(0, x2, n0, (unsigned __int64*)&x2), r, 0, (unsigned __int64*)&r); +#elif defined(_MSC_VER) || (__GNUC__ >= 7) _addcarry_u64(_subborrow_u64(0, x2, n0, (unsigned long long int*)&x2), r, 0, (unsigned long long int*)&r); #else // GCC versions prior to 7 don't generate correct assembly for _subborrow_u64 -> _addcarry_u64 sequence -- GitLab