首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerPC GCC浮点指令

PowerPC GCC浮点指令
EN

Stack Overflow用户
提问于 2018-11-20 22:06:19
回答 1查看 706关注 0票数 1

目前,我正在开发一个MPC5777板,带有e200z7内核。大部分事情都进行得很顺利,但我被一个问题困住了,这个问题已经让我很烦了。使用嵌入式硬件支持,我尝试在代码的部分上使用浮点操作。我的工具链是GCC 6.3 (Powerpc),为此我使用了以下旗子:

代码语言:javascript
复制
ASFLAGS_BASE = -g -a32 -mbooke -me500 --fatal-warnings

ARCH_FLAGS   = -mpowerpc-gpopt -mfprnd -misel -m32 -mhard-float -mabi=spe -mmfpgpr -mfloat-gprs=single

请注意-mfloat-gprs=single标志。这就是造成问题的原因。

当我使用-mfloat-gprs=single时,我无法正确编译东西,因为有些函数没有实现:

代码语言:javascript
复制
undefined reference to `__extendsfdf2`,
undefined reference to `__adddf3`,
undefined reference to `__divdf3`,
  • 在其他方面。

现在,如果我使用-mfloat-gprs=double编译,它会一直运行到最后,生成我所有的执行文件。但是,使用此标志也会生成额外的函数,而不是由e200z7实现的。我无法确定所有这些代码,因为代码越来越大,而且几乎不可能跟踪所有生成的程序集。例如,当我的执行到达由efscfd核心实现的e500指令时,我的执行就被卡住了,该指令具有双精度浮点支持,但对于仅具有单精度支持的e200则不支持。

因此,这里的任何建议都将是令人惊讶的欢迎!

提前谢谢你,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 20:48:51

如果有人在这里遇到类似的问题,我已经使用了三个标志来解决这个问题:

-mfloat-gprs=single -Wdouble-promotion -fsingle-precision-constant

他们所做的是:-mfloat-gprs=single告诉编译器使用通用寄存器进行浮点操作,而不是浮点寄存器。=单一意味着它具有单一精度

-Wdouble-promotion为gcc尝试将单个浮点数转换为双浮点数时启用了编译器警告。

-fsingle-precision-constant强制GCC不要将单个浮点数转换为双浮点数。

我正在使用-fsingle-precision-constant-Wdouble-promotion同时100%的双倍将不会被使用。

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

https://stackoverflow.com/questions/53402307

复制
相关文章

相似问题

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