Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: asm question

Author: Tom Kerrigan

Date: 16:06:23 06/18/00

Go up one level in this thread


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



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.