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
next prev 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