Jonas Maebe wrote:
On 28 May 2012, at 15:19, OBones wrote:

Bugger, why does this keep happening to me???
Anyway, this time it is at the end.
I cannot reproduce the problem with 2.6.0/2.7.1 on Mac OS X/i386, nor with 
2.7.1 on Linux/i386. I even don't see any comis* instructions in the code, the 
comparison is performed by the x87 fpu because frac() returns an extended 
result on i386. The only way I can get a comisd, is
a) when targeting Win64/x86-64, but then it's a "comisd reg,reg" instruction
b) when compiling in ObjFPC mode rather than Delphi mode and compiling for i386, and 
adding an explicit double() typecast around the result of frac (that's not possible in 
Delphi mode, because Delphi does not allow changing the precision of floating point 
expressions via explicit typecasts). Then I do see a "comisd ref, reg", but it 
compiles fine here with 2.7.1 for Mac OS X/i386 and Linux/i386 (I don't have a 2.6.0 rtl 
for Linux or Win32 handy to test).
Boy, I'm having a hard day and I'm very sorry to make you waste so much time. Frac was here to see the impact of some changes on the issue, but the original code that crashes is with Trunc instead of Frac so that the comparison looks like this:

  if Trunc(current/NS.VARIABLE) = current/NS.VARIABLE then

Once again, sorry for all the troubles.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to