Fix "impossible constraint in \\asm\" on i686
gcm.cpp:89:50: error: impossible constraint in \\asm\
: "=xm" (a[0]) : "xm"(b[0]), "xm"(c[0]));
pull/548/head
parent
5a577e71ac
commit
c3107d2519
|
|
@ -433,16 +433,19 @@ void GCM_ReverseHashBufferIfNeeded_PMULL(byte *hashBuffer)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE
|
#if CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE
|
||||||
# if defined (__SUNPRO_CC)
|
|
||||||
// SunCC 5.10-5.11 compiler crash. Move GCM_Xor16_SSE2 out-of-line, and place in
|
// SunCC 5.10-5.11 compiler crash. Move GCM_Xor16_SSE2 out-of-line, and place in
|
||||||
// a source file with a SSE architecture switch. Also see GH #226 and GH #284.
|
// a source file with a SSE architecture switch. Also see GH #226 and GH #284.
|
||||||
void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c)
|
void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c)
|
||||||
{
|
{
|
||||||
|
# if CRYPTOPP_SSE2_ASM_AVAILABLE && defined(__GNUC__)
|
||||||
|
asm ("movdqa %1, %%xmm0; pxor %2, %%xmm0; movdqa %%xmm0, %0;"
|
||||||
|
: "=xm" (a[0]) : "xm"(b[0]), "xm"(c[0]));
|
||||||
|
# else // CRYPTOPP_SSE2_INTRIN_AVAILABLE
|
||||||
_mm_store_si128(M128_CAST(a), _mm_xor_si128(
|
_mm_store_si128(M128_CAST(a), _mm_xor_si128(
|
||||||
_mm_load_si128(CONST_M128_CAST(b)),
|
_mm_load_si128(CONST_M128_CAST(b)),
|
||||||
_mm_load_si128(CONST_M128_CAST(c))));
|
_mm_load_si128(CONST_M128_CAST(c))));
|
||||||
}
|
|
||||||
# endif
|
# endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CRYPTOPP_CLMUL_AVAILABLE
|
#if CRYPTOPP_CLMUL_AVAILABLE
|
||||||
|
|
|
||||||
16
gcm.cpp
16
gcm.cpp
|
|
@ -79,22 +79,8 @@ static inline void Xor16(byte *a, const byte *b, const byte *c)
|
||||||
#if CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE
|
#if CRYPTOPP_SSE2_INTRIN_AVAILABLE || CRYPTOPP_SSE2_ASM_AVAILABLE
|
||||||
// SunCC 5.10-5.11 compiler crash. Move GCM_Xor16_SSE2 out-of-line, and place in
|
// SunCC 5.10-5.11 compiler crash. Move GCM_Xor16_SSE2 out-of-line, and place in
|
||||||
// a source file with a SSE architecture switch. Also see GH #226 and GH #284.
|
// a source file with a SSE architecture switch. Also see GH #226 and GH #284.
|
||||||
# if defined (__SUNPRO_CC)
|
|
||||||
extern void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c);
|
extern void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c);
|
||||||
# else
|
#endif // SSE2
|
||||||
static inline void GCM_Xor16_SSE2(byte *a, const byte *b, const byte *c)
|
|
||||||
{
|
|
||||||
# if CRYPTOPP_SSE2_ASM_AVAILABLE && defined(__GNUC__)
|
|
||||||
asm ("movdqa %1, %%xmm0; pxor %2, %%xmm0; movdqa %%xmm0, %0;"
|
|
||||||
: "=xm" (a[0]) : "xm"(b[0]), "xm"(c[0]));
|
|
||||||
# else // CRYPTOPP_SSE2_INTRIN_AVAILABLE
|
|
||||||
_mm_store_si128(M128_CAST(a), _mm_xor_si128(
|
|
||||||
_mm_load_si128(CONST_M128_CAST(b)),
|
|
||||||
_mm_load_si128(CONST_M128_CAST(c))));
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
# endif // SunCC
|
|
||||||
#endif // SSE2
|
|
||||||
|
|
||||||
#if CRYPTOPP_CLMUL_AVAILABLE
|
#if CRYPTOPP_CLMUL_AVAILABLE
|
||||||
extern void GCM_SetKeyWithoutResync_CLMUL(const byte *hashKey, byte *mulTable, unsigned int tableSize);
|
extern void GCM_SetKeyWithoutResync_CLMUL(const byte *hashKey, byte *mulTable, unsigned int tableSize);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue