是否有人知道Linux是否支持在64位模式下使用x87FPU,也就是说,如果指令没有被捕获,并且寄存器保存在上下文开关上。我不想使用它,我知道SSE是x64模式中的标准;这只是出于好奇。

最佳答案

对。它是受支持的。d语言使用这个特性。当您使用floatdouble类型时,它编译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/

10-11 19:08