xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/lib/mips64el/math.c (revision 627f7eb200a4419d89b531d55fccd2ee3ffdcde0)
1 /*	$NetBSD: math.c,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $	*/
2 
3 /*
4  * Copright (C) 2014 Linaro Ltd.
5  * Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice and this list of conditions, without modification.
12  * 2. The name of the author may not be used to endorse or promote products
13  *    derived from this software without specific prior written permission.
14  *
15  * Alternatively, this software may be distributed under the terms of the
16  * GNU General Public License as published by the Free Software Foundation;
17  * either version 2 of the License, or (at your option) any later version.
18  */
19 
20 #include "lib.h"
21 
22 UINT64
23 LShiftU64 (
24     IN UINT64   Operand,
25     IN UINTN    Count
26     )
27 // Left shift 64bit by 32bit and get a 64bit result
28 {
29     return Operand << Count;
30 }
31 
32 UINT64
33 RShiftU64 (
34     IN UINT64   Operand,
35     IN UINTN    Count
36     )
37 // Right shift 64bit by 32bit and get a 64bit result
38 {
39     return Operand >> Count;
40 }
41 
42 
43 UINT64
44 MultU64x32 (
45     IN UINT64   Multiplicand,
46     IN UINTN    Multiplier
47     )
48 // Multiple 64bit by 32bit and get a 64bit result
49 {
50     return Multiplicand * Multiplier;
51 }
52 
53 UINT64
54 DivU64x32 (
55     IN UINT64   Dividend,
56     IN UINTN    Divisor,
57     OUT UINTN   *Remainder OPTIONAL
58     )
59 // divide 64bit by 32bit and get a 64bit result
60 // N.B. only works for 31bit divisors!!
61 {
62     if (Remainder)
63 	*Remainder = Dividend % Divisor;
64     return Dividend / Divisor;
65 }
66