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