[b]原始短消息:[/b] [url=
http://bbs.chinaunix.net/pm.php?action=view&folder=inbox&pmid=757158]你好![/url]
[quote]我在你的博客中有留言!!
想問你個問題!
期待你的回復!![/quote]
很抱歉,才看到你的短信
FPU,SEE和MMX是不是有重疊的部分呢?
你是說寄存器重疊嗎?fpu和mmx使用相同的寄存器,名字不同,使用任意一個之前最好保存相關上下文寄存器。
sse和sse2只有比較新的cpu(pII以上)才支持,為了保證兼容性,默認編譯器不會使用它。
gcc幫助中有:
i386 and x86-64 Options -mtune=cpu-type -march=cpu-type -mfp-
math=unit -masm=dialect -mno-fancy-math-387 -mno-fp-ret-in-387
-msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-dou-
ble -mpreferred-stack-boundary=num -mmmx -msse -msse2 -msse3
-m3dnow -mthreads -mno-align-stringops -minline-all-stringops
-mpush-args -maccumulate-outgoing-args -m128bit-long-double
-m96bit-long-double -mregparm=num -momit-leaf-frame-pointer
-mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-model -m32
-m64
就像沒有fpu的時候使用libc中軟浮點一樣,默認gcc對一些復雜算法使用fpu指令和軟件算法來解決
可以比較一下:
gcc -c double.c -o double -msse2
objdump -d double
gcc -c double.c -o double -m3dnow
objdump -d double
對優化的一些猜測:針對各個平臺編譯一套dll或.so(不同的編譯優化選項),然后啟動時判斷平臺,加載不同的dll
具體的我也沒深入研究過,都是一知半解,希望對你有幫助