在Free-Pascal中,您可以通过条件定义来确定是否使用SSE2 / 3/64指令编译代码 https://www.freepascal.org/docs-html/current/prog/prog.html#QQ2-333-379, 表G.3:可能的FPU定义何时使用FPC进行编译
FPUSSE2 SSE 2 instructions on Intel I386 and higher.
FPUSSE3 SSE 3 instructions on Intel I386 and higher, AMD64.
FPUSSE64 SSE64 FPU on Intel I386 and higher, AMD64.
我知道Delphi 64位编译器在Win RTL中使用SSE,但我的问题是:
如果使用SSE指令编译单元,Delphi中是否存在检查编译时的已知方法,特别是如果使用硬件fma指令计算
a*b + c
?
答案 0 :(得分:3)
如果一个单元是用SSE指令编译的,那么Delphi中有一个已知的方法可以在编译时进行检查吗?
在Intel平台上,如果定义了CPUX64
条件,则编译器使用SSE指令生成浮点代码。否则,将生成x87指令。
没有Delphi编译器使用FMA指令生成代码。自从在XE2中首次发布以来,dcc64使用的浮点代码生成并没有实质性改变。