comp.lang.ada
 help / color / mirror / Atom feed
From: Samuel Tardieu <sam@ada.eu.org>
To: Gautier <Gautier.deMontmollin@Maths.UniNe.CH>
Subject: Re: C like op= proposal
Date: 1999/08/17
Date: 1999-08-17T18:01:23+00:00	[thread overview]
Message-ID: <87emh2l218.fsf@antinea.enst.fr> (raw)
In-Reply-To: 37B7D172.DCE02FFA@Maths.UniNe.CH

>>>>> "Gautier" == Gautier  <Gautier.deMontmollin@Maths.UniNe.CH> writes:

Gautier>   a(b(c,d+e(f,g)).h(i,j)) := a(b(c,d+e(f,g)).h(i,j)) + 1;

Gautier> which can be horribily long and unlikely to be catched by the
Gautier> optimizer -> 2x too slow (at least: the extra code makes a
Gautier> penalty for processor cache).

Where did you get the impression that the optimizer would miss this?

For example, using GNAT, the following expression generates: (ix86 code)

t__pXb:
        movl t__jXb,%edx                              |
        decl %edx                                     |
        movl t__iXb,%eax                              |
        decl %eax                                     |
        leal (%eax,%eax,4),%eax                       |
        sall $3,%eax                                  |
        leal (%eax,%edx,4),%edx                       |
        movl t__gXb,%ecx                              |
        decl %ecx                                     | Address computation
        movl t__fXb,%eax                              |
        decl %eax                                     |
        leal (%eax,%eax,4),%eax                       |
        sall $3,%eax                                  |
        movl t__eXb(%eax,%ecx,4),%eax                 |
        addl t__dXb,%eax                              |
        imull $400,%eax,%eax                          |
        leal -400(%edx,%eax),%eax                     |
        imull $4000,t__cXb,%edx                       |
        movl t__bXb-4000(%eax,%edx),%eax              |
        decl %eax                                     |
        incl t__aXb(,%eax,4)            <--- Increment done here!
        ret

The code used to generate this was: (-O3 -fomit-frame-pointer -gnatp)

package T is
   pragma Elaborate_Body;
end T;

package body T is

   pragma Warnings (Off); -- Uninitialized variables

   type Two_Ints is array (Integer range <>, Integer range <>) of Integer;

   type Rec is record
      H : Two_Ints (1 .. 10, 1 .. 10);
   end record;

   type Two_Recs is array (Integer range <>, Integer range <>) of Rec;

   A : array (1 .. 10) of Integer;
   B : Two_Recs (1 .. 10, 1 .. 10);
   C : Integer;
   D : Integer;
   E : Two_Ints (1 .. 10, 1 .. 10);
   F : Integer;
   G : Integer;
   I : Integer;
   J : Integer;

   procedure P is
   begin
      a(b(c,d+e(f,g)).h(i,j)) :=   a(b(c,d+e(f,g)).h(i,j)) + 1;
   end P;

end T;




  parent reply	other threads:[~1999-08-17  0:00 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-08-15  0:00 C like op= proposal Brian Rogoff
1999-08-15  0:00 ` Ray Blaak
1999-08-15  0:00   ` Brian Rogoff
1999-08-16  0:00     ` Gautier
1999-08-17  0:00       ` John Duncan
1999-08-17  0:00         ` Gautier
1999-08-17  0:00       ` Samuel Tardieu [this message]
1999-08-17  0:00         ` Andi Kleen
1999-08-18  0:00           ` Robert Dewar
1999-08-17  0:00             ` Brian Rogoff
1999-08-18  0:00               ` Ted Dennison
1999-08-18  0:00                 ` Jeff Carter
1999-08-18  0:00                   ` Keith Thompson
1999-08-19  0:00                     ` Tarjei T. Jensen
1999-08-19  0:00                       ` tmoran
1999-08-19  0:00                       ` Lance Kibblewhite
1999-08-19  0:00                       ` Robert Dewar
1999-08-20  0:00                         ` P.S. Norby
1999-08-21  0:00                           ` Robert Dewar
1999-08-19  0:00                       ` Ted Dennison
1999-08-19  0:00                     ` Michael F. Yoder
1999-08-21  0:00                       ` Keith Thompson
1999-08-18  0:00                 ` Robert I. Eachus
1999-08-18  0:00               ` Gautier
1999-08-18  0:00               ` Robert Dewar
1999-08-18  0:00                 ` Brian Rogoff
1999-08-19  0:00                   ` Robert Dewar
1999-08-21  0:00                     ` Brian Rogoff
1999-08-23  0:00                     ` Robert A Duff
1999-08-18  0:00             ` Andi Kleen
1999-08-17  0:00         ` Gautier
1999-08-18  0:00         ` Gautier
1999-08-16  0:00 ` Robert Dewar
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox