1 /*++
2
3 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 Power10U64.c
15
16 Abstract:
17
18 Calculates Operand * 10 ^ Power
19
20 --*/
21
22 #include "Tiano.h"
23
24 UINT64
25 MultU64x32 (
26 IN UINT64 Multiplicand,
27 IN UINTN Multiplier
28 );
29
30 UINT64
Power10U64(IN UINT64 Operand,IN UINTN Power)31 Power10U64 (
32 IN UINT64 Operand,
33 IN UINTN Power
34 )
35 /*++
36
37 Routine Description:
38
39 Raise 10 to the power of Power, and multiply the result with Operand
40
41 Arguments:
42
43 Operand - multiplicand
44 Power - power
45
46 Returns:
47
48 Operand * 10 ^ Power
49
50 --*/
51 {
52 __asm {
53 mov eax, dword ptr Operand[0]
54 mov edx, dword ptr Operand[4]
55 mov ecx, Power
56 jcxz _Power10U64_Done
57
58 _Power10U64_Wend:
59 push ecx
60 push 10
61 push dword ptr Operand[4]
62 push dword ptr Operand[0]
63 call MultU64x32
64 add esp, 0Ch
65 pop ecx
66 mov dword ptr Operand[0], eax
67 mov dword ptr Operand[4], edx
68 loop _Power10U64_Wend
69
70 _Power10U64_Done:
71 }
72 }
73