免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6052 | 回复: 11
打印 上一主题 下一主题

powerpc,e300的核,发生了浮点除零异常,可以恢复吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-15 11:43 |只看该作者 |倒序浏览
问大家一个问题,powerpc,e300的核,发生了浮点除零异常,然后异常可以恢复吗,恢复到下一条指令,我的异常处理里做了处理,跳到下一条指令运行?可以吗?
我恢复了cpu的msr,然后修改了srr0为下一条指令地址,然后rfi指令,本来应该回到出错指令的下一条指令,可是发现还是会进入浮点除零异常,客户需要我们处理浮点除零异常,我试验了,对齐,非定义指令等异常都可以这样,唯独浮点除零不可以??
是需要清除fpscr等寄存器的状态吗,还是需要设置一下?
我没有用linux,自己写的一个类似uboot的程序,自己加异常处理。

客户提出要求,发生浮点除零的异常时,系统不能宕机,得继续下一条指令继续运行

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2010-12-15 12:21 |只看该作者
浮点除零有异常吗?

论坛徽章:
0
3 [报告]
发表于 2010-12-15 13:09 |只看该作者
当然有了,呵呵,fpscr可以初始很多异常的~

论坛徽章:
0
4 [报告]
发表于 2010-12-15 13:12 |只看该作者
cjaizss好久不见~呵呵
FEX Floating-point enabled exception summary. Signals the occurrence of any enabled exception conditions. It
is the logical OR of all the floating-point exception bits masked by their respective enable bits (FEX = (VX &
VE) ^ (OX & OE) ^ (UX & UE) ^ (ZX & ZE) ^ (XX & XE)). The mcrfs, mtfsf, mtfsfi, mtfsb0, and mtfsb1
instructions cannot alter FPSCR[FEX] explicitly. This is not a sticky bit.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-12-15 13:40 |只看该作者
The rfi instruction has one syntax form and does not affect Condition Register Field 0 or the Fixed-Point Exception Register.

论坛徽章:
0
6 [报告]
发表于 2010-12-15 13:46 |只看该作者
我恢复了cpu的msr,然后修改了srr0为下一条指令地址,然后rfi
发现还是会进入浮点除零异常
客户需要我们处理浮点除零异常
我试验了,对齐,非定义指令等异常都可以这样,唯独浮点除零不可以
我设置了srr0,人工修改了srr0的值,加了个4,但回来后又进入了异常。
我用仿真器抓srr0了,返回的时候是加了4的地址,难道我异常里面修改srr0没有成功?
但是我执行rfi后,按道理,应该是执行srr0的地址啊,类似于arm的pc指针

论坛徽章:
0
7 [报告]
发表于 2010-12-15 14:39 |只看该作者
如果是除零,你说的是不是Program Interrupt?再次进入异常,你有没有检查SRR0是不是还是原来的值而不是你修改之后的?

你可以返回之前清除FPSCR[ZX]试一下,或一启动就把FPSCR[ZE]清掉,禁止Zero Divide Exception呢?很可能和这个寄存器有关,在Programming Environment中的描述比E300手册中更详细一些,你可以参考一下。

论坛徽章:
0
8 [报告]
发表于 2010-12-15 14:46 |只看该作者
嗯,大大说得有道理,呵呵,是的,是0x700的异常,Program Interrupt。
我修改了srr0,使得加了4,是出错指令的下一条指令。手册里说:ZX Floating-point zero divide exception. This is a sticky bit. 是sticky位,感觉不能清除,我不能清掉FPSCR[ZE],因为我本身就要捕获这个异常,linux比较牛逼,居然没有使能这个异常,所以也不会报错!!!

论坛徽章:
0
9 [报告]
发表于 2010-12-15 16:35 |只看该作者
有些指令用于修改FPSCR中的一些域,你这个可以用mtfsb0试一下。

论坛徽章:
0
10 [报告]
发表于 2010-12-15 23:09 |只看该作者
学习了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP