使用以下代码,我遇到了一个有趣的情况:
static void DivideByZero() {
// volatile to prevent compiler optimizations.
volatile float zero = 0.0f;
volatile float result __attribute__((unused)) = 123.0f / zero;
}
DivideByZero();
int raised = fetestexcept(FE_DIVBYZERO | FE_OVERFLOW);
ASSERT_TRUE((raised & FE_DIVBYZERO) != 0);
当我在KVM
支持下运行我的 qemu 设备时,我得到了以下结果:
FE_DIVBYZERO !=0; //and it's ok
但是当我在没有KVM
支持的情况下运行相同的源时:
FE_DIVBYZERO ==0; //and it's not ok
据我了解这种情况,它发生了,因为在mxcsr
寄存器位(由零除)未设置。但我不明白为什么没有设置这个位。有任何想法吗?
更新 :基于 qemu
的模拟器也发生了同样的情况。android
emulator -avd test -qemu
返回:FE_DIVBYZERO !=0;
emulator -avd test -qemu -disable-kvm
返回:FE_DIVBYZERO ==0;