Ian Lance Taylor wrote:

> No.  If I understand what you are doing, I don't think you want to use
> -msse2 at all.  In fact I think you want -mno-sse2.

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

line 208 in msvfilter.c is the closing "}" on the p7_MSVFilter function.

line 2334 in emmintrin.h is the return statement in the snippet below

static __inline __m128i __attribute__((__always_inline__))
 _mm_shufflelo_epi16(__m128i __A, int __B){
 __v8hi __tmp  = { EMM_UINT2(__A)[__B    & 3],
                   EMM_UINT2(__A)[__B>>2 & 3],
                   EMM_UINT2(__A)[__B>>4 & 3],
                   EMM_UINT2(__A)[__B>>6 & 3],
                   EMM_UINT2(__A)[4],
                   EMM_UINT2(__A)[5],
                   EMM_UINT2(__A)[6],
                   EMM_UINT2(__A)[7]};
  return (__m128i) __tmp;
}

where HMM_UINT2 is this:

#define EMM_UINT2(a)   ((unsigned short *)&(a))

If -mno-sse2 is changed to -msse2 that compile completes without errors
or warnings.

gcc --version is: gcc (GCC) 4.2.3 (4.2.3-6mnb1)

What does that compiler error mean?

Thanks,

David Mathog
mat...@caltech.edu
Manager, Sequence Analysis Facility, Biology Division, Caltech

Reply via email to