summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorShawn Hoffman <godisgovernment@gmail.com>2022-08-02 23:05:07 -0700
committerShawn Hoffman <godisgovernment@gmail.com>2022-08-02 23:05:07 -0700
commit78142e30cccf5420d3f190ab595cce2e2ff5e489 (patch)
treed18fcec023e12f0b5cf0426ae02dc380bc7c159a /Source/Core
parent4e6aa28da45b4b618f0ede639d4e0477fb124c0a (diff)
crypto/sha1: simplify enablement of sha insns on non-msvc
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/CMakeLists.txt1
-rw-r--r--Source/Core/Common/Crypto/SHA1.cpp24
2 files changed, 3 insertions, 22 deletions
diff --git a/Source/Core/Common/CMakeLists.txt b/Source/Core/Common/CMakeLists.txt
index f9e5109d17..8cf550a886 100644
--- a/Source/Core/Common/CMakeLists.txt
+++ b/Source/Core/Common/CMakeLists.txt
@@ -139,6 +139,7 @@ add_library(common
if(NOT MSVC AND _M_ARM_64)
set_source_files_properties(
Crypto/AES.cpp
+ Crypto/SHA1.cpp
PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto")
endif()
diff --git a/Source/Core/Common/Crypto/SHA1.cpp b/Source/Core/Common/Crypto/SHA1.cpp
index 9789818f13..7dfbb1f0c0 100644
--- a/Source/Core/Common/Crypto/SHA1.cpp
+++ b/Source/Core/Common/Crypto/SHA1.cpp
@@ -19,14 +19,6 @@
#ifdef _M_X86_64
#include <immintrin.h>
#elif defined(_M_ARM_64)
-#if defined(__clang__)
-// This is a bit of a hack to get clang to accept the sha1 intrinsics without modifying cmdline
-// flags. Note __ARM_FEATURE_CRYPTO is deprecated and "SHA2" flag is the lowest one which includes
-// SHA1.
-#define __ARM_FEATURE_SHA2
-// ...needed for older clang before they made the switchover to more granular flags.
-#define __ARM_FEATURE_CRYPTO
-#endif
#include <arm_acle.h>
#include <arm_neon.h>
#endif
@@ -256,17 +248,6 @@ private:
#ifdef _M_ARM_64
-// The armv8 flags are very annoying:
-// clang inserts "+" prefixes itself, gcc does not.
-// clang has deprecated "crypto" (removed in clang 13), gcc has not.
-#ifdef _MSC_VER
-#define TARGET_ARMV8_SHA1
-#elif defined(__clang__)
-#define TARGET_ARMV8_SHA1 [[gnu::target("sha2")]]
-#elif defined(__GNUC__)
-#define TARGET_ARMV8_SHA1 [[gnu::target("+crypto")]]
-#endif
-
class ContextNeon final : public BlockContext
{
public:
@@ -287,7 +268,6 @@ private:
u32 e{};
};
- TARGET_ARMV8_SHA1
static inline uint32x4_t MsgSchedule(WorkBlock* wblock, size_t i)
{
auto& w = *wblock;
@@ -299,7 +279,7 @@ private:
}
template <size_t Func>
- TARGET_ARMV8_SHA1 static inline constexpr uint32x4_t f(State state, uint32x4_t w)
+ static inline constexpr uint32x4_t f(State state, uint32x4_t w)
{
const auto wk = vaddq_u32(w, vdupq_n_u32(K[Func]));
if constexpr (Func == 0)
@@ -311,7 +291,7 @@ private:
}
template <size_t Func>
- TARGET_ARMV8_SHA1 static inline constexpr State FourRounds(State state, uint32x4_t w)
+ static inline constexpr State FourRounds(State state, uint32x4_t w)
{
#ifdef _MSC_VER
// FIXME it seems the msvc optimizer gets a little too happy