]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ia32/DivS64x64Remainder.c
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Library / BaseLib / Ia32 / DivS64x64Remainder.c
1 /*++
2
3 Copyright (c) 2004 - 2006, Intel Corporation
4 All rights reserved. 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
13 Module Name:
14
15 DivS64x64Remainder.c
16
17 Abstract:
18
19 Integer division worker functions for Ia32.
20
21 --*/
22
23 #include "..\BaseLibInternal.h"
24
25 /**
26 Worker function that Divides a 64-bit signed integer by a 64-bit signed integer and
27 generates a 64-bit signed result and a optional 64-bit signed remainder.
28
29 This function divides the 64-bit unsigned value Dividend by the 64-bit
30 unsigned value Divisor and generates a 64-bit unsigned quotient. If Remainder
31 is not NULL, then the 64-bit unsigned remainder is returned in Remainder.
32 This function returns the 64-bit unsigned quotient.
33
34 @param Dividend A 64-bit signed value.
35 @param Divisor A 64-bit signed value.
36 @param Remainder A pointer to a 64-bit signed value. This parameter is
37 optional and may be NULL.
38
39 @return Dividend / Divisor
40
41 **/
42 INT64
43 InternalMathDivRemS64x64 (
44 IN INT64 Dividend,
45 IN INT64 Divisor,
46 OUT INT64 *Remainder OPTIONAL
47 )
48 {
49 INT64 Quot;
50
51 Quot = InternalMathDivRemU64x64 (
52 Dividend >= 0 ? Dividend : -Dividend,
53 Divisor >= 0 ? Divisor : -Divisor,
54 (UINT64 *) Remainder
55 );
56 if (Remainder != NULL && Dividend < 0) {
57 *Remainder = -*Remainder;
58 }
59 return (Dividend ^ Divisor) >= 0 ? Quot : -Quot;
60 }