找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3212|回复: 0
打印 上一主题 下一主题
收起左侧

软浮点 技术使用--GCC

[复制链接]
跳转到指定楼层
楼主
ID:140343 发表于 2016-9-25 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前大多数主流CPU都支持浮点运算单元,或者具备浮点运算功能的辅助运算单元,比如PowerPC e500的SPE APU。在这样的机器上,浮点操作一般被编译成硬浮点指令,但是有的时候为了调试方便,或者由于fpu工作不正常而需要关闭硬浮点,就需要使用软浮点指令来模拟浮点操作。


在Linux下,一般有两种软浮点方式:
1。由kernel来模拟软浮点,应用程序仍然使用硬浮点来编译。在运行的时候,碰到浮点指令或者使用了浮点运算单元的CPU,硬件会产生相应的中断异常,kernel处理这个中断异常,然后根据指令内容进行软浮点操作,将结果保存好之后再恢复原来的执行。

这样的方式好处在于应用程序不需要重新编译,只需要在kernel中把浮点模拟的开关打开即可,所以使用起来非常方便。但是缺点也很明显,每次浮点操作都要触发中断异常,执行过程就要慢很多。另外在有些CPU上,并非所有的浮点指令都会触发中断异常,那么这些指令就没办法用这种方式进行模拟。

2。另一种方式是使用软浮点重新编译所有应用程序,这样可以避免上述问题,而且使用gcc的浮点模拟性能上也会好一些。但缺点是因为使用了不同的编译选项,使用的ABI可能就发生了变化,如果某个库或者应用没有使用同样的编译选项(ABI不同),系统运行时会出现意想不到的情况,甚至造成崩溃。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表