fix compile with ICC for ia64

pull/2/head
weidai 2007-05-05 04:12:36 +00:00
parent 03e2f7c3ae
commit 87356fd44e
2 changed files with 19 additions and 15 deletions

View File

@ -131,7 +131,7 @@ typedef unsigned int word32;
#else #else
#define CRYPTOPP_NATIVE_DWORD_AVAILABLE #define CRYPTOPP_NATIVE_DWORD_AVAILABLE
#if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__) #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__)
#if defined(__GNUC__) #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
typedef word32 hword; typedef word32 hword;
typedef word64 word; typedef word64 word;
typedef __uint128_t dword; typedef __uint128_t dword;

View File

@ -12,14 +12,14 @@ NAMESPACE_BEGIN(CryptoPP)
#include <intrin.h> #include <intrin.h>
#endif #endif
#define CRYPTOPP_BOOL_VMAC_WORD128 (defined(CRYPTOPP_WORD128_AVAILABLE) && !defined(CRYPTOPP_X64_ASM_AVAILABLE)) #define VMAC_BOOL_WORD128 (defined(CRYPTOPP_WORD128_AVAILABLE) && !defined(CRYPTOPP_X64_ASM_AVAILABLE))
static const word64 p64 = W64LIT(0xfffffffffffffeff); /* 2^64 - 257 prime */ static const word64 p64 = W64LIT(0xfffffffffffffeff); /* 2^64 - 257 prime */
static const word64 m62 = W64LIT(0x3fffffffffffffff); /* 62-bit mask */ static const word64 m62 = W64LIT(0x3fffffffffffffff); /* 62-bit mask */
static const word64 m63 = W64LIT(0x7fffffffffffffff); /* 63-bit mask */ static const word64 m63 = W64LIT(0x7fffffffffffffff); /* 63-bit mask */
static const word64 m64 = W64LIT(0xffffffffffffffff); /* 64-bit mask */ static const word64 m64 = W64LIT(0xffffffffffffffff); /* 64-bit mask */
static const word64 mpoly = W64LIT(0x1fffffff1fffffff); /* Poly key mask */ static const word64 mpoly = W64LIT(0x1fffffff1fffffff); /* Poly key mask */
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
static const word128 m126 = (word128(m62)<<64)|m64; /* 126-bit mask */ static const word128 m126 = (word128(m62)<<64)|m64; /* 126-bit mask */
#endif #endif
@ -363,7 +363,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
} }
#endif #endif
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
#define DeclareNH(a) word128 a=0 #define DeclareNH(a) word128 a=0
#define MUL64(rh,rl,i1,i2) {word128 p = word128(i1)*(i2); rh = word64(p>>64); rl = word64(p);} #define MUL64(rh,rl,i1,i2) {word128 p = word128(i1)*(i2); rh = word64(p>>64); rl = word64(p);}
#define AccumulateNH(a, b, c) a += word128(b)*(c) #define AccumulateNH(a, b, c) a += word128(b)*(c)
@ -388,6 +388,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
a##0 += pl;\ a##0 += pl;\
a##1 += ph + (a##0 < pl);} a##1 += ph + (a##0 < pl);}
#else #else
#define VMAC_BOOL_32BIT 1
#define DeclareNH(a) word64 a##0=0, a##1=0, a##2=0 #define DeclareNH(a) word64 a##0=0, a##1=0, a##2=0
#define MUL64(rh,rl,i1,i2) \ #define MUL64(rh,rl,i1,i2) \
{ word64 _i1 = (i1), _i2 = (i2); \ { word64 _i1 = (i1), _i2 = (i2); \
@ -412,6 +413,9 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
a##2 += word32(p>>32);} a##2 += word32(p>>32);}
#endif #endif
#endif #endif
#ifndef VMAC_BOOL_32BIT
#define VMAC_BOOL_32BIT 0
#endif
#ifndef ADD128 #ifndef ADD128
#define ADD128(rh,rl,ih,il) \ #define ADD128(rh,rl,ih,il) \
{ word64 _il = (il); \ { word64 _il = (il); \
@ -443,8 +447,8 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
bool isFirstBlock = true; bool isFirstBlock = true;
size_t i; size_t i;
#ifndef CRYPTOPP_SLOW_WORD64 #if !VMAC_BOOL_32BIT
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
word128 a1, a2; word128 a1, a2;
#else #else
word64 ah1, al1, ah2, al2; word64 ah1, al1, ah2, al2;
@ -485,7 +489,7 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
blocksRemainingInWord64 -= innerLoopEnd; blocksRemainingInWord64 -= innerLoopEnd;
data += innerLoopEnd; data += innerLoopEnd;
#ifdef CRYPTOPP_SLOW_WORD64 #if VMAC_BOOL_32BIT
word32 nh0[2], nh1[2]; word32 nh0[2], nh1[2];
word64 nh2[2]; word64 nh2[2];
@ -575,14 +579,14 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
#undef k2 #undef k2
#undef k3 #undef k3
#undef kHi #undef kHi
#else // #ifdef CRYPTOPP_SLOW_WORD64 #else // #if VMAC_BOOL_32BIT
if (isFirstBlock) if (isFirstBlock)
{ {
isFirstBlock = false; isFirstBlock = false;
if (m_isFirstBlock) if (m_isFirstBlock)
{ {
m_isFirstBlock = false; m_isFirstBlock = false;
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
#define first_poly_step(a, kh, kl, m) a = (m & m126) + ((word128(kh) << 64) | kl) #define first_poly_step(a, kh, kl, m) a = (m & m126) + ((word128(kh) << 64) | kl)
first_poly_step(a1, kh1, kl1, nhA); first_poly_step(a1, kh1, kl1, nhA);
@ -602,14 +606,14 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
} }
else else
{ {
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
a1 = (word128((polyS+0*4)[0]) << 64) | (polyS+0*4)[1]; a1 = (word128((polyS+0*4)[0]) << 64) | (polyS+0*4)[1];
#else #else
ah1=(polyS+0*4)[0]; al1=(polyS+0*4)[1]; ah1=(polyS+0*4)[0]; al1=(polyS+0*4)[1];
#endif #endif
if (T_128BitTag) if (T_128BitTag)
{ {
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
a2 = (word128((polyS+1*4)[0]) << 64) | (polyS+1*4)[1]; a2 = (word128((polyS+1*4)[0]) << 64) | (polyS+1*4)[1];
#else #else
ah2=(polyS+1*4)[0]; al2=(polyS+1*4)[1]; ah2=(polyS+1*4)[0]; al2=(polyS+1*4)[1];
@ -618,7 +622,7 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
} }
} }
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
#define poly_step(a, kh, kl, m) \ #define poly_step(a, kh, kl, m) \
{ word128 t1, t2, t3, t4;\ { word128 t1, t2, t3, t4;\
Multiply128(t2, a>>64, kl);\ Multiply128(t2, a>>64, kl);\
@ -664,16 +668,16 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
if (T_128BitTag) if (T_128BitTag)
poly_step(ah2, al2, kh2, kl2, nhB1, nhB0); poly_step(ah2, al2, kh2, kl2, nhB1, nhB0);
#endif #endif
#endif // #ifdef CRYPTOPP_SLOW_WORD64 #endif // #if VMAC_BOOL_32BIT
} while (blocksRemainingInWord64); } while (blocksRemainingInWord64);
#if CRYPTOPP_BOOL_VMAC_WORD128 #if VMAC_BOOL_WORD128
(polyS+0*4)[0]=word64(a1>>64); (polyS+0*4)[1]=word64(a1); (polyS+0*4)[0]=word64(a1>>64); (polyS+0*4)[1]=word64(a1);
if (T_128BitTag) if (T_128BitTag)
{ {
(polyS+1*4)[0]=word64(a2>>64); (polyS+1*4)[1]=word64(a2); (polyS+1*4)[0]=word64(a2>>64); (polyS+1*4)[1]=word64(a2);
} }
#elif !defined(CRYPTOPP_SLOW_WORD64) #elif !VMAC_BOOL_32BIT
(polyS+0*4)[0]=ah1; (polyS+0*4)[1]=al1; (polyS+0*4)[0]=ah1; (polyS+0*4)[1]=al1;
if (T_128BitTag) if (T_128BitTag)
{ {