It looks like the CPU feature detection code isn't working correctly, and 
Crypto++ thinks it's running on a machine with both MMX and SSE2 
instructions. Can you set a breakpoint at the top of DetectX86Features() in 
cpu.cpp and step through that code on your Pentium II machine?

----- Original Message ----- 
From: "Jeffrey Walton" <[EMAIL PROTECTED]>
To: "Wei Dai" <[EMAIL PROTECTED]>
Cc: "Crypto++" <[EMAIL PROTECTED]>
Sent: Monday, June 11, 2007 6:38 PM
Subject: Re: CryptTest: 0xC000001D: Illegal Instruction (PII 233 Processor)


>
> 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