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