[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