Fixes for Visual Studio

This commit is contained in:
SChernykh 2019-01-14 16:38:28 +01:00
parent 8b9d5cff91
commit 56cacbd5bc
5 changed files with 70 additions and 17 deletions

View file

@ -19,7 +19,10 @@ FN_PREFIX(cnv2_mainloop_ivybridge_asm):
#include "cn2/cnv2_main_loop_ivybridge.inc" #include "cn2/cnv2_main_loop_ivybridge.inc"
add rsp, 48 add rsp, 48
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
ALIGN 16 ALIGN 16
FN_PREFIX(cnv2_mainloop_ryzen_asm): FN_PREFIX(cnv2_mainloop_ryzen_asm):
@ -28,7 +31,10 @@ FN_PREFIX(cnv2_mainloop_ryzen_asm):
#include "cn2/cnv2_main_loop_ryzen.inc" #include "cn2/cnv2_main_loop_ryzen.inc"
add rsp, 48 add rsp, 48
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
ALIGN 16 ALIGN 16
FN_PREFIX(cnv2_mainloop_bulldozer_asm): FN_PREFIX(cnv2_mainloop_bulldozer_asm):
@ -37,7 +43,10 @@ FN_PREFIX(cnv2_mainloop_bulldozer_asm):
#include "cn2/cnv2_main_loop_bulldozer.inc" #include "cn2/cnv2_main_loop_bulldozer.inc"
add rsp, 48 add rsp, 48
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
ALIGN 16 ALIGN 16
FN_PREFIX(cnv2_double_mainloop_sandybridge_asm): FN_PREFIX(cnv2_double_mainloop_sandybridge_asm):
@ -47,4 +56,7 @@ FN_PREFIX(cnv2_double_mainloop_sandybridge_asm):
#include "cn2/cnv2_double_main_loop_sandybridge.inc" #include "cn2/cnv2_double_main_loop_sandybridge.inc"
add rsp, 48 add rsp, 48
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop

View file

@ -8,28 +8,40 @@ ALIGN 64
cnv2_mainloop_ivybridge_asm PROC cnv2_mainloop_ivybridge_asm PROC
INCLUDE cn2/cnv2_main_loop_ivybridge.inc INCLUDE cn2/cnv2_main_loop_ivybridge.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_mainloop_ivybridge_asm ENDP cnv2_mainloop_ivybridge_asm ENDP
ALIGN 64 ALIGN 64
cnv2_mainloop_ryzen_asm PROC cnv2_mainloop_ryzen_asm PROC
INCLUDE cn2/cnv2_main_loop_ryzen.inc INCLUDE cn2/cnv2_main_loop_ryzen.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_mainloop_ryzen_asm ENDP cnv2_mainloop_ryzen_asm ENDP
ALIGN 64 ALIGN 64
cnv2_mainloop_bulldozer_asm PROC cnv2_mainloop_bulldozer_asm PROC
INCLUDE cn2/cnv2_main_loop_bulldozer.inc INCLUDE cn2/cnv2_main_loop_bulldozer.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_mainloop_bulldozer_asm ENDP cnv2_mainloop_bulldozer_asm ENDP
ALIGN 64 ALIGN 64
cnv2_double_mainloop_sandybridge_asm PROC cnv2_double_mainloop_sandybridge_asm PROC
INCLUDE cn2/cnv2_double_main_loop_sandybridge.inc INCLUDE cn2/cnv2_double_main_loop_sandybridge.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_double_mainloop_sandybridge_asm ENDP cnv2_double_mainloop_sandybridge_asm ENDP
_TEXT_CNV2_MAINLOOP ENDS _TEXT_CNV2_MAINLOOP ENDS

View file

@ -10,22 +10,34 @@ ALIGN 16
cnv2_mainloop_ivybridge_asm: cnv2_mainloop_ivybridge_asm:
#include "../cn2/cnv2_main_loop_ivybridge.inc" #include "../cn2/cnv2_main_loop_ivybridge.inc"
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
ALIGN 16 ALIGN 16
cnv2_mainloop_ryzen_asm: cnv2_mainloop_ryzen_asm:
#include "../cn2/cnv2_main_loop_ryzen.inc" #include "../cn2/cnv2_main_loop_ryzen.inc"
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
ALIGN 16 ALIGN 16
cnv2_mainloop_bulldozer_asm: cnv2_mainloop_bulldozer_asm:
#include "../cn2/cnv2_main_loop_bulldozer.inc" #include "../cn2/cnv2_main_loop_bulldozer.inc"
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
ALIGN 16 ALIGN 16
cnv2_double_mainloop_sandybridge_asm: cnv2_double_mainloop_sandybridge_asm:
#include "../cn2/cnv2_double_main_loop_sandybridge.inc" #include "../cn2/cnv2_double_main_loop_sandybridge.inc"
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop

View file

@ -8,28 +8,40 @@ ALIGN 64
cnv2_mainloop_ivybridge_asm PROC cnv2_mainloop_ivybridge_asm PROC
INCLUDE cn2/cnv2_main_loop_ivybridge.inc INCLUDE cn2/cnv2_main_loop_ivybridge.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_mainloop_ivybridge_asm ENDP cnv2_mainloop_ivybridge_asm ENDP
ALIGN 64 ALIGN 64
cnv2_mainloop_ryzen_asm PROC cnv2_mainloop_ryzen_asm PROC
INCLUDE cn2/cnv2_main_loop_ryzen.inc INCLUDE cn2/cnv2_main_loop_ryzen.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_mainloop_ryzen_asm ENDP cnv2_mainloop_ryzen_asm ENDP
ALIGN 64 ALIGN 64
cnv2_mainloop_bulldozer_asm PROC cnv2_mainloop_bulldozer_asm PROC
INCLUDE cn2/cnv2_main_loop_bulldozer.inc INCLUDE cn2/cnv2_main_loop_bulldozer.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_mainloop_bulldozer_asm ENDP cnv2_mainloop_bulldozer_asm ENDP
ALIGN 64 ALIGN 64
cnv2_double_mainloop_sandybridge_asm PROC cnv2_double_mainloop_sandybridge_asm PROC
INCLUDE cn2/cnv2_double_main_loop_sandybridge.inc INCLUDE cn2/cnv2_double_main_loop_sandybridge.inc
ret 0 ret 0
nop;nop;nop;nop; nop
nop
nop
nop
cnv2_double_mainloop_sandybridge_asm ENDP cnv2_double_mainloop_sandybridge_asm ENDP
_TEXT_CNV2_MAINLOOP ENDS _TEXT_CNV2_MAINLOOP ENDS

View file

@ -57,10 +57,15 @@ xmrig::CpuThread::CpuThread(size_t index, Algo algorithm, AlgoVariant av, Multiw
#ifndef XMRIG_NO_ASM #ifndef XMRIG_NO_ASM
template<typename T, typename U> template<typename T, typename U>
static void patchCode(T& dst, U src, const uint32_t iterations, const uint32_t mask) static void patchCode(T dst, U src, const uint32_t iterations, const uint32_t mask)
{ {
const uint8_t* p = reinterpret_cast<const uint8_t*>(src); const uint8_t* p = reinterpret_cast<const uint8_t*>(src);
// Workaround for Visual Studio placing trampoline in debug builds
if (p[0] == 0xE9) {
p += *(int32_t*)(p + 1) + 5;
}
size_t size = 0; size_t size = 0;
while (*(uint32_t*)(p + size) != 0x90909090) { while (*(uint32_t*)(p + size) != 0x90909090) {
++size; ++size;