是否有人知道Linux是否支持在64位模式下使用x87FPU,也就是说,如果指令没有被捕获,并且寄存器保存在上下文开关上。我不想使用它,我知道SSE是x64模式中的标准;这只是出于好奇。
最佳答案
对。它是受支持的。d语言使用这个特性。当您使用float
或double
类型时,它编译sse代码,当您使用real
时,它告诉编译器使用最精确的实现类型。对于x86,它是80位类型的x87。
https://godbolt.org/z/50kr-H
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
关于linux - 在Linux下以x64/AMD64模式使用x87-FPU,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58481130/