Fixed AVX undefined symbols on AARCH64 and removed AVX from ehs::Util::Compare.
This commit is contained in:
parent
0cec9789b1
commit
3025b76bec
@ -217,6 +217,7 @@ if (IS_OS_WINDOWS)
|
|||||||
src/system/CPU_MSVC_AMD64.asm src/HRNG_MSVC.asm src/Math_MSVC_AMD64.asm
|
src/system/CPU_MSVC_AMD64.asm src/HRNG_MSVC.asm src/Math_MSVC_AMD64.asm
|
||||||
src/io/Directory_W32.cpp include/ehs/io/Directory_W32.h
|
src/io/Directory_W32.cpp include/ehs/io/Directory_W32.h
|
||||||
include/ehs/io/socket/ICMP_W32.h src/io/socket/ICMP_W32.cpp
|
include/ehs/io/socket/ICMP_W32.h src/io/socket/ICMP_W32.cpp
|
||||||
|
src/system/AVX2_MSVC_AMD64.asm src/system/AVX512_MSVC_AMD64.asm
|
||||||
)
|
)
|
||||||
|
|
||||||
elseif (IS_OS_LINUX)
|
elseif (IS_OS_LINUX)
|
||||||
@ -236,6 +237,7 @@ elseif (IS_OS_LINUX)
|
|||||||
src/io/Directory_LNX.cpp include/ehs/io/Directory_LNX.h
|
src/io/Directory_LNX.cpp include/ehs/io/Directory_LNX.h
|
||||||
src/io/Usb_LNX.cpp include/ehs/io/Usb_LNX.h
|
src/io/Usb_LNX.cpp include/ehs/io/Usb_LNX.h
|
||||||
include/ehs/io/socket/ICMP_LNX.h src/io/socket/ICMP_LNX.cpp
|
include/ehs/io/socket/ICMP_LNX.h src/io/socket/ICMP_LNX.cpp
|
||||||
|
src/system/AVX2_GCC_AMD64.asm src/system/AVX512_GCC_AMD64.asm
|
||||||
)
|
)
|
||||||
|
|
||||||
#set(LINUX_WINDOW_SYSTEM "Wayland" CACHE STRING "Linux Window System")
|
#set(LINUX_WINDOW_SYSTEM "Wayland" CACHE STRING "Linux Window System")
|
||||||
@ -254,9 +256,9 @@ elseif (IS_OS_LINUX)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (IS_ARCH_AMD64)
|
if (IS_ARCH_AMD64)
|
||||||
list(APPEND EHS_SOURCES src/system/CPU_GCC_AMD64.asm src/HRNG_GCC.asm src/Math_GCC_AMD64.asm src/system/AVX2_GCC_AMD64.asm src/system/AVX512_GCC_AMD64.asm)
|
list(APPEND EHS_SOURCES src/system/CPU_GCC_AMD64.asm src/HRNG_GCC.asm src/Math_GCC_AMD64.asm)
|
||||||
elseif (IS_ARCH_ARM64)
|
elseif (IS_ARCH_ARM64)
|
||||||
list(APPEND EHS_SOURCES src/system/CPU_ARM64.cpp src/HRNG_ARM64.cpp src/Math_GCC_ARM64.s)
|
list(APPEND EHS_SOURCES src/system/CPU_ARM64.cpp src/HRNG_ARM64.cpp src/Math_GCC_ARM64.s src/system/AVX2_AARCH64.cpp src/system/AVX512_AARCH64.cpp)
|
||||||
endif ()
|
endif ()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -33,4 +33,4 @@ namespace ehs
|
|||||||
/// @note The parameters "a", and "b" must have alignas(32).
|
/// @note The parameters "a", and "b" must have alignas(32).
|
||||||
static bool CompareAligned(const SInt_64 *a, const SInt_64 *b);
|
static bool CompareAligned(const SInt_64 *a, const SInt_64 *b);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
16
src/Util.cpp
16
src/Util.cpp
@ -15,21 +15,7 @@ namespace ehs
|
|||||||
|
|
||||||
while (i < size)
|
while (i < size)
|
||||||
{
|
{
|
||||||
if (CPU::hasAVX512F && remainder >= 64)
|
if (remainder >= sizeof(UInt_64))
|
||||||
{
|
|
||||||
if (!AVX512::CompareUnaligned((UInt_64*)&aBytes[i], (UInt_64*)&bBytes[i]))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
i += 64;
|
|
||||||
}
|
|
||||||
else if (CPU::hasAVX2 && remainder >= 32)
|
|
||||||
{
|
|
||||||
if (!AVX2::CompareUnaligned((UInt_64*)&aBytes[i], (UInt_64*)&bBytes[i]))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
i += 32;
|
|
||||||
}
|
|
||||||
else if (remainder >= sizeof(UInt_64))
|
|
||||||
{
|
{
|
||||||
if (*(UInt_64*)&aBytes[i] != *(UInt_64*)&bBytes[i])
|
if (*(UInt_64*)&aBytes[i] != *(UInt_64*)&bBytes[i])
|
||||||
return false;
|
return false;
|
||||||
|
24
src/system/AVX2_AARCH64.cpp
Normal file
24
src/system/AVX2_AARCH64.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "ehs/system/AVX2.h"
|
||||||
|
|
||||||
|
namespace ehs
|
||||||
|
{
|
||||||
|
bool AVX2::CompareUnaligned(const UInt_64* a, const UInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AVX2::CompareUnaligned(const SInt_64* a, const SInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AVX2::CompareAligned(const UInt_64* a, const UInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AVX2::CompareAligned(const SInt_64* a, const SInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
49
src/system/AVX2_MSVC_AMD64.asm
Normal file
49
src/system/AVX2_MSVC_AMD64.asm
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
global ?CompareUnaligned@AVX2@ehs@@SA_NPEBK0@Z
|
||||||
|
global ?CompareUnaligned@AVX2@ehs@@SA_NPEBJ0@Z
|
||||||
|
global ?CompareAligned@AVX2@ehs@@SA_NPEBK0@Z
|
||||||
|
global ?CompareAligned@AVX2@ehs@@SA_NPEBJ0@Z
|
||||||
|
|
||||||
|
section .text
|
||||||
|
?CompareUnaligned@AVX2@ehs@@SA_NPEBK0@Z:
|
||||||
|
VMOVDQU YMM0, [RCX]
|
||||||
|
VMOVDQU YMM1, [RDX]
|
||||||
|
VPCMPEQQ YMM2, YMM0, YMM1
|
||||||
|
|
||||||
|
VPMOVMSKB EAX, YMM2
|
||||||
|
CMP EAX, 0xFFFFFFFF
|
||||||
|
SETE AL
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
?CompareUnaligned@AVX2@ehs@@SA_NPEBJ0@Z:
|
||||||
|
VMOVDQU YMM0, [RCX]
|
||||||
|
VMOVDQU YMM1, [RDX]
|
||||||
|
VPCMPEQQ YMM2, YMM0, YMM1
|
||||||
|
|
||||||
|
VPMOVMSKB EAX, YMM2
|
||||||
|
CMP EAX, 0xFFFFFFFF
|
||||||
|
SETE AL
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
?CompareAligned@AVX2@ehs@@SA_NPEBK0@Z:
|
||||||
|
VMOVDQA YMM0, [RCX]
|
||||||
|
VMOVDQA YMM1, [RDX]
|
||||||
|
VPCMPEQQ YMM2, YMM0, YMM1
|
||||||
|
|
||||||
|
VPMOVMSKB EAX, YMM2
|
||||||
|
CMP EAX, 0xFFFFFFFF
|
||||||
|
SETE AL
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
?CompareAligned@AVX2@ehs@@SA_NPEBJ0@Z:
|
||||||
|
VMOVDQA YMM0, [RCX]
|
||||||
|
VMOVDQA YMM1, [RDX]
|
||||||
|
VPCMPEQQ YMM2, YMM0, YMM1
|
||||||
|
|
||||||
|
VPMOVMSKB EAX, YMM2
|
||||||
|
CMP EAX, 0xFFFFFFFF
|
||||||
|
SETE AL
|
||||||
|
|
||||||
|
RET
|
24
src/system/AVX512_AARCH64.cpp
Normal file
24
src/system/AVX512_AARCH64.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "ehs/system/AVX512.h"
|
||||||
|
|
||||||
|
namespace ehs
|
||||||
|
{
|
||||||
|
bool AVX512::CompareUnaligned(const UInt_64* a, const UInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AVX512::CompareUnaligned(const SInt_64* a, const SInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AVX512::CompareAligned(const UInt_64* a, const UInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AVX512::CompareAligned(const SInt_64* a, const SInt_64* b)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
49
src/system/AVX512_MSVC_AMD64.asm
Normal file
49
src/system/AVX512_MSVC_AMD64.asm
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
global ?CompareUnaligned@AVX512@ehs@@SA_NPEBK0@Z
|
||||||
|
global ?CompareUnaligned@AVX512@ehs@@SA_NPEBJ0@Z
|
||||||
|
global ?CompareAligned@AVX512@ehs@@SA_NPEBK0@Z
|
||||||
|
global ?CompareAligned@AVX512@ehs@@SA_NPEBJ0@Z
|
||||||
|
|
||||||
|
section .text
|
||||||
|
?CompareUnaligned@AVX512@ehs@@SA_NPEBK0@Z:
|
||||||
|
VMOVDQU64 ZMM0, [RCX]
|
||||||
|
VMOVDQU64 ZMM1, [RDX]
|
||||||
|
|
||||||
|
VPCMPEQQ K1, ZMM0, ZMM1
|
||||||
|
|
||||||
|
KORTESTQ K1, K1
|
||||||
|
SETC AL
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
?CompareUnaligned@AVX512@ehs@@SA_NPEBJ0@Z:
|
||||||
|
VMOVDQU64 ZMM0, [RCX]
|
||||||
|
VMOVDQU64 ZMM1, [RDX]
|
||||||
|
|
||||||
|
VPCMPEQQ K1, ZMM0, ZMM1
|
||||||
|
|
||||||
|
KORTESTQ K1, K1
|
||||||
|
SETC AL
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
?CompareAligned@AVX512@ehs@@SA_NPEBK0@Z:
|
||||||
|
VMOVDQA64 ZMM0, [RCX]
|
||||||
|
VMOVDQA64 ZMM1, [RDX]
|
||||||
|
|
||||||
|
VPCMPEQQ K1, ZMM0, ZMM1
|
||||||
|
|
||||||
|
KORTESTQ K1, K1
|
||||||
|
SETC AL
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
?CompareAligned@AVX512@ehs@@SA_NPEBJ0@Z:
|
||||||
|
VMOVDQA64 ZMM0, [RCX]
|
||||||
|
VMOVDQA64 ZMM1, [RDX]
|
||||||
|
|
||||||
|
VPCMPEQQ K1, ZMM0, ZMM1
|
||||||
|
|
||||||
|
KORTESTQ K1, K1
|
||||||
|
SETC AL
|
||||||
|
|
||||||
|
RET
|
@ -744,7 +744,7 @@ namespace ehs
|
|||||||
bool CPU::RetrieveAVX512F()
|
bool CPU::RetrieveAVX512F()
|
||||||
{
|
{
|
||||||
#ifdef EHS_ARCH_X64
|
#ifdef EHS_ARCH_X64
|
||||||
return GetExtFeatureBits_1() & 0b00000000000000001000000000000000;
|
return GetExtFeatureBits_1() & 0b00000000000000010000000000000000;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user