Casting double to ulong weirdness
rumbu via Digitalmars-d
digitalmars-d at puremagic.com
Tue Aug 25 15:42:13 PDT 2015
On Tuesday, 25 August 2015 at 21:30:03 UTC, Warwick wrote:
> The compilers that dont exhibit this problem might set the x87
> to work at 64 bit at startup or more likely they are using
> scalar SSE. You cant mix different depth operands in SSE. You
> cant multiply a float by double for example, you have to
> convert one of them so they have the same type. So in SSE the
> bit depth of every op is always explicit.
True word:
This is msvc compiler generated code (default configuration,
debug):
double x = 1.2;
012F174E movsd xmm0,mmword ptr ds:[12F6B30h]
012F1756 movsd mmword ptr [x],xmm0
unsigned long long u = (unsigned long long)(x * 10);
012F175B movsd xmm0,mmword ptr [x]
012F1760 mulsd xmm0,mmword ptr ds:[12F6B40h]
012F1768 call __dtoul3 (012F102Dh)
012F176D mov dword ptr [u],eax
012F1770 mov dword ptr [ebp-18h],edx
More information about the Digitalmars-d
mailing list