[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
具体的我也没深入研究过,都是一知半解,希望对你有帮助