次のコードで興味深い状況が発生しました。
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);
サポート付きで qemu デバイスを実行するとKVM
、次の結果が得 られました。
FE_DIVBYZERO !=0; //and it's ok
しかし、KVM
サポートなしで同じソースを実行すると:
FE_DIVBYZERO ==0; //and it's not ok
私がこの状況を理解しているようにmxcsr
、レジスタビット (div by zero) が設定されていないために発生します。しかし、このビットが設定されていない理由がわかりません。何か案は?
更新 : qemu ベース
のエミュレーターでも同じ状況が発生しました。android
emulator -avd test -qemu
リターン: FE_DIVBYZERO !=0;
emulator -avd test -qemu -disable-kvm
リターン: FE_DIVBYZERO ==0;