On Mar 16, 2012, at 12:38 PM, Richard Guenther wrote: > On Fri, Mar 16, 2012 at 12:33 PM, Tristan Gingold <ging...@adacore.com> wrote: >> >> On Mar 16, 2012, at 12:02 PM, Richard Guenther wrote: >> >>> On Fri, Mar 16, 2012 at 11:39 AM, Tristan Gingold <ging...@adacore.com> >>> wrote: >>>> Hi, >>>> >>>> currently sizetype precision (cf store-layout.c:initialize_sizetypes) is >>>> the same as size_t. >>>> This is an issue on VMS, where size_t is 'unsigned int', but we'd like to >>>> have a 64 bit sizetype >>>> for Ada. My understanding is that ISO-C doesn't require size_t precision >>>> to match the one of >>>> void *. >>>> >>>> We can't really lie about size_t because it is exposed in API (such as >>>> writev). >>>> >>>> I don't see any reason (other than historic one) to have an exact match >>>> between sizetype and size_t. >>>> So this patch adds an hook to allow targets to define sizetype. >>> >>> Well, there is at least "common sense" that couples size_t and sizetype. >>> As you can at most allocate size_t memory via malloc (due to its size_t >>> use for the size) sizes larger than what fits into size_t do not make much >>> sense. Thus, a sizetype larger than size_t does not make much sense. >> >> Agreed, but malloc() is not the only way to get memory. At least on VMS, >> there are >> some syscalls to allocate memory with a 64 bit length argument. >> >>> The middle-end of course would not care much what you use for sizetype. >>> But be warned - if the mode for sizetype is different of ptr_mode things >>> are going to be interesting for you (yes, ptr_mode, not Pmode). >> >> That's the issue. POINTER_SIZE is 64 bits (when -mpointer-size=64) but >> size_t should always be 32 bit. > > Ok. > >>>> I initially thought about using Pmode precision for sizetype precision, >>>> but there are a few machines >>>> (m32c, sh, h8300) where the precisions aren't the same. I don't know >>>> wether this is on purpose or >>>> unintentional. >>> >>> At least for m32c it is IIRC because 24bit computations are soo expensive >>> on that target, so HImode is chosen for sizetype. >> >> That's a good reason! >> >>> So - why do you need a 64bit sizetype again? ;) >>> >>> Can it be that you don't really need 64bit sizes but you hit issues with >>> sizetype != ptr_mode size? >> >> I don't have an urgent need for 64bit sizes (although would be nice to have >> them). >> >> I remember that the first build with sizetype=32 but ptr_mode =DImode was a >> failure. >> Maybe I should first investigate this path, as m32c could use "unsigned int" >> (16 bits) >> for size_type alongside 32 for POINTER_SIZE ? > > Well, this setup is not well supported by the middle-end (and indeed m32c > has existing issues with that). So in your case decoupling sizetype from > size_t sounds like the more appropriate solution. > >>> Btw, while we are transitioning to target hooks in this case I'd prefer >>> a target macro alongside the existing SIZE_TYPE, etc. ones. >> >> Ok. > > I'd choose SIZETYPE (for confusion, heh), defaulting to SIZE_TYPE.
Ok, thank you for your comments. Tristan.