首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件浮点和x87或sse禁用

软件浮点和x87或sse禁用
EN

Stack Overflow用户
提问于 2019-03-18 16:27:58
回答 1查看 1K关注 0票数 0

在gcc的指导下,我正在尝试启用this question中的软件浮点,但我遇到了一个障碍:

-msoft-浮动旗导致:

代码语言:javascript
复制
/usr/include/c++/4.8.2/bits/basic_string.h: In function ‘long double std::stold(const string&, std::size_t*)’:
/usr/include/c++/4.8.2/bits/basic_string.h:2857:47: error: x87 register return with x87 disabled
   stold(const string& __str, size_t* __idx = 0)
                                               ^

和-mno的原因:

代码语言:javascript
复制
/usr/include/c++/4.8.2/bits/basic_string.h: In function ‘float std::stof(const string&, std::size_t*)’:
/usr/include/c++/4.8.2/bits/basic_string.h:2849:46: error: SSE register return with SSE disabled
   stof(const string& __str, size_t* __idx = 0)
                                              ^

有一个couple of questions提到了这个错误,但是对于内核编程却没有帮助。

在basic_string中所发生的一切就是函数返回浮点数或双倍。为什么这会导致编译失败?

更重要的是,我能做些什么呢?

背景

我发现了C++应用程序在两个不同平台上的行为差异:

  • 英特尔(R) Xeon(R) CPU E5504
  • Intel(R) Core(TM) i5-3470 CPU

在这两台机器上本地编译的代码在另一台机器上运行,但是对于一种测试,其行为取决于在哪台机器上运行代码。

Clarification --在机器A上编译的可执行文件,在复制到在machnie B上运行时,就像在机器B上编译的可执行文件一样,而visa则相反。

它可能是一个未初始化的变量或许多其他东西,但我怀疑原因可能是浮点的不可移植性的使用。也许一台机器对浮点程序集的解释不同于另一台机器?我想验证我的假设。我想,如果我可以强制程序使用(理想的严格的IEE 754)软件浮点,它可能会确认或排除这一点。这不是我的代码,我也不想完全重写它来测试它。不过,重新编译是可以的。

关于这一点,我已经提出了一个单独的问题,how-to-detect-differences-in-floating-point-behaviour-across-platforms从另一方处理这个问题。

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 15:25:46

“为什么这会导致编译失败?”

因为相关的ABI (x87/x64)被定义为在硬件浮动寄存器中返回float值。显然,您需要硬件浮点才能拥有该寄存器。

“更重要的是,我能做些什么?”

不是很多。与x87/x64不同,ARM确实有一个软FP ABI,所以-msoft-float也在那里工作,这也是GCC仍然拥有软FP的主要原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55225910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档