Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.16-rc6 129 lines 3.8 kB view raw
1/* 2 * Copyright 2012-15 Advanced Micro Devices, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 * 22 * Authors: AMD 23 * 24 */ 25 26 27#ifndef __DAL_FIXED32_32_H__ 28#define __DAL_FIXED32_32_H__ 29 30#include "os_types.h" 31 32struct fixed32_32 { 33 uint64_t value; 34}; 35 36static const struct fixed32_32 dal_fixed32_32_zero = { 0 }; 37static const struct fixed32_32 dal_fixed32_32_one = { 0x100000000LL }; 38static const struct fixed32_32 dal_fixed32_32_half = { 0x80000000LL }; 39 40struct fixed32_32 dal_fixed32_32_from_fraction(uint32_t n, uint32_t d); 41static inline struct fixed32_32 dal_fixed32_32_from_int(uint32_t value) 42{ 43 struct fixed32_32 fx; 44 45 fx.value = (uint64_t)value<<32; 46 return fx; 47} 48 49struct fixed32_32 dal_fixed32_32_add( 50 struct fixed32_32 lhs, 51 struct fixed32_32 rhs); 52struct fixed32_32 dal_fixed32_32_add_int( 53 struct fixed32_32 lhs, 54 uint32_t rhs); 55struct fixed32_32 dal_fixed32_32_sub( 56 struct fixed32_32 lhs, 57 struct fixed32_32 rhs); 58struct fixed32_32 dal_fixed32_32_sub_int( 59 struct fixed32_32 lhs, 60 uint32_t rhs); 61struct fixed32_32 dal_fixed32_32_mul( 62 struct fixed32_32 lhs, 63 struct fixed32_32 rhs); 64struct fixed32_32 dal_fixed32_32_mul_int( 65 struct fixed32_32 lhs, 66 uint32_t rhs); 67struct fixed32_32 dal_fixed32_32_div( 68 struct fixed32_32 lhs, 69 struct fixed32_32 rhs); 70struct fixed32_32 dal_fixed32_32_div_int( 71 struct fixed32_32 lhs, 72 uint32_t rhs); 73 74static inline struct fixed32_32 dal_fixed32_32_min(struct fixed32_32 lhs, 75 struct fixed32_32 rhs) 76{ 77 return (lhs.value < rhs.value) ? lhs : rhs; 78} 79 80static inline struct fixed32_32 dal_fixed32_32_max(struct fixed32_32 lhs, 81 struct fixed32_32 rhs) 82{ 83 return (lhs.value > rhs.value) ? lhs : rhs; 84} 85 86static inline bool dal_fixed32_32_gt(struct fixed32_32 lhs, struct fixed32_32 rhs) 87{ 88 return lhs.value > rhs.value; 89} 90 91static inline bool dal_fixed32_32_gt_int(struct fixed32_32 lhs, uint32_t rhs) 92{ 93 return lhs.value > ((uint64_t)rhs<<32); 94} 95 96static inline bool dal_fixed32_32_lt(struct fixed32_32 lhs, struct fixed32_32 rhs) 97{ 98 return lhs.value < rhs.value; 99} 100 101static inline bool dal_fixed32_32_lt_int(struct fixed32_32 lhs, uint32_t rhs) 102{ 103 return lhs.value < ((uint64_t)rhs<<32); 104} 105 106static inline bool dal_fixed32_32_le(struct fixed32_32 lhs, struct fixed32_32 rhs) 107{ 108 return lhs.value <= rhs.value; 109} 110 111static inline bool dal_fixed32_32_le_int(struct fixed32_32 lhs, uint32_t rhs) 112{ 113 return lhs.value <= ((uint64_t)rhs<<32); 114} 115 116static inline bool dal_fixed32_32_eq(struct fixed32_32 lhs, struct fixed32_32 rhs) 117{ 118 return lhs.value == rhs.value; 119} 120 121uint32_t dal_fixed32_32_ceil(struct fixed32_32 value); 122static inline uint32_t dal_fixed32_32_floor(struct fixed32_32 value) 123{ 124 return value.value>>32; 125} 126 127uint32_t dal_fixed32_32_round(struct fixed32_32 value); 128 129#endif