Description of problem: gcc and sse2 does not correctly compile with optimization flags of -O1, -O2, -O3, -O or -Os Version-Release number of selected component (if applicable): 4.1.1-51.fc6 How reproducible: Only tested on a real simple sse2 enabled c source code file, but always. Steps to Reproduce: 1. Write small c program with sse2 (emmintrin.h) in this case 2. Compile program with optimization flags of -O1, -O2, -O3, -Os, -O 3. The compiled program will not contain sse2 instructions 4. if also compiled with -S and any of the mentioned flags the generated assembly will not contain sse2 instructions 5. if compiled with -O0 or no flag compiled program contains sse2 instructions Actual results: Program when compiled with certain -O flags will not actually produce an sse2 enabled program Expected results: program should correctly compile with -O, -O1, -O2, -O3, and -Os even if Additional info: Processor: Intel Pentium M (with sse2) attached will be a sse2 program successfull comiled with gcc -O0 -march=pentium-m -msse2 test.c -o test
Created attachment 148465 [details] a very very small c program with sse2 instructions
They are optimized away as useless, as written in the testcase they don't have any visible side effect, the results are stored into an automatic variable. If you don't want them to be optimized away, you need to either store at least the final result to a non-automatic variable, return from function, pass to other function (e.g. print them).
Oh, I didn't realize the compiler would automatically disregard the sse2 if they are useless instructions, I guess that's a good thing then.