www.digitalmars.com         C & C++   DMDScript  

c++ - Optimiser bug ?

Here is a small program compiled with:
Digital Mars C/C++ Compiler Version 8.52.5n

I think there is a bug introduced by the optimiser.

Am I right ?


extern unsigned long D2UL(double);

unsigned long d2ul()
{
  union
  { double d;
    struct { unsigned long a,b; } S;
  } U;
  U.S.a = _EDX;
  U.S.b = _EAX;
  return D2UL(U.d);
}

#pragma alias("__DBLULNG ","_d2ul")

void main()
{
  double d;
  unsigned long ul;
  d=(double)-1;
  ul=d;
}

/*
 * compiled with: dmc -o -c -cod u5   (optimised)
 */

_d2ul:
    sub ESP,01Ch
    mov 4[ESP],EDX
    mov 8[ESP],EAX
    //  pushing the same piece 2 times ?
    push  dword ptr 8[ESP]
    push  dword ptr 8[ESP]
    call  near ptr _D2UL
    add ESP,024h
    ret

/*
 * compiled with: dmc -c -cod u5      (no optimisation)
 */

_d2ul:
    enter 8,0
    mov -8[EBP],EDX
    mov -4[EBP],EAX
    //  pushing 2 pieces
    push  dword ptr -4[EBP]
    push  dword ptr -8[EBP]
    call  near ptr _D2UL
    add ESP,8
    leave
    ret



begin 666 u5.c



M/2!?1418.PT*"54N4RYB(#T 7T5!6#L-

M;VED(&UA:6XH*0T*>PT*"61O=6)L92!D.PT*"75N<VEG;F5D(&QO;F< =6P[

`
end
Dec 19 2010