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