Make loclass/cipher_bs_avx* compatible with clang

This commit is contained in:
Philippe Teuwen
2026-08-19 12:59:29 +02:00
parent 430fea5338
commit ddd8e57427
2 changed files with 28 additions and 12 deletions
+18 -10
View File
@@ -18,10 +18,14 @@
#include <immintrin.h>
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ANDROID__)
#if !defined(__ANDROID__)
#if defined(__clang__)
#pragma clang attribute push(__attribute__((target("avx2"))), apply_to = function)
#elif defined(__GNUC__)
#pragma GCC push_options
#pragma GCC target("avx2")
#endif
#endif
#define BS_ZERO _mm256_setzero_si256()
#define BS_ONES _mm256_set1_epi64x(-1)
@@ -121,7 +125,7 @@ static const uint64_t LANE_BITS_256_RAW[8][BS256_WORDS] = {
};
static inline __m256i lane_bits_256(int k) {
return _mm256_loadu_si256((const __m256i *)LANE_BITS_256_RAW[k]);
return _mm256_loadu_si256((const __m256i *)(const void *)LANE_BITS_256_RAW[k]);
}
static inline void bs_init_state(const __m256i kb[64], __m256i l[8], __m256i r[8], __m256i b[8], __m256i t[16]) {
@@ -174,7 +178,7 @@ static inline void bs_init_state(const __m256i kb[64], __m256i l[8], __m256i r[8
}
void prepare_ccnr_bits_bs256(const uint8_t *cc_nr, uint64_t y_bits_bs[96 * BS256_WORDS]) {
__m256i *y = (__m256i *)y_bits_bs;
__m256i *y = (__m256i *)(void *)y_bits_bs;
for (int i = 0; i < 12; i++) {
const uint8_t byte = cc_nr[i];
for (int bit = 0; bit < 8; bit++) {
@@ -184,7 +188,7 @@ void prepare_ccnr_bits_bs256(const uint8_t *cc_nr, uint64_t y_bits_bs[96 * BS256
}
void prepare_target_mac_bs256(const uint8_t target_mac[4], uint64_t target_mac_bs[32 * BS256_WORDS]) {
__m256i *tm = (__m256i *)target_mac_bs;
__m256i *tm = (__m256i *)(void *)target_mac_bs;
for (int i = 0; i < 4; i++) {
const uint8_t byte = target_mac[i];
for (int bit = 0; bit < 8; bit++) {
@@ -194,7 +198,7 @@ void prepare_target_mac_bs256(const uint8_t target_mac[4], uint64_t target_mac_b
}
void build_bitslice_key_256(const uint8_t partial_key[8], uint64_t index_start, uint64_t kb[64 * BS256_WORDS]) {
__m256i *k = (__m256i *)kb;
__m256i *k = (__m256i *)(void *)kb;
for (int j = 0; j < 8; j++) {
_mm256_storeu_si256(&k[j * 8 + 0], (partial_key[j] & 0x01) ? BS_ONES : BS_ZERO);
@@ -226,7 +230,7 @@ void doMAC_brute_match256(const uint64_t y_bits_bs[96 * BS256_WORDS],
// Load key into local __m256i array for fast access.
__m256i k[64];
const __m256i *kb_m = (const __m256i *)kb;
const __m256i *kb_m = (const __m256i *)(const void *)kb;
for (int i = 0; i < 64; i++) {
k[i] = _mm256_loadu_si256(&kb_m[i]);
}
@@ -234,8 +238,8 @@ void doMAC_brute_match256(const uint64_t y_bits_bs[96 * BS256_WORDS],
__m256i l[8], r[8], b[8], t[16];
bs_init_state(k, l, r, b, t);
const __m256i *y = (const __m256i *)y_bits_bs;
const __m256i *tm = (const __m256i *)target_mac_bs;
const __m256i *y = (const __m256i *)(const void *)y_bits_bs;
const __m256i *tm = (const __m256i *)(const void *)target_mac_bs;
for (int i = 0; i < 96; i++) {
bs_tick(t, b, l, r, k, _mm256_loadu_si256(&y[i]));
@@ -260,12 +264,16 @@ void doMAC_brute_match256(const uint64_t y_bits_bs[96 * BS256_WORDS],
}
}
_mm256_storeu_si256((__m256i *)match_out, mac_match);
_mm256_storeu_si256((__m256i *)(void *)match_out, mac_match);
}
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ANDROID__)
#if !defined(__ANDROID__)
#if defined(__clang__)
#pragma clang attribute pop
#elif defined(__GNUC__)
#pragma GCC pop_options
#endif
#endif
bool bs_avx2_supported(void) {
static int cached = -1;
+10 -2
View File
@@ -19,10 +19,14 @@
#include <immintrin.h>
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ANDROID__)
#if !defined(__ANDROID__)
#if defined(__clang__)
#pragma clang attribute push(__attribute__((target("avx512f"))), apply_to = function)
#elif defined(__GNUC__)
#pragma GCC push_options
#pragma GCC target("avx512f")
#endif
#endif
#define BS_ZERO _mm512_setzero_si512()
#define BS_ONES _mm512_set1_epi64(-1)
@@ -291,9 +295,13 @@ void doMAC_brute_match512(const uint64_t y_bits_bs[96 * BS512_WORDS],
_mm512_storeu_si512((void *)match_out, mac_match);
}
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ANDROID__)
#if !defined(__ANDROID__)
#if defined(__clang__)
#pragma clang attribute pop
#elif defined(__GNUC__)
#pragma GCC pop_options
#endif
#endif
bool bs_avx512_supported(void) {
static int cached = -1;