"David Mathog" <mat...@caltech.edu> writes: > Following your suggestion mo-sse2 was tried, which generated an error > message well beyond my comprehension: > > gcc -std=gnu99 -g -pg -pthread -O4 -DSOFT_SSE2 -msse -mno-sse2 > -DHAVE_CONFIG_H -I../../easel -I../../easel -I. -I.. -I. -I../../src -o > msvfilter.o -c msvfilter.c > msvfilter.c: In function 'p7_MSVFilter': > msvfilter.c:208: error: unable to find a register to spill in class > 'GENERAL_REGS' > msvfilter.c:208: error: this is the insn: > (insn:HI 3569 3568 3570 302 ../../easel/emmintrin.h:2334 (set > (strict_low_part (subreg:HI (reg:TI 1514) 0)) > (mem:HI (plus:SI (reg/f:SI 20 frame) > (const_int -30 [0xffffffe2])) [14 S2 A16])) 40 > {*movstricthi_1} (insn_list:REG_DEP_TRUE 3568 (nil)) > (nil)) > msvfilter.c:208: confused by earlier errors, bailing out > make: *** [msvfilter.o] Error 1
This means that gcc was unable to store a __m128i value in the general purpose registers. It did not want to use the SSE2 registers because you ruled out -msse2, which I assume is correct behaviour for what you are trying to do. It does seem likely that SSE2 code will stress out the register allocator if it can't use the SSE2 registers. That said, I don't know offhand whether this is a bug or whether the scenario is simply impossible to implement. Ian