[M3devel] cm3 regression
Tony Hosking
hosking at cs.purdue.edu
Mon Apr 14 20:42:07 CEST 2008
I think Modula-3 has it exactly right in that the base types INTEGER
and Word.T use the natural word size of the machine, and that there
are no guarantees about BITSIZE on those. If you want a specific bit
size you use BITS FOR or simply a subrange type, both of which pack
down in memory to just the number of bytes needed. C is generally a
mess since you have both LLP64 (Windows) and LP64 (everyone else, for
good reason -- see http://www.unix.org/version2/whatsnew/
lp64_wp.html). In any case, yes, I expect there will need to be a
fork of BasicCTypes along the lines of ILP32, LP64, and LLP64.
Currently, we have the strangeness that NT386 = ILP32/LL32 (because
the integrated backend can't grok LL64), but this is an anomaly.
Ideally, this would go to LLP64 (IL32) to match the Win64 world.
Remember, this is only for *C types*. On all 64-bit platforms, we
should aim for 64-bit INTEGER and 64-bit Word.T as the native Modula-3
types. How C types fall out depends on the native C expectations of
the platform, and really are just about interfacing to C APIs.
On Apr 14, 2008, at 1:18 PM, Mika Nystrom wrote:
> Jay writes:
>> --_50e47a65-f79d-472b-8eaf-fbcc30b6410e_
>> Content-Type: text/plain; charset="iso-8859-1"
>> Content-Transfer-Encoding: quoted-printable
>>
>> new source -> compiling Cstdlib.i3"..\src\C\32BITS\BasicCtypes.i3",
>> line 18=
>> : illegal based LONGINT literal, zero used"..\src\C\32BITS
>> \BasicCtypes.i3",=
>> line 18: illegal based LONGINT literal, zero used
>> long_long =3D [-16_7fffffffffffffffL-1L ..
>> 16_7fffffffffffffffL]=
>> ;
>> =20
>> Why isn't this LONGINT? So that NT386 can limp along? And it'd be
>> correct f=
>> or the rest, eh?
>> I'll try it and see..
>> =20
>> The underlying system (the compiler) has (U)Int[8,16,32,64]
>> They should just be used here imho..
>> =20
>> Also, what should "long" be on 64bit?
>> On Windows it is 32 bits always.
>> On 32 bit systems it is 32 bits.
>> I think the 64bits directory is going to be forked for AMD64_NT_*.
>> The Windows decision imho has successfully been applied to more
>> code and mo=
>> re users so therefore is better by practical success, even if the
>> whole iss=
>> ue is problematic almost no matter what. Clearly the C and Modula-3
>> notions=
>> of integers are pretty poor..
>
> I have to re-code my program to use Int64 if I want it to use the
> natural INTEGER size on 64 bit machines? No thanks.
More information about the M3devel
mailing list