3 ;Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 ;This program and the accompanying materials
5 ;are licensed and made available under the terms and conditions of the BSD License
6 ;which accompanies this distribution. The full text of the license may be found at
7 ;http://opensource.org/licenses/bsd-license.php
9 ;THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 ;WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 ; 64-bit right shift function for IA-32
24 ;---------------------------------------------------------------------------
29 ;---------------------------------------------------------------------------
38 ; This routine allows a 64 bit value to be right shifted by 32 bits and returns the
40 ; Count is valid up 63. (Only Bits 0-5 is valid for Count)
42 ; Operand - Value to be shifted
43 ; Count - Number of times to shift right.
47 ; Value shifted right identified by the Count.
52 mov eax, [esp + 4]; dword ptr Operand[0]
53 mov edx, [esp + 8]; dword ptr Operand[4]
56 ; CL is valid from 0 - 31. shld will move EDX:EAX by CL times but EDX is not touched
57 ; For CL of 32 - 63, it will be shifted 0 - 31 so we will move edx to eax later.
59 mov ecx, [esp + 0Ch] ; Count
65 jc short _RShiftU64_Done
68 ; Since Count is 32 - 63, edx will have been shifted by 0 - 31
69 ; If shifted by 32 or more, set upper 32 bits to zero.