linux – gcc 4.x不支持x87 FPU数学?

linux – gcc 4.x不支持x87 FPU数学?,第1张

概述我一直在尝试使用–with-fpmath = 387从源代码编译 gcc 4.x但我收到此错误:“无效–with-fpmath = 387”.我查看了配置并发现它不支持此选项(即使文档仍然提到它作为可能的选项): case ${with_fpmath} in avx) tm_file="${tm_file} i386/avxmath.h" ;; sse) tm_fi 我一直在尝试使用–with-fpmath = 387从源代码编译 gcc 4.x但我收到此错误:“无效–with-fpmath = 387”.我查看了配置并发现它不支持此选项(即使文档仍然提到它作为可能的选项):
case ${with_fpmath} in  avx)    tm_file="${tm_file} i386/avxmath.h"    ;;  sse)    tm_file="${tm_file} i386/ssemath.h"    ;;  *)    echo "InvalID --with-fpmath=$with_fpmath" 1>&2    exit 1

基本上,我开始这一切都是因为我需要为旧的目标平台提供可执行文件(实际上,它是一个旧的Celeron,但没有任何SSE2指令显然由libstdc由DEFAulT使用).可执行文件在第一条指令(movq XMM0,…)崩溃,该指令来自libstdc中的复制例程,带有“非法指令”消息.
有什么方法可以解决这个问题吗?我需要在一个相当新的g上能够移植我现有的代码库.

我想知道是否可以从旧版本提供这些头文件/源代码以支持常规x87指令,以便不引用SSE指令?

更新:请注意我在谈论编译的libstdc在目标代码中有SSE2指令,所以问题不在于gcc命令行参数.无论我在编译代码时向gcc提供什么,它都将与已经内置SSE2指令的libstdc链接.

真正的答案是在编译GCC时不使用任何–with-fpmath开关.我对配置脚本switch语句感到困惑,认为它只支持sse或avx,而实际上是默认值(此开关中未提及的是“387”).因此,请确保在运行configure时不使用–with-fpmath.我没有它重新编译GCC,它现在工作正常.

谢谢.

解决方法 告诉gcc为特定目标生成代码的参数是-march = cpu,其中cpu是您想要的特定cpu.对于旧的赛扬,你可能想要-march = pentium2或-march = pentium3

要分别控制fp codegen,新版本的gcc使用-mfpmath = – 在您的情况下,您需要-mfpmath = 387.

所有这些以及许多其他内容都包含在gcc documentation中

编辑

为了使用这些标志来构建您稍后将链接到程序的库(例如libstdc),您需要配置库的构建以使用适当的标志. libstdc是作为g build构建的一部分构建的,因此您需要进行自定义构建 – 您可以使用configure CXXFLAGS = -mfpmath = 387来设置构建内容时要使用的额外标志.

总结

以上是内存溢出为你收集整理的linux – gcc 4.x不支持x87 FPU数学?全部内容,希望文章能够帮你解决linux – gcc 4.x不支持x87 FPU数学?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存