Commit d1afb3db authored by Michael R. Crusoe's avatar Michael R. Crusoe Committed by Michael R. Crusoe

arm crc32: define SIMDE_ARCH_ARM_CRC32 and consistently use it

parent 592f8f0c
...@@ -29,6 +29,11 @@ ...@@ -29,6 +29,11 @@
#include "types.h" #include "types.h"
#if defined(__ARM_ACLE) || (defined(__GNUC__) && defined(SIMDE_ARCH_ARM_CRC32))
#include <arm_acle.h>
#endif
// ^^ Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70974
HEDLEY_DIAGNOSTIC_PUSH HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DISABLE_UNWANTED_DIAGNOSTICS SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
SIMDE_BEGIN_DECLS_ SIMDE_BEGIN_DECLS_
...@@ -55,7 +60,7 @@ uint32_t simde_crc32_eor_mask(uint32_t a, uint32_t b, uint32_t mask) { ...@@ -55,7 +60,7 @@ uint32_t simde_crc32_eor_mask(uint32_t a, uint32_t b, uint32_t mask) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32b(uint32_t a, uint8_t b) { simde___crc32b(uint32_t a, uint8_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32b(a, b); return __crc32b(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -81,7 +86,7 @@ simde___crc32b(uint32_t a, uint8_t b) { ...@@ -81,7 +86,7 @@ simde___crc32b(uint32_t a, uint8_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32h(uint32_t a, uint16_t b) { simde___crc32h(uint32_t a, uint16_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32h(a, b); return __crc32h(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -107,7 +112,7 @@ simde___crc32h(uint32_t a, uint16_t b) { ...@@ -107,7 +112,7 @@ simde___crc32h(uint32_t a, uint16_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32w(uint32_t a, uint32_t b) { simde___crc32w(uint32_t a, uint32_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32w(a, b); return __crc32w(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -132,7 +137,7 @@ simde___crc32w(uint32_t a, uint32_t b) { ...@@ -132,7 +137,7 @@ simde___crc32w(uint32_t a, uint32_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32d(uint32_t a, uint64_t b) { simde___crc32d(uint32_t a, uint64_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32d(a, b); return __crc32d(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -167,7 +172,7 @@ simde___crc32d(uint32_t a, uint64_t b) { ...@@ -167,7 +172,7 @@ simde___crc32d(uint32_t a, uint64_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32cb(uint32_t a, uint8_t b) { simde___crc32cb(uint32_t a, uint8_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32cb(a, b); return __crc32cb(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -193,7 +198,7 @@ simde___crc32cb(uint32_t a, uint8_t b) { ...@@ -193,7 +198,7 @@ simde___crc32cb(uint32_t a, uint8_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32ch(uint32_t a, uint16_t b) { simde___crc32ch(uint32_t a, uint16_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32ch(a, b); return __crc32ch(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -219,7 +224,7 @@ simde___crc32ch(uint32_t a, uint16_t b) { ...@@ -219,7 +224,7 @@ simde___crc32ch(uint32_t a, uint16_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32cw(uint32_t a, uint32_t b) { simde___crc32cw(uint32_t a, uint32_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32cw(a, b); return __crc32cw(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
...@@ -244,7 +249,7 @@ simde___crc32cw(uint32_t a, uint32_t b) { ...@@ -244,7 +249,7 @@ simde___crc32cw(uint32_t a, uint32_t b) {
SIMDE_FUNCTION_ATTRIBUTES SIMDE_FUNCTION_ATTRIBUTES
uint32_t uint32_t
simde___crc32cd(uint32_t a, uint64_t b) { simde___crc32cd(uint32_t a, uint64_t b) {
#if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(__ARM_ACLE) #if defined(SIMDE_ARM_NEON_A32V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32cd(a, b); return __crc32cd(a, b);
#else #else
uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32)); uint32_t r_acc = HEDLEY_STATIC_CAST(uint32_t, simde_crc32_reverseBits(a, 32));
......
...@@ -130,6 +130,9 @@ ...@@ -130,6 +130,9 @@
#if defined(__ARM_FEATURE_CRYPTO) && __ARM_FEATURE_CRYPTO #if defined(__ARM_FEATURE_CRYPTO) && __ARM_FEATURE_CRYPTO
# define SIMDE_ARCH_ARM_CRYPTO # define SIMDE_ARCH_ARM_CRYPTO
#endif #endif
#if defined(__ARM_FEATURE_CRC32) && __ARM_FEATURE_CRC32
# define SIMDE_ARCH_ARM_CRC32
#endif
#if defined(__ARM_FEATURE_DOTPROD) && __ARM_FEATURE_DOTPROD #if defined(__ARM_FEATURE_DOTPROD) && __ARM_FEATURE_DOTPROD
# define SIMDE_ARCH_ARM_DOTPROD # define SIMDE_ARCH_ARM_DOTPROD
#endif #endif
......
...@@ -30,9 +30,10 @@ ...@@ -30,9 +30,10 @@
#include "sse4.1.h" #include "sse4.1.h"
#if defined(__ARM_ACLE) || (defined(__GNUC__) && defined(__ARM_FEATURE_CRC32)) #if defined(__ARM_ACLE) || (defined(__GNUC__) && defined(SIMDE_ARCH_ARM_CRC32))
#include <arm_acle.h> #include <arm_acle.h>
#endif #endif
// ^^ Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70974
HEDLEY_DIAGNOSTIC_PUSH HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DISABLE_UNWANTED_DIAGNOSTICS SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
...@@ -295,7 +296,7 @@ simde_mm_crc32_u8(uint32_t prevcrc, uint8_t v) { ...@@ -295,7 +296,7 @@ simde_mm_crc32_u8(uint32_t prevcrc, uint8_t v) {
#if defined(SIMDE_X86_SSE4_2_NATIVE) #if defined(SIMDE_X86_SSE4_2_NATIVE)
return _mm_crc32_u8(prevcrc, v); return _mm_crc32_u8(prevcrc, v);
#else #else
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(__ARM_FEATURE_CRC32) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32cb(prevcrc, v); return __crc32cb(prevcrc, v);
#else #else
uint32_t crc = prevcrc; uint32_t crc = prevcrc;
...@@ -328,7 +329,7 @@ simde_mm_crc32_u16(uint32_t prevcrc, uint16_t v) { ...@@ -328,7 +329,7 @@ simde_mm_crc32_u16(uint32_t prevcrc, uint16_t v) {
#if defined(SIMDE_X86_SSE4_2_NATIVE) #if defined(SIMDE_X86_SSE4_2_NATIVE)
return _mm_crc32_u16(prevcrc, v); return _mm_crc32_u16(prevcrc, v);
#else #else
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(__ARM_FEATURE_CRC32) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32ch(prevcrc, v); return __crc32ch(prevcrc, v);
#else #else
uint32_t crc = prevcrc; uint32_t crc = prevcrc;
...@@ -348,7 +349,7 @@ simde_mm_crc32_u32(uint32_t prevcrc, uint32_t v) { ...@@ -348,7 +349,7 @@ simde_mm_crc32_u32(uint32_t prevcrc, uint32_t v) {
#if defined(SIMDE_X86_SSE4_2_NATIVE) #if defined(SIMDE_X86_SSE4_2_NATIVE)
return _mm_crc32_u32(prevcrc, v); return _mm_crc32_u32(prevcrc, v);
#else #else
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(__ARM_FEATURE_CRC32) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32cw(prevcrc, v); return __crc32cw(prevcrc, v);
#else #else
uint32_t crc = prevcrc; uint32_t crc = prevcrc;
...@@ -368,7 +369,7 @@ simde_mm_crc32_u64(uint64_t prevcrc, uint64_t v) { ...@@ -368,7 +369,7 @@ simde_mm_crc32_u64(uint64_t prevcrc, uint64_t v) {
#if defined(SIMDE_X86_SSE4_2_NATIVE) && defined(SIMDE_ARCH_AMD64) #if defined(SIMDE_X86_SSE4_2_NATIVE) && defined(SIMDE_ARCH_AMD64)
return _mm_crc32_u64(prevcrc, v); return _mm_crc32_u64(prevcrc, v);
#else #else
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(__ARM_FEATURE_CRC32) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(SIMDE_ARCH_ARM_CRC32)
return __crc32cd(HEDLEY_STATIC_CAST(uint32_t, prevcrc), v); return __crc32cd(HEDLEY_STATIC_CAST(uint32_t, prevcrc), v);
#else #else
uint64_t crc = prevcrc; uint64_t crc = prevcrc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment