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