Home | History | Annotate | Line # | Download | only in riscv64
      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  */
     14 UINT64
     15 LShiftU64 (
     16 	IN UINT64   Operand,
     17 	IN UINTN    Count
     18 )
     19 {
     20 	return Operand << Count;
     21 }
     22 
     23 /**
     24  * RShiftU64() - right shift
     25  */
     26 UINT64
     27 RShiftU64 (
     28 	IN UINT64   Operand,
     29 	IN UINTN    Count
     30 )
     31 {
     32 	return Operand >> Count;
     33 }
     34 
     35 /**
     36  * MultU64x32() - multiply
     37  */
     38 UINT64
     39 MultU64x32 (
     40 	IN UINT64   Multiplicand,
     41 	IN UINTN    Multiplier
     42 )
     43 {
     44 	return Multiplicand * Multiplier;
     45 }
     46 
     47 /**
     48  * DivU64x32() - divide
     49  */
     50 UINT64
     51 DivU64x32 (
     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