powerpc,e300的核,发生了浮点除零异常,可以恢复吗?
问大家一个问题,powerpc,e300的核,发生了浮点除零异常,然后异常可以恢复吗,恢复到下一条指令,我的异常处理里做了处理,跳到下一条指令运行?可以吗?
我恢复了cpu的msr,然后修改了srr0为下一条指令地址,然后rfi指令,本来应该回到出错指令的下一条指令,可是发现还是会进入浮点除零异常,客户需要我们处理浮点除零异常,我试验了,对齐,非定义指令等异常都可以这样,唯独浮点除零不可以??
是需要清除fpscr等寄存器的状态吗,还是需要设置一下?
我没有用linux,自己写的一个类似uboot的程序,自己加异常处理。
客户提出要求,发生浮点除零的异常时,系统不能宕机,得继续下一条指令继续运行
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
学习了.
有些指令用于修改FPSCR中的一些域,你这个可以用mtfsb0试一下。
嗯,大大说得有道理,呵呵,是的,是0x700的异常,Program Interrupt。
我修改了srr0,使得加了4,是出错指令的下一条指令。手册里说:ZX Floating-point zero divide exception. This is a sticky bit. 是sticky位,感觉不能清除,我不能清掉FPSCR[ZE],因为我本身就要捕获这个异常,linux比较牛逼,居然没有使能这个异常,所以也不会报错!!!
如果是除零,你说的是不是Program Interrupt?再次进入异常,你有没有检查SRR0是不是还是原来的值而不是你修改之后的?
你可以返回之前清除FPSCR[ZX]试一下,或一启动就把FPSCR[ZE]清掉,禁止Zero Divide Exception呢?很可能和这个寄存器有关,在Programming Environment中的描述比E300手册中更详细一些,你可以参考一下。
我恢复了cpu的msr,然后修改了srr0为下一条指令地址,然后rfi
发现还是会进入浮点除零异常
客户需要我们处理浮点除零异常
我试验了,对齐,非定义指令等异常都可以这样,唯独浮点除零不可以
我设置了srr0,人工修改了srr0的值,加了个4,但回来后又进入了异常。
我用仿真器抓srr0了,返回的时候是加了4的地址,难道我异常里面修改srr0没有成功?
但是我执行rfi后,按道理,应该是执行srr0的地址啊,类似于arm的pc指针
The rfi instruction has one syntax form and does not affect Condition Register Field 0 or the Fixed-Point Exception Register.
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.
当然有了,呵呵,fpscr可以初始很多异常的~
浮点除零有异常吗?