[M3devel] LONGINT in frontend?
Tony Hosking
hosking at cs.purdue.edu
Sun Nov 21 16:48:00 CET 2010
In general, it is OK for a cross-host to impose smaller restrictions than the target. A native compiler should always be bootstrapped from any cross-compiled compiler anyway, at which point it will acquire it's native restrictions.
On Nov 20, 2010, at 7:26 PM, Jay K wrote:
> Target.Int is onerous, due to no operators (+, -, *, <, =) and everything can fail.
> Operators are nice. e.g. defining them for user defined types.
>
>
> In some places, things are limited by an INTEGER number of bits.
> In m3core/TextLiteral.i3 fiddle with this and cross from 32bits to 64:
>
>
> (* DIV BITSIZE should not be here! *)
> (* MaxBytes = LAST (INTEGER) DIV BITSIZE (Byte) - 7 - 8 * ORD(BITSIZE(INTEGER) = 64); *)
> MaxBytes = 16_7FFFFFFF DIV BITSIZE (Byte) - 7 - 8 * ORD(BITSIZE(INTEGER) = 64);
>
>
> Possibly due to ArrayType.m3:
>
> IF NOT TInt.ToInt (Type.Number (p.index), p.n_elts) THEN
> Error.Msg ("CM3 restriction: array has too many elements");
> p.n_elts := 1;
> END;
>
> or
>
> IF (p.n_elts > 0) AND (p.elt_pack > 0)
> AND (p.n_elts > MAXSIZE DIV p.elt_pack) THEN
> Error.Msg ("CM3 restriction: array type too large");
> full_size := 0;
> p.total_size := 0;
>
>
> or ArrayExpr.m3:
>
>
> IF NOT TInt.ToInt (nn, n) THEN
> Error.Msg ("array has too many elements");
> END;
>
>
> Clearly it should work and it isn't difficult, but it is very very tedious and therefore also error prone.
> You end up having to replace many instances of INTEGER, and then all the uses.
> With LONGINT, perhaps, you can just change the types and not have to visit every single use.
>
>
> - Jay
>
> From: hosking at cs.purdue.edu
> Date: Sat, 20 Nov 2010 11:35:21 -0500
> To: jay.krell at cornell.edu
> CC: m3devel at elegosoft.com
> Subject: Re: [M3devel] LONGINT in frontend?
>
> Target.Int is appropriate here, not LONGINT.
> Where is the current 2Gbyte limit encoded?
>
> On Nov 20, 2010, at 3:43 AM, Jay K wrote:
>
> How about we use LONGINT a bunch in the frontend
> instead of INTEGER? Either that, or Target.Int.
> I do think 32bit frontend should be able to target
> 64bit target, including declaring data structures
> larger than 2GB. (besides that the current limit
> is 2 billion bits, not bytes like it should be..)
>
> LONGINT is easier.
>
> I won't get to either for a little while, other stuff first.
>
> - Jay
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20101121/0c9a72d6/attachment-0002.html>
More information about the M3devel
mailing list