fpscr寄存器未更新且未生成SIGFPE。这是在NVidia Shield平板电脑和第一代Nexus 7上测试的。
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
实现调用代码,最终执行此程序集:
asm _volatile__("vmsr fpscr,%0" : :"ri" (fpscr));
; disassembly follows
ldr r3, [r11, #-8]
vmsr fpscr, r3
vmsr fpscr
未更新。当它应该更新为0x20000710时,它仍然是0x20000010。
使用-mfloat-abi=soft
和-mfloat-abi=softfp
进行测试。
我能得出什么结论?
答案 0 :(得分:5)
ARM ARM可以解释FPSCR中的所有异常捕获位:
[...]。仅当实现支持捕获浮点异常时,此位才是RW。在不支持浮点异常捕获的实现中,该位为RES0。
SHIELD平板电脑中的Tegra K1 SoC具有Cortex-A15 CPU,don't support VFP exception trapping。
原始Nexus 7中的Tegra 3 SoC具有Cortex-A9 CPU(带有VFP + NEON实现),don't support VFP exception trapping
特别无益的是,从用户空间,您甚至无法访问MVFR0功能寄存器以编程方式找到它。
我认为你只能得出结论,你没有任何支持被困异常的硬件;)