【发布时间】:2019-10-21 06:52:33
【问题描述】:
有谁知道 Linux 是否支持在 64 位模式下使用 x87-FPU,即如果指令没有被捕获并且寄存器是否保存在上下文切换中。我不想使用它,而且我知道 SSE 是 x64 模式的标准;只是为了好奇。
【问题讨论】:
有谁知道 Linux 是否支持在 64 位模式下使用 x87-FPU,即如果指令没有被捕获并且寄存器是否保存在上下文切换中。我不想使用它,而且我知道 SSE 是 x64 模式的标准;只是为了好奇。
【问题讨论】:
是的。支持。 D 语言使用该功能。当您使用 float 或 double 类型时,它会编译 SSE 代码,当您使用 real 时,它会告诉编译器使用实现最精确的类型。在 x86 的情况下,它是具有 80 位类型的 x87。
real square(real num) {
return num * num;
}
float square(float num) {
return num * num;
}
编译成
real example.square(real):
push rbp
mov rbp, rsp
fld tbyte ptr [rbp + 16]
fstp tbyte ptr [rbp - 16]
fld tbyte ptr [rbp - 16]
fmul st(0), st
pop rbp
ret
float example.square(float):
push rbp
mov rbp, rsp
movss dword ptr [rbp - 4], xmm0
movss xmm0, dword ptr [rbp - 4]
mulss xmm0, dword ptr [rbp - 4]
pop rbp
ret
【讨论】: