[M3devel] LONGINT in frontend?

Jay K jay.krell at cornell.edu
Sun Nov 21 19:03:53 CET 2010


 
> In general, it is OK for a cross-host to impose smaller restrictions than the target. 

I don't think I agree. To some extent it is unavoidable: e.g. compiling really really large files
However, I ought to be able to do this?
typedef struct { int a[1UL << 40]; } foo;

foo* a;

I can in C, from a 32host to a 64bit target.
The way to allow it is reasonably easy, just tedious in Modula- w/o LONGINT or operator overloading.

 - Jay

From: hosking at cs.purdue.edu
Date: Sun, 21 Nov 2010 10:48:00 -0500
To: jay.krell at cornell.edu
CC: m3devel at elegosoft.com
Subject: Re: [M3devel] LONGINT in frontend?



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/4eefa0e0/attachment-0002.html>


More information about the M3devel mailing list