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功能寄存器以编程方式找到此内容。
我认为您只能得出结论,您没有任何支持陷阱异常的硬件;)

09-06 10:47