StdLib: Add a runtime helper function for VC++ 64-bit right shift on Ia32 target architectures.

Add new file StdLib/LibC/CRT/Ia32/llshr.c
Add references to the new file to StdLib/LibC/LibC.inf

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Daryl McDaniel <daryl.mcdaniel@intel.com>
Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15855 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Daryl McDaniel 2014-08-20 20:38:43 +00:00 committed by darylm503
parent cb60328323
commit dfa8858555
2 changed files with 61 additions and 1 deletions

View File

@ -0,0 +1,58 @@
/** @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 - 2011, Intel Corporation. All rights reserved.<BR>
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 right by a particular number of bits.
*/
__declspec(naked) void __cdecl _allshr (void)
{
_asm {
;
; Handle shifts of 64 bits or more (if shifting 64 bits or more, the result
; depends only on the high order bit of edx).
;
cmp cl,64
jae short SIGNRETURN
;
; Handle shifts of between 0 and 31 bits
;
cmp cl, 32
jae short MORE32
shrd eax,edx,cl
sar edx,cl
ret
;
; Handle shifts of between 32 and 63 bits
;
MORE32:
mov eax,edx
sar edx,31
and cl,31
sar eax,cl
ret
;
; Return double precision 0 or -1, depending on the sign of edx
;
SIGNRETURN:
sar edx,31
mov eax,edx
ret
}
}

View File

@ -1,7 +1,7 @@
## @file
# Standard C library: Miscelaneous implementations.
#
# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@ -50,6 +50,7 @@
# Compiler helper (C RunTime) functions
CRT/Ia32/llmul.c | MSFT # __allmul
CRT/Ia32/llshl.c | MSFT # __allshl
CRT/Ia32/llshr.c | MSFT # __allshr
CRT/Ia32/ulldiv.c | MSFT # __aulldiv
CRT/Ia32/ullrem.c | MSFT # __aullrem
CRT/Ia32/ullshr.c | MSFT # __aullshr
@ -60,6 +61,7 @@
CRT/Ia32/llmul.c | INTEL
CRT/Ia32/llshl.c | INTEL
CRT/Ia32/llshr.c | INTEL
CRT/Ia32/ulldiv.c | INTEL
CRT/Ia32/ullrem.c | INTEL
CRT/Ia32/ullshr.c | INTEL