【问题标题】:Using the x87-FPU in x64/AMD64-mode under Linux在 Linux 下以 x64/AMD64 模式使用 x87-FPU
【发布时间】:2019-10-21 06:52:33
【问题描述】:

有谁知道 Linux 是否支持在 64 位模式下使用 x87-FPU,即如果指令没有被捕获并且寄存器是否保存在上下文切换中。我不想使用它,而且我知道 SSE 是 x64 模式的标准;只是为了好奇。

【问题讨论】:

  • 你试过了吗?你做了什么研究?您是否使用gcc 编译了一个程序以发现它使用 x87 指令?还是其他人?您认为“linux”在不支持 SSE 但支持 x87​​ 的处理器上使用了哪些指令?根据对this 的简短阅读,您可以将-mfpmath=387gcc 一起使用。有一些信息herehere

标签: linux x87


【解决方案1】:

是的。支持。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多