Hi Wei,

Cryptest.exe triggers in Debug (I did not run Release).

The offending code is in Salsa.cpp, line 76:

static const __m128i s_maskLo32 =
_mm_shuffle_epi32(_mm_cvtsi32_si128(-1), _MM_SHUFFLE(1, 0, 1, 0));

This is part of a larger #define:
#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
static const __m128i s_maskLo32 =
_mm_shuffle_epi32(_mm_cvtsi32_si128(-1), _MM_SHUFFLE(1, 0, 1, 0));
static const __m128i s_maskHi32 = _mm_slli_epi64(s_maskLo32, 32);
#endif

Disassembly follows, with the offending instruction at 00933C76
(pushfd xmm0,xmm0,44h)

Jeff

#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
static const __m128i s_maskLo32 =
_mm_shuffle_epi32(_mm_cvtsi32_si128(-1), _MM_SHUFFLE(1, 0, 1, 0));
00933C40  push        ebx
00933C41  mov         ebx,esp
00933C43  sub         esp,8
00933C46  and         esp,0FFFFFFF0h
00933C49  add         esp,4
00933C4C  push        ebp
00933C4D  mov         ebp,dword ptr [ebx+4]
00933C50  mov         dword ptr [esp+4],ebp
00933C54  mov         ebp,esp
00933C56  sub         esp,78h
00933C59  mov         eax,dword ptr [___security_cookie (0A59CF4h)]
00933C5E  xor         eax,ebp
00933C60  mov         dword ptr [ebp-4],eax
00933C63  push        esi
00933C64  push        edi
00933C65  or          eax,0FFFFFFFFh
00933C68  movd        xmm0,eax
00933C6C  movdqa      xmmword ptr [ebp-70h],xmm0
00933C71  movdqa      xmm0,xmmword ptr [ebp-70h]
00933C76  pshufd      xmm0,xmm0,44h
00933C7B  movdqa      xmmword ptr [ebp-60h],xmm0
00933C80  movdqa      xmm0,xmmword ptr [ebp-60h]
00933C85  movdqa      xmmword ptr [s_maskLo32 (0A5D8C0h)],xmm0
00933C8D  pop         edi
00933C8E  pop         esi
00933C8F  mov         ecx,dword ptr [ebp-4]
00933C92  xor         ecx,ebp
00933C94  call        @ILT+67130(@[EMAIL PROTECTED]) (5C063Fh)
00933C99  mov         esp,ebp
00933C9B  pop         ebp
00933C9C  mov         esp,ebx
00933C9E  pop         ebx
00933C9F  ret


On 6/11/07, Wei Dai <[EMAIL PROTECTED]> wrote:
> Crypto++ is supposed to detect the necessary instruction set at run time.
> For example, the assembly version of Whirlpool uses MMX instructions, and
> there is an "if (HasMMX())" at line 394 of whrlpool.cpp that selects the
> assembly version if MMX is available. Apparently the assembly code must be
> using some instruction that's not available on the PII, even though it has
> MMX. Can you look at the disassembly in the debugger and tell me which
> instruction is triggering the error?
>
> ----- Original Message -----
> From: "Jeffrey Walton" <[EMAIL PROTECTED]>
> To: "Crypto++" <[EMAIL PROTECTED]>
> Sent: Monday, June 11, 2007 5:41 PM
> Subject: CryptTest: 0xC000001D: Illegal Instruction (PII 233 Processor)
> >
> > Hi All,
> >
> > Is there a #define to instruct Crypto++ to generate code for a PII
> > processor (and above)? Nothing jumps out at me in config.h.
> >
> > [ SNIP ]

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [EMAIL PROTECTED]
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---

Reply via email to