Hi Wei, I defined CRYPTOPP_DISABLE_SSE2 1 in config.h, and I am now able to step into CPU.cpp. CPU.cpp performs as expected.
g_hasSSE2 = TrySSE2(); // False Jeff On 6/11/07, Jeffrey Walton <[EMAIL PROTECTED]> wrote: > 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. -~----------~----~----~----~------~----~------~--~---
