comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@acm.nospam.org>
Subject: Re: sub-optimal code for packed boolean arrays -- bug or inherent limitation
Date: Tue, 03 Jul 2007 01:01:48 GMT
Date: 2007-07-03T01:01:48+00:00	[thread overview]
Message-ID: <0ehii.11343$Fc.5113@attbi_s21> (raw)
In-Reply-To: <1183404856.375083.160890@q69g2000hsb.googlegroups.com>

Alinabi wrote:
> 
> The only notable exception is procedure Flip, which becomes
> 
> procedure Flip(B : in out Bitboard_T; I : in Index_T) is
>   30:   89 f1                   mov    %esi,%ecx
>     begin
>         B(i) := not B(i);
>   32:   48 c7 c0 fe ff ff ff    mov    $0xfffffffffffffffe,%rax
>   39:   48 d3 c0                   rol    %cl,%rax
>   3c:   48 21 f8                   and   %rdi,%rax
>   3f:   48 d3 ef                    shr    %cl,%rdi
>   42:   83 f7 01                   xor    $0x1,%edi
>   45:   83 e7 01                  and    $0x1,%edi
>   48:   48 d3 e7                  shl     %cl,%rdi
>   4b:   48 09 f8                   or      %rdi,%rax
>     end;
>   4e:   c3                             retq
> 
> instead of the shorter
> 
> mov  %esi,  %ecx
> mov  0x1,   %rax
> shl    %cl,    %rax
> xor    % rax, %rdx
> retq
> 
> I don't know much (if anything) about compiler internals, so I was
> wondering if I should file a bug report. Is there some good
> theoretical justification for all that extraneous shifts and
> rotations? I would think that if the compiler can figure out the best
> way to set or clear a bit in a register using shift and logical ops,
> than it should also be able to negate it efficiently.

The code gives the correct results, so it can't be a compiler bug. 
Sometimes a compiler will do better than hand-coded assembler; sometimes 
it will do worse. I doubt the compiler's code will make your chess 
program fail to meet its timing requirements; I doubt if you'll notice 
the difference at all, so I don't see why you care. If you must have a 
specific sequence of machine code operations, you should use a 
machine-code insertion.

-- 
Jeff Carter
"Strange women lying in ponds distributing swords
is no basis for a system of government."
Monty Python & the Holy Grail
66



  parent reply	other threads:[~2007-07-03  1:01 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-02 19:34 sub-optimal code for packed boolean arrays -- bug or inherent limitation Alinabi
2007-07-02 20:08 ` Ludovic Brenta
2007-07-03  1:01 ` Jeffrey R. Carter [this message]
2007-07-03  7:22   ` Harald Korneliussen
2007-07-03  8:37     ` Georg Bauhaus
2007-07-03  7:59 ` gautier_niouzes
2007-07-03  9:25 ` Stefan Lucks
2007-07-03 12:40   ` Stefan Lucks
2007-07-03 15:42 ` Adam Beneschan
2007-07-03 18:04 ` Alinabi
2007-07-03 18:09   ` Alinabi
2007-07-03 18:17     ` Alinabi
2007-07-10  2:06       ` Randy Brukardt
2007-07-03 18:36   ` Jeffrey R. Carter
2007-07-03 19:42     ` Alinabi
2007-07-04  1:12       ` Jeffrey R. Carter
2007-07-04 10:15         ` Jeffrey Creem
2007-07-04 18:28           ` Jeffrey R. Carter
2007-07-04  3:22       ` Steve
2007-07-04  6:31         ` Harald Korneliussen
2007-07-08 22:53     ` Robert A Duff
2007-07-09  6:09       ` tmoran
2007-07-04  9:00   ` Jean-Pierre Rosen
2007-07-04 18:27     ` tmoran
2007-07-04 19:16       ` Pascal Obry
2007-07-05  1:45         ` tmoran
2007-07-05  4:53       ` Jeffrey R. Carter
2007-07-04 18:51     ` tmoran
2007-07-08 22:58 ` Robert A Duff
replies disabled

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