From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Simon Wright Newsgroups: comp.lang.ada Subject: Re: Large Integer Overflow - Causing a Bottleneck - Any solution. Date: Thu, 04 May 2017 17:53:04 +0100 Organization: A noiseless patient Spider Message-ID: References: <45c389ad-5b2c-4f6a-9003-8a64d41d9ddc@googlegroups.com> <4b7a7a25-d1b2-4fd0-9943-da611e53e307@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="6535437cb4f67007ffc37b079dae3f85"; logging-data="15212"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19tBEMZEtX9ym5sdk7yI+fDAYTPeZ2K13E=" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (darwin) Cancel-Lock: sha1:tX7klZKbQF917UWAGxc7KNsNPxg= sha1:IgKwQePeW+obpvptHCGVcQnsSsY= Xref: news.eternal-september.org comp.lang.ada:46669 Date: 2017-05-04T17:53:04+01:00 List-Id: Stephen Davies writes: > On Wednesday, 3 May 2017 17:18:00 UTC+1, Simon Wright wrote: >> Even where a GNAT is built for a machine with 64-bit addresses, it uses >> 32-bit integers as you have seen. >> >> You could try, near the top of your program (assuming it's just one >> compilation unit), >> >> subtype Integer is Long_Integer; > > With Gnat, I believe that Long_Integer is still 32-bit and for 64-bit you > need Long_Long_Integer. Or use "type Int64 is range -(2**63) .. 2**63-1". macOS Sierra, GNAT GPL 2016, this: package Obyrne is subtype Integer is Long_Integer; type R is record C : Integer; end record; end Obyrne; gives $ gnatmake -c -u -f -gnatR obyrne.ads gcc -c -gnatR obyrne.ads Representation information for unit Obyrne (spec) ------------------------------------------------- for R'Size use 64; for R'Alignment use 8; for R use record C at 0 range 0 .. 63; end record; so on that platform I stand by Long_Integer. Might be different on a 32-bit platform, I guess, but I don't have one.