acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
uint64_utilities.h
1/*
2 * Header file: muldiv64.h
3 * Author: Richard van der Wal
4 * Contact: [email protected]
5 *
6 * Description:
7 * Header file with prototype for 64 bit scaling functions
8 *
9 * $Log: $
10 *
11 */
12
13/******************************************************************************/
14#pragma once
15#ifndef __FULL_MULDIV64_
16#define __FULL_MULDIV64_
17
18
19/*
20 * muldiv64
21 * Multiplies an operant by a multiplier and divides the result by a divider
22 * Used for scaling 64 bit integer values
23 * Xscaled = Xstart * Multiplier / Divider
24 * Uses 128 bit intermediate result
25 */
26CLASS_DECL_ACME ::i64 muldiv64(::i64 operant, ::i64 multiplier, ::i64 divider);
27
28
29/*
30 * mulshr64
31 * Multiplies an operant by a multiplier and right shifts the result rshift times
32 * Used for scaling 64 bit integer values
33 * Xscaled = (Xstart * Multiplier) SHR rshift
34 * Uses 128 bit intermediate result
35 */
36CLASS_DECL_ACME ::i64 mulshr64(::i64 operant, ::i64 multiplier, ::u8 rshift);
37
38
39CLASS_DECL_ACME void mul64(::u64 v1, ::u64 v2, ::u64 & hi, ::u64 & lo);
40
41
42CLASS_DECL_ACME void mul64(::i64 v1, ::i64 v2, ::i64 & hi, ::u64 & lo);
43
44
45CLASS_DECL_ACME ::u64 div128_64(::u64 hi, ::u64 lo, ::u64 div, ::u64 & remainder);
46
47
48CLASS_DECL_ACME ::i64 div128_64(::i64 hi, ::u64 lo, ::i64 div, ::u64 & remainder);
49
50
51CLASS_DECL_ACME ::i64 div128_64(::i64 hi, ::u64 lo, ::i64 div, ::u64 & remainder);
52
53
54#endif //__FULL_MULDIV64_
55
56