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=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,5ff6e0c3de8331c0 X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!wns14feed!worldnet.att.net!attbi_s21.POSTED!53ab2750!not-for-mail From: "Jeffrey R. Carter" User-Agent: Thunderbird 1.5.0.12 (Windows/20070509) MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: sub-optimal code for packed boolean arrays -- bug or inherent limitation References: <1183404856.375083.160890@q69g2000hsb.googlegroups.com> In-Reply-To: <1183404856.375083.160890@q69g2000hsb.googlegroups.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Message-ID: <0ehii.11343$Fc.5113@attbi_s21> NNTP-Posting-Host: 12.201.97.213 X-Complaints-To: abuse@mchsi.com X-Trace: attbi_s21 1183424508 12.201.97.213 (Tue, 03 Jul 2007 01:01:48 GMT) NNTP-Posting-Date: Tue, 03 Jul 2007 01:01:48 GMT Organization: AT&T ASP.att.net Date: Tue, 03 Jul 2007 01:01:48 GMT Xref: g2news1.google.com comp.lang.ada:16389 Date: 2007-07-03T01:01:48+00:00 List-Id: 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