Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7956 Discussions

PIII crashes with an invalid instruction

Michael_Ljunggren
344 Views
Hi,
I am writing this on the forum instead of calling Support, as I always appreciate anyone revealing their problems & solutions in public. Anyways...

A customer recently reported a strange error for a product of ours. The program was compiled using Intel C++ 9.1 034 with the switches /QaxTPBNWK. As it was compiled with /Qax... it should run on just about any processor, but the program crashes with an invalid instruction (an SSE2 instruction) on a PIII.

Is build 034 known to have this problem? Is upgrading the way to go? Have I done something wrong?

Thanks for reading. Thanks for a great compiler!

/Michael
0 Kudos
3 Replies
TimP
Honored Contributor III
344 Views
My guess is you have combined too many options for anyone to say whether that compiler version would have this specific problem, unless you care to submit a working example. Usually, the overhead for building so many code paths and choosing among them would outweigh slight performance advantages. For example, /QxKW would run on any CPU since P-III, and should give good performance for any code which does not actually need SSE3. The older options aKB haven't been getting as much attention as the newer ones. B has an advantage only for scalar floating point on Banias and Dothan.
0 Kudos
Dale_S_Intel
Employee
344 Views
Appreciate the info, but it doesn't ring a bell. If you really want a fix for it, I'd recommend that you file a reort at premier.intel.com and provide a test case and we can look into it.

Thanks!

Dale
0 Kudos
levicki
Valued Contributor I
344 Views

Michael, do you perhaps have any hand-written inline assembler code in that project?

I am asking because I have just noticed that for functions containing inline assembler, Intel compiler creates an auto-dispatch prolog targeting different CPUs with the same code, and it obviously doesn't check whether that inline assembler code block can actually be executed on any of those targets.

0 Kudos
Reply