float invSqrt(float x) { union fi { float f; int i; } fi v; float xhalf = 0.5f * x; v.f = x; v.i = 0x5f375a86 - (v.i >> 1); float y = x * v.f; float z = y*(1.5f - xhalf * y * y); return z; } or float invSqrt(float x) { float xhalf = 0.5f * x; int i = *cast(int*)&x; i = 0x5f375a86 - (i >> 1); x = *cast(float*)&i; x = x*(1.5f - xhalf * x * x); return x; } fails with error tym = xa Internal error: ../ztc/cgxmm.c 567 when compiled with dmd 1.074 or 2.059 with -O
well probably the optimizer should not expect such a thing to be possible.
Reduced test case. The float needs to be a parameter (not a local variable). float bug8060(float x) { int i = *cast(int*)&x; ++i; return *cast(float*)&i; }
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/70a0d0398810d7da989f778a2b4a3ab1037061dd fix Issue 8060 - xmmstore cannot allocate store for optimized operation that uses int and floats
Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/cb946cd258a186f09cbaa303d1ded96a8ebb095d fix Issue 8060 - xmmstore cannot allocate store for optimized operation that uses int and floats
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル