Hi Wei, The Exception is being raised before execution of CPU.cpp - it looks like in static initalizers.
Attached is a screen capture of the call stack. It is still in CRT start up code. Sorry about the PNG - the image explains it best. Jeff On 6/11/07, Wei Dai <[EMAIL PROTECTED]> wrote: > 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 > > (pshufd 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? > >> > >> [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. -~----------~----~----~----~------~----~------~--~---
<<inline: CPUIDIssue.png>>
