Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: asm question

Author: Tom Kerrigan

Date: 10:13:48 06/19/00

Go up one level in this thread


On June 19, 2000 at 03:09:30, Ed Schröder wrote:

>On June 18, 2000 at 19:06:23, Tom Kerrigan wrote:
>
>>On June 18, 2000 at 17:15:36, James Robertson wrote:
>>
>>>On June 18, 2000 at 16:44:15, Bruce Moreland wrote:
>>>
>>>>On June 18, 2000 at 15:25:23, James Robertson wrote:
>>>>
>>>>>I cannot remember how to do a shift in assembler and save any bits shifted off.
>>>>>Specifically, I want to shift a 64-bit integer. What is the assembler equivalent
>>>>>of:
>>>>>
>>>>>unsigned __int64 x;
>>>>>x <<= shift;
>>>>
>>>>If you are using MSVC, you can often answer these questions by compiling with
>>>>the -Fc option, and looking at the code.
>>>>
>>>>It is possible that they do a function call to do this, but if they do it
>>>>inline, the answer is right in front of you.
>>>
>>>I did this. To do a 64 bit shift, MSVC calls a function named _allshl or
>>>_allshr. This is the code it provides (copied and directly from the debug
>>>executable and uncleaned):
>>>
>>>_allshl:
>>>00408190   cmp         cl,40h
>>>00408193   jae         RETZERO(0x004081aa)
>>>00408195   cmp         cl,20h
>>>00408198   jae         MORE32(0x004081a0)
>>>0040819A   shld        edx,eax,cl
>>>0040819D   shl         eax,cl
>>>0040819F   ret
>>>MORE32:
>>>004081A0   mov         edx,eax
>>>004081A2   xor         eax,eax
>>>004081A4   and         cl,1Fh
>>>004081A7   shl         edx,cl
>>>004081A9   ret
>>>RETZERO:
>>>004081AA   xor         eax,eax
>>>004081AC   xor         edx,edx
>>>004081AE   ret
>>>
>>>I am sure the MUST be something faster than this.
>>
>>I didn't actually look at the assembly, but I'm 100% certain this is the fastest
>>way to do it. Think about it, the people who wrote this function are geniuses at
>>MS and their top priority was to make it as fast as possible. No offense, but I
>>really doubt you can do a better job.
>>
>>-Tom
>
>Porting the ASM part of Rebel back to C++ using MVC6 gave me a speed
>loss of 30%. So there is much left for improvement.

I'm definitely not saying that MSVC produces the best possible machine code
ever.

But I do claim that these small functions that do basic things (shift 64 bit
numbers, do absolute values, etc.) are as fast as possible.

-Tom



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.