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