/** @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) 2009 - 2010, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ /* * Shifts a 64-bit signed value left by a particular number of bits. */ __declspec(naked) void __cdecl _allshl (void) { _asm { ; ; Handle shifting of 64 or more bits (return 0) ; cmp cl, 64 jae short ReturnZero ; ; Handle shifting of between 0 and 31 bits ; cmp cl, 32 jae short More32 shld edx, eax, cl shl eax, cl ret ; ; Handle shifting of between 32 and 63 bits ; More32: mov edx, eax xor eax, eax and cl, 31 shl edx, cl ret ReturnZero: xor eax,eax xor edx,edx ret } }