]> git.proxmox.com Git - mirror_edk2.git/blob - CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/MathMultS64x64.c
BaseTools: Fix a cleanall issue.
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLib / SysCall / Ia32 / MathMultS64x64.c
1 /** @file
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.
5
6 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
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.
14
15 **/
16
17 #include <Library/BaseLib.h>
18
19 /*
20 * Multiplies a 64-bit signed or unsigned value by a 64-bit signed or unsigned value
21 * and returns a 64-bit result.
22 */
23 __declspec(naked) void __cdecl _allmul (void)
24 {
25 //
26 // Wrapper Implementation over EDKII MultS64x64() routine
27 // INT64
28 // EFIAPI
29 // MultS64x64 (
30 // IN INT64 Multiplicand,
31 // IN INT64 Multiplier
32 // )
33 //
34 _asm {
35 ; Original local stack when calling _allmul
36 ; -----------------
37 ; | |
38 ; |---------------|
39 ; | |
40 ; |--Multiplier --|
41 ; | |
42 ; |---------------|
43 ; | |
44 ; |--Multiplicand-|
45 ; | |
46 ; |---------------|
47 ; | ReturnAddr** |
48 ; ESP---->|---------------|
49 ;
50
51 ;
52 ; Set up the local stack for Multiplicand parameter
53 ;
54 mov eax, [esp + 16]
55 push eax
56 mov eax, [esp + 16]
57 push eax
58
59 ;
60 ; Set up the local stack for Multiplier parameter
61 ;
62 mov eax, [esp + 16]
63 push eax
64 mov eax, [esp + 16]
65 push eax
66
67 ;
68 ; Call native MulS64x64 of BaseLib
69 ;
70 call MultS64x64
71
72 ;
73 ; Adjust stack
74 ;
75 add esp, 16
76
77 ret 16
78 }
79 }