[M3devel] TextLiteral.MaxBytes again (unable to compile 64bit target on 32bit host)
Jay K
jay.krell at cornell.edu
Thu Jun 4 01:18:11 CEST 2015
Should we just be a little lax and say minus 64?Or pick some other number like 256MB?
Can we declare there is no bound?
Thank you, - Jay
> Date: Wed, 3 Jun 2015 14:23:07 -0500
> From: rodney_bates at lcwb.coop
> To: m3devel at elegosoft.com; jay.krell at cornell.edu
> Subject: Re: [M3devel] TextLiteral.MaxBytes again (unable to compile 64bit target on 32bit host)
>
>
>
> On 06/02/2015 09:51 PM, Jay K wrote:
> > Ideally:
> > 1 32bit host could target 64bit target
> > 2 32bit texts could be as large as the address space/OS allows.
> > 3 ditto 64bit texts -- larger than 4GB
> > 4 be unpicklable between 32bit and 64bit, as long as they fit into the address space.
> > Currently only #4 is true.
> > TEXTs for any target can only be about 500MB.
> >
> >
> > To fix 2 and 3 requires m3front to use TInt more.
> >
> > This fixes #1 and likely breaks #4. Cutting the limit just a little.
> > Can we special case somehow?
> > Is there some construct we can use that has no stated limit, like 0..cnt - 1?
> > Should/can we introduce one?
> >
> > jbook2:src jay$ git diff "../src/text/TextLiteral.i3"
> > diff --git a/m3-libs/m3core/src/text/TextLiteral.i3 b/m3-libs/m3core/src/text/TextLiteral.i3
> > index fa72589..4d16a44 100644
> > --- a/m3-libs/m3core/src/text/TextLiteral.i3
> > +++ b/m3-libs/m3core/src/text/TextLiteral.i3
> > @@ -14,7 +14,7 @@ IMPORT RTHooks, TextClass;
> > CONST
> > (* 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;
> > + MaxBytes = 16_7FFFFFFF DIV BITSIZE (Byte) - 15;
>
> I'd say go ahead and change this. We really do want it to cross-compile
> sooner than anybody will be able to put TInt in all over the place.
>
> I did not build a cross compiler, but did what I think should be a realistic
> simulation of it by changing the cnt:INTEGER field to two INTEGER fields and
> compiling with a 32-bit compiler. That would be the same size as a 64-bit
> INTEGER. It requires MaxBytes <= 16_7FFFFFFF DIV BITSIZE (Byte) - 11 to
> compile, with bit size having space for 31 more bits before it overflows.
> This byte count of buf is a multiple of 4, which we want for unicode-range
> WIDECHAR. Making it -10 overflows, presumably because the additional byte is
> padded out to a multiple of 32 bits.
>
> I would have expected that somewhere, a size including the one-word heap header
> would be computed, but these are never actually heap allocated, and it seems to
> work. But to hedge against things, I suggest using -19. This would allow space
> to count it, cross-compiling 32->64.
>
> This will allow a text literal of 268435436 ISO characters, and a wide text literal
> of 1/4 that, which is not likely to be a serious limitation, considering that it
> all has to be on a single line of source code.
>
> As for pickles, the horse is already out of the barn on that, as pickles could
> already have been written with the current fingerprint, and we can't change the
> type in any way without the fingerprint changing. It is not hard to add
> recognition of the old fingerprint to pickles. Right off hand, I don't remember
> the process for finding actual fingerprint values, but I've done it before and
> can rediscover it.
>
> > (* - 8 * ORD(BITSIZE(INTEGER) = 64) *)
> > (* Do not adjust this for INTEGER size. It makes T have different
> > fingerprints on 32- and 64-bit machines, which undermines pickling/
> >
> >
> >
> > otherwise we have:
> >
> >
> > new source -> compiling TextLiteral.i3
> > "../src/text/TextLiteral.i3", line 27: CM3 restriction: record or object type is too large
> > 1 error encountered
> >
> >
> > Ok?
> > - Jay
>
> --
> Rodney Bates
> rodney.m.bates at acm.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20150603/dd669cb6/attachment-0002.html>
More information about the M3devel
mailing list