[fpc-devel] error when crosscompile for arm

Dariusz Mazur darekm at emadar.com
Wed Dec 2 18:06:41 CET 2009


Jonas Maebe pisze:
>
> On 02 Dec 2009, at 16:19, Dariusz Mazur wrote:
>
>> Jonas Maebe pisze:
>>> On 02 Dec 2009, at 00:15, Dariusz Mazur wrote:
>>>
>>>> Jonas Maebe pisze:
>>>>
>>>> or compiler can use comp internal as int64 and external as real.
>>>
>>> That would result in precision loss.
>>>
>> Why. comp is 8 byte wide, the same as int64,
>
> The precision loss occurs when treating it "external as real", because 
> a double cannot represent all int64 values (it's also 8 bytes, but 
> some of those 8 bytes are used to represent an exponent).
>
>> As I read Delphi help now, comp is internal Intel int64, but is 
>> classified as real, because it is not ordinal type.
>
> The reason is because x87 fpu supports a signed 64 bit integer type 
> (which Borland called "comp"). They introduced that type to allow 
> people to perform fairly quick 64 bit arithmetic mathematics on the 
> old Intel 16 bit processors, by making use of the floating point unit. 
> That's the reason for the strange the definition and the non-portability.
I thinking about treat this, as it is floating point, not as double
it stay integer but it can be use as float (for example str(c:0:0,aa) 
where s is comp
the same as Delphi
>
>>>> on linux-arm the same switch cause compiling error (problems with 
>>>> units generating with different switch ) remark: all compiled with 
>>>> -CfSOFT
>>>
>>> Compiling with -Cfsoft and {$E-} will indeed probably causes errors. 
>>> The compiler should simply give an error when you try to do that.
>>>
>> Not simpler ignore this?
>
> It may seem simpler at first sight, but putting "intelligence" like 
> that in the compiler only makes the compiler's behaviour more complex 
> to understand in the long run (if the compiler ignores what I'm doing 
> here, under what other circumstances will it ignore things?) and more 
> difficult to maintain.
>
>> On other platforms  this is not enough, and more switches should be 
>> added
>
> I don't understand what you mean with this. Note that we do not 
> support floating point emulation on all platforms.
If FPC not support emulation, then $E cant disable this
maybe easer is don't disable at all
(but this is only suggestion, no pressure)

-- 
  Darek







More information about the fpc-devel mailing list