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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 114669,94472ba0fa186a8d X-Google-Attributes: gid114669,public X-Google-Thread: 1147fc,94472ba0fa186a8d X-Google-Attributes: gid1147fc,public X-Google-Thread: 103376,94472ba0fa186a8d X-Google-Attributes: gid103376,public From: Andi Kleen Subject: Re: ADA on the super Date: 1998/04/21 Message-ID: #1/1 X-Deja-AN: 346261856 Distribution: inet Sender: andi@fred.muc.de References: <6h7v0c$r68$1@bambi.zdv.Uni-Mainz.DE> <6ha2lu$5cb$1@nnrp1.dejanews.com> <6hfjmg$hvt@top.mitre.org> Organization: [posted via] Leibniz-Rechenzentrum, Muenchen (Germany) Newsgroups: comp.sys.super,comp.parallel.mpi,comp.lang.ada Date: 1998-04-21T00:00:00+00:00 List-Id: dewar@merv.cs.nyu.edu (Robert Dewar) writes: > < except for packed arrays. Robert is right about bench > marking your application with ALL of your data before > deciding what is fast and what is slow. > >> > > Actually, this is probably an over-generalization. Packed array stuff is > notorious, since there are so many special cases, and a given compiler > is likely to do some but not all special casing. GNAT does some packed > array stuff really efficiently, and other stuff is pretty horrible. A > good challenge is Mats Weber's > > x := x(1 .. 31) & x(0); > > to do a simple rotate. It would be impressive if a compiler generated > a single rotate instruction for this -- well to be more accurate, it > would be surprising if such an optimization came out of a general > approach (it is always easy to add one more special case). Certainly > GNAT comes *nowhere* near generating a single instruction for this > particular case. It is surprising that Gnat doesn't do this. At least the C frontend of gcc does a very similar optimization: /* Expects sizeof(unsigned int) == 4 */ int rotate(unsigned int i) { return (i << 1) | (i >> 31); } Compiled with -O2 on i386 Linux. .file "t13.c" .version "01.01" gcc2_compiled.: .text .align 4 .globl rotate .type rotate,@function rotate: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax roll $1,%eax leave ret .Lfe1: .size rotate,.Lfe1-rotate .ident "GCC: (GNU) 2.7.2.1" -Andi