[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