如何在Cortex-A9上读/写FPSCR?

时间:2013-08-08 16:54:34

标签: arm inline-assembly neon

我正在开发一个运行使用嵌套中断的软件的基于ARM Cortex-A9的系统;但是,实现嵌套中断的方法似乎有缺陷,因为浮点值和操作可能会被破坏。

为了缓解这种情况,我试图在进入中断例程时保存浮点寄存器的状态。我正在为FPSCR尝试的方法是:

asm ("VMRS %0, FPSCR " : "=r" ( savedReg)); //Save

asm ("VMSR FPSCR, %0 " : "=r" ( savedReg)); //Restore

读取似乎有效,但不是写入,它会导致A9重新启动。

是否可以通过这种方式访问​​FPSCR?建议采用其他什么方法?

3 个答案:

答案 0 :(得分:1)

据我所知,仅在管理员模式下才允许修改协处理器。

答案 1 :(得分:1)

您正在为FPSCR和savedReg写一个未定义的值。你想要:

asm volatile ("VMSR FPSCR, %0 " : : "r" ( savedReg)); //Restore

此外,无法保证浮点运算保持在内联汇编程序之间(尽管volatile"memory"可能有帮助),请使用独立汇编程序。

答案 2 :(得分:0)

我使用Linux内核模块来运行汇编代码,以便在加载时为用户模式访问有趣的协处理器寄存器。这仅适用于实验/诊断,显然不适用于运输代码。