diff --git a/gcm.cpp b/gcm.cpp index ba922844..9be90493 100644 --- a/gcm.cpp +++ b/gcm.cpp @@ -23,6 +23,10 @@ // # undef CRYPTOPP_CLMUL_AVAILABLE // #endif +// Clang casts +#define M128I_CAST(x) ((__m128i *)(void *)(x)) +#define CONST_M128I_CAST(x) ((const __m128i *)(const void *)(x)) + #include "gcm.h" #include "cpu.h" @@ -81,7 +85,7 @@ inline static void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c) CRYPTOPP_ASSERT(IsAlignedOn(a,GetAlignmentOf<__m128i>())); CRYPTOPP_ASSERT(IsAlignedOn(b,GetAlignmentOf<__m128i>())); CRYPTOPP_ASSERT(IsAlignedOn(c,GetAlignmentOf<__m128i>())); - *(__m128i *)(void *)a = _mm_xor_si128(*(__m128i *)(void *)b, *(__m128i *)(void *)c); + *M128I_CAST(a) = _mm_xor_si128(*M128I_CAST(b), *M128I_CAST(c)); # else asm ("movdqa %1, %%xmm0; pxor %2, %%xmm0; movdqa %%xmm0, %0;" : "=m" (a[0]) : "m"(b[0]), "m"(c[0])); # endif diff --git a/rijndael.cpp b/rijndael.cpp index e04d323c..9a81cac1 100644 --- a/rijndael.cpp +++ b/rijndael.cpp @@ -92,6 +92,10 @@ NAMESPACE_BEGIN(CryptoPP) # define MAYBE_CONST const #endif +// Clang casts +#define M128I_CAST(x) ((__m128i *)(void *)(x)) +#define CONST_M128I_CAST(x) ((const __m128i *)(const void *)(x)) + #if defined(CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS) || defined(CRYPTOPP_ALLOW_RIJNDAEL_UNALIGNED_DATA_ACCESS) # if (CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE)) && !defined(CRYPTOPP_DISABLE_RIJNDAEL_ASM) namespace rdtable {CRYPTOPP_ALIGN_DATA(16) word64 Te[256+2];}