gpt4 book ai didi

c++ - 如果我在 x86_64 上使用 gcc 4.9,__float128 到底是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:45 25 4
gpt4 key购买 nike

我写了一个简单的程序,以为我可以从反汇编中找出:

int main() {
double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c);
__float128 foo = a;
foo += b; foo += c;
printf("%f\n", (double)foo);
}

main 将 (-O3) 编译为以下内容:

  400630:       48 83 ec 38             sub    $0x38,%rsp
400634: bf 34 08 40 00 mov $0x400834,%edi
400639: 31 c0 xor %eax,%eax
40063b: 48 8d 4c 24 28 lea 0x28(%rsp),%rcx
400640: 48 8d 54 24 20 lea 0x20(%rsp),%rdx
400645: 48 8d 74 24 18 lea 0x18(%rsp),%rsi
40064a: e8 c1 ff ff ff callq 400610 <scanf@plt>
40064f: f2 0f 10 44 24 18 movsd 0x18(%rsp),%xmm0
400655: e8 a6 ff ff ff callq 400600 <__extenddftf2@plt>
40065a: 0f 29 04 24 movaps %xmm0,(%rsp)
40065e: f2 0f 10 44 24 20 movsd 0x20(%rsp),%xmm0
400664: e8 97 ff ff ff callq 400600 <__extenddftf2@plt>
400669: 66 0f 6f 0c 24 movdqa (%rsp),%xmm1
40066e: e8 5d ff ff ff callq 4005d0 <__addtf3@plt>
400673: 0f 29 04 24 movaps %xmm0,(%rsp)
400677: f2 0f 10 44 24 28 movsd 0x28(%rsp),%xmm0
40067d: e8 7e ff ff ff callq 400600 <__extenddftf2@plt>
400682: 66 0f 6f 0c 24 movdqa (%rsp),%xmm1
400687: e8 44 ff ff ff callq 4005d0 <__addtf3@plt>
40068c: e8 8f ff ff ff callq 400620 <__trunctfdf2@plt>
400691: bf 3a 08 40 00 mov $0x40083a,%edi
400696: b8 01 00 00 00 mov $0x1,%eax
40069b: e8 20 ff ff ff callq 4005c0 <printf@plt>
4006a0: 31 c0 xor %eax,%eax
4006a2: 48 83 c4 38 add $0x38,%rsp
4006a6: c3 retq

当我通过在 gdb 下设置断点并在 gdb 下运行程序来查看 __addtf3 的反汇编时,我看到了一大堆算术和条件语句。我没有费心去阅读它,但它确实看起来不像是 double double 添加的代码。

这些是软件四精度 float 吗?如果是,是什么格式?

最佳答案

GCC's __float128对应于其内部“TFmode”格式,该格式因目标和 GCC 使用的 ABI 而异。

documentation说:

  • TF模式
    “Tetra Floating”模式代表一个 16 字节的 float ,所有 128 位都是有意义的。一种常见的用途是 IEEE 四精度格式。

x86_64 上的 TFmode 支持由 this patch 添加和 GCC 4.3 release notes确认 x86_64 是 IEEE 四元格式:

  • 可通过 x86_64 目标上的 soft-fp 库支持 __float128 (TFmode) IEEE 四元类型和相应的 TCmode IEEE 复杂四元类型。

关于c++ - 如果我在 x86_64 上使用 gcc 4.9,__float128 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com