2 64-bit Math Worker Function.
3 The 32-bit versions of C compiler generate calls to library routines
4 to handle 64-bit math. These functions use non-standard calling conventions.
6 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials are licensed and made available
8 under the terms and conditions of the BSD License which accompanies this
9 distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php.
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #include <Library/BaseLib.h>
21 * Divides a 64-bit signed value by another 64-bit signed value and returns
22 * the 64-bit signed result and the 64-bit signed remainder.
24 __declspec(naked
) void __cdecl
_alldvrm(void)
27 // Wrapper Implementation over EDKII DivS64x64Remainder() routine
30 // DivS64x64Remainder (
33 // OUT INT64 *Remainder
37 ; Original local stack when calling _alldvrm
50 ; ESP
---->|---------------|
54 ; EDX
:EAX contains the
quotient (dividend
/divisor
)
55 ; EBX
:ECX contains the
remainder (divided
% divisor
)
56 ; NOTE
: this routine removes the parameters from the stack
.
60 ; Set up the local stack
for Reminder pointer
66 ; Set up the local stack
for Divisor parameter
74 ; Set up the local stack
for Dividend parameter
82 ; Call native DivS64x64Remainder of BaseLib
84 call DivS64x64Remainder
87 ; EDX
:EAX contains the
quotient (dividend
/divisor
)
88 ; Put the Remainder in EBX
:ECX