gcc 3.4 で -mno-sse が効かない
何故?
ちなみに cvtsi2sd, mulsd, cvttsd2si などが SSE2 の命令.
テストプログラム
$ cat test_fp.c int test_fp(int n) { return (int)(n * 0.1); }
gcc 4.1.2 (SSE 有効 (-msse))
$ gcc-4.1.2 -O3 -S -msse test_fp.c $ cat test_fp.s (中略) test_fp: .LFB2: cvtsi2sd %edi, %xmm0 mulsd .LC0(%rip), %xmm0 cvttsd2si %xmm0, %eax ret (後略)
gcc 4.1.2 (SSE 無効 (-mno-sse))
問題なく SSE が無効化される.
$ gcc-4.1.2 -O3 -S -mno-sse test_fp.c $ cat test_fp.s (中略) test_fp: .LFB2: movl %edi, -128(%rsp) fnstcw -2(%rsp) movzwl -2(%rsp), %eax fildl -128(%rsp) fmull .LC0(%rip) orb $12, %ah movw %ax, -4(%rsp) fldcw -4(%rsp) fistpl -8(%rsp) fldcw -2(%rsp) movl -8(%rsp), %eax ret (後略)
gcc 3.4.6 (SSE 有効 (-msse))
$ gcc-3.4.6 -O3 -S -msse test_fp.c $ cat test_fp.s (中略) test_fp: .LFB2: cvtsi2sd %edi, %xmm0 mulsd .LC0(%rip), %xmm0 cvttsd2si %xmm0, %eax ret (後略)