1/*	$NetBSD: math.c,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $	*/
2
3// SPDX-License-Identifier: BSD-2-Clause-Patent
4/*
5 * This code is based on EDK II MdePkg/Library/BaseLib/Math64.c
6 * Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
7 */
8
9#include "lib.h"
10
11/**
12 * LShiftU64() - left shift
13 */
14UINT64
15LShiftU64 (
16	IN UINT64   Operand,
17	IN UINTN    Count
18)
19{
20	return Operand << Count;
21}
22
23/**
24 * RShiftU64() - right shift
25 */
26UINT64
27RShiftU64 (
28	IN UINT64   Operand,
29	IN UINTN    Count
30)
31{
32	return Operand >> Count;
33}
34
35/**
36 * MultU64x32() - multiply
37 */
38UINT64
39MultU64x32 (
40	IN UINT64   Multiplicand,
41	IN UINTN    Multiplier
42)
43{
44	return Multiplicand * Multiplier;
45}
46
47/**
48 * DivU64x32() - divide
49 */
50UINT64
51DivU64x32 (
52	IN UINT64   Dividend,
53	IN UINTN    Divisor,
54	OUT UINTN   *Remainder OPTIONAL
55)
56{
57	ASSERT(Divisor != 0);
58
59	if (Remainder) {
60		*Remainder = Dividend % Divisor;
61	}
62
63	return Dividend / Divisor;
64}
65