【问题标题】:fpscr register is not updated when enabling floating point exceptions on arm7, SIGFPE not generated在 arm7 上启用浮点异常时,fpscr 寄存器未更新,未生成 SIGFPE
【发布时间】:2015-07-26 12:19:39
【问题描述】:

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 测试。

我能得出什么结论?

【问题讨论】:

    标签: debugging android-ndk floating-point arm


    【解决方案1】:

    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 supportVFP exception trapping

    特别没有帮助的是,您甚至无法从用户空间访问 MVFR0 功能寄存器以通过编程方式找出这一点。

    我认为您只能得出结论,您没有任何支持捕获异常的硬件;)

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多