/** @file 64-bit Math Worker Function. The 32-bit versions of C compiler generate calls to library routines to handle 64-bit math. These functions use non-standard calling conventions. Copyright (c) 2014, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ /* * Shifts a 64-bit unsigned value right by a certain number of bits. */ __declspec(naked) void __cdecl _aullshr ( void ) { _asm { ; ; Checking: Only handle 64bit shifting or more ; cmp cl, 64 jae _Exit ; ; Handle shifting between 0 and 31 bits ; cmp cl, 32 jae More32 shrd eax, edx, cl shr edx, cl ret ; ; Handle shifting of 32-63 bits ; More32: mov eax, edx xor edx, edx and cl, 31 shr eax, cl ret ; ; Invalid number (less then 32bits), return 0 ; _Exit: xor eax, eax xor edx, edx ret } }