fpscr寄存器未更新,并且未生成SIGFPE。该产品已在NVidia Shield Tablet和第1代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
测试。我能得出什么结论?
最佳答案
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功能寄存器以编程方式找到此内容。
我认为您只能得出结论,您没有任何支持陷阱异常的硬件;)