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
#define CRYPTOPP_NATIVE_DWORD_AVAILABLE
#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 word64 word;
typedef __uint128_t dword;

View File

@ -12,14 +12,14 @@ NAMESPACE_BEGIN(CryptoPP)
#include <intrin.h>
#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 m62 = W64LIT(0x3fffffffffffffff); /* 62-bit mask */
static const word64 m63 = W64LIT(0x7fffffffffffffff); /* 63-bit mask */
static const word64 m64 = W64LIT(0xffffffffffffffff); /* 64-bit 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 */
#endif
@ -363,7 +363,7 @@ VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64,
}
#endif
#if CRYPTOPP_BOOL_VMAC_WORD128
#if VMAC_BOOL_WORD128
#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 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##1 += ph + (a##0 < pl);}
#else
#define VMAC_BOOL_32BIT 1
#define DeclareNH(a) word64 a##0=0, a##1=0, a##2=0
#define MUL64(rh,rl,i1,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);}
#endif
#endif
#ifndef VMAC_BOOL_32BIT
#define VMAC_BOOL_32BIT 0
#endif
#ifndef ADD128
#define ADD128(rh,rl,ih,il) \
{ word64 _il = (il); \
@ -443,8 +447,8 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
bool isFirstBlock = true;
size_t i;
#ifndef CRYPTOPP_SLOW_WORD64
#if CRYPTOPP_BOOL_VMAC_WORD128
#if !VMAC_BOOL_32BIT
#if VMAC_BOOL_WORD128
word128 a1, a2;
#else
word64 ah1, al1, ah2, al2;
@ -485,7 +489,7 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
blocksRemainingInWord64 -= innerLoopEnd;
data += innerLoopEnd;
#ifdef CRYPTOPP_SLOW_WORD64
#if VMAC_BOOL_32BIT
word32 nh0[2], nh1[2];
word64 nh2[2];
@ -575,14 +579,14 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
#undef k2
#undef k3
#undef kHi
#else // #ifdef CRYPTOPP_SLOW_WORD64
#else // #if VMAC_BOOL_32BIT
if (isFirstBlock)
{
isFirstBlock = false;
if (m_isFirstBlock)
{
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)
first_poly_step(a1, kh1, kl1, nhA);
@ -602,14 +606,14 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
}
else
{
#if CRYPTOPP_BOOL_VMAC_WORD128
#if VMAC_BOOL_WORD128
a1 = (word128((polyS+0*4)[0]) << 64) | (polyS+0*4)[1];
#else
ah1=(polyS+0*4)[0]; al1=(polyS+0*4)[1];
#endif
if (T_128BitTag)
{
#if CRYPTOPP_BOOL_VMAC_WORD128
#if VMAC_BOOL_WORD128
a2 = (word128((polyS+1*4)[0]) << 64) | (polyS+1*4)[1];
#else
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) \
{ word128 t1, t2, t3, t4;\
Multiply128(t2, a>>64, kl);\
@ -664,16 +668,16 @@ void VMAC_Base::VHASH_Update_Template(const word64 *data, size_t blocksRemaining
if (T_128BitTag)
poly_step(ah2, al2, kh2, kl2, nhB1, nhB0);
#endif
#endif // #ifdef CRYPTOPP_SLOW_WORD64
#endif // #if VMAC_BOOL_32BIT
} while (blocksRemainingInWord64);
#if CRYPTOPP_BOOL_VMAC_WORD128
#if VMAC_BOOL_WORD128
(polyS+0*4)[0]=word64(a1>>64); (polyS+0*4)[1]=word64(a1);
if (T_128BitTag)
{
(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;
if (T_128BitTag)
{