1 /* EINA - EFL data type library 2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga 3 * Copyright (C) 2009 Cedric BAIL 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; 17 * if not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef EINA_INLINE_FP_X_ 21 # define EINA_INLINE_FP_X_ 22 23 static inline Eina_F32p32 eina_f32p32_int_from(int32_t v)24eina_f32p32_int_from(int32_t v) 25 { 26 return (Eina_F32p32)(v) << 32; 27 } 28 29 static inline int32_t eina_f32p32_int_to(Eina_F32p32 v)30eina_f32p32_int_to(Eina_F32p32 v) 31 { 32 return (int32_t)(v >> 32); 33 } 34 35 static inline Eina_F32p32 eina_f32p32_double_from(double v)36eina_f32p32_double_from(double v) 37 { 38 Eina_F32p32 r; 39 r = (Eina_F32p32)(v * 4294967296.0 + (v < 0 ? -0.5 : 0.5)); 40 return r; 41 } 42 43 static inline double eina_f32p32_double_to(Eina_F32p32 v)44eina_f32p32_double_to(Eina_F32p32 v) 45 { 46 double r; 47 r = v / 4294967296.0; 48 return r; 49 } 50 51 52 53 static inline Eina_F16p16 eina_f16p16_int_from(int32_t v)54eina_f16p16_int_from(int32_t v) 55 { 56 return v << 16; 57 } 58 59 static inline int32_t eina_f16p16_int_to(Eina_F16p16 v)60eina_f16p16_int_to(Eina_F16p16 v) 61 { 62 return v >> 16; 63 } 64 65 static inline Eina_F16p16 eina_f16p16_float_from(float v)66eina_f16p16_float_from(float v) 67 { 68 Eina_F16p16 r; 69 70 r = (Eina_F16p16)(v * 65536.0f + (v < 0 ? -0.5f : 0.5f)); 71 return r; 72 } 73 74 static inline float eina_f16p16_float_to(Eina_F16p16 v)75eina_f16p16_float_to(Eina_F16p16 v) 76 { 77 float r; 78 79 r = v / 65536.0f; 80 return r; 81 } 82 83 static inline Eina_F16p16 eina_f16p16_double_from(double v)84eina_f16p16_double_from(double v) 85 { 86 Eina_F16p16 r; 87 88 r = (Eina_F16p16)(v * 65536.0 + (v < 0 ? -0.5 : 0.5)); 89 return r; 90 } 91 92 static inline double eina_f16p16_double_to(Eina_F16p16 v)93eina_f16p16_double_to(Eina_F16p16 v) 94 { 95 double r; 96 97 r = v / 65536.0; 98 return r; 99 } 100 101 102 static inline Eina_F8p24 eina_f8p24_int_from(int32_t v)103eina_f8p24_int_from(int32_t v) 104 { 105 return v << 24; 106 } 107 108 static inline int32_t eina_f8p24_int_to(Eina_F8p24 v)109eina_f8p24_int_to(Eina_F8p24 v) 110 { 111 return v >> 24; 112 } 113 114 static inline Eina_F8p24 eina_f8p24_float_from(float v)115eina_f8p24_float_from(float v) 116 { 117 Eina_F8p24 r; 118 119 r = (Eina_F8p24)(v * 16777216.0f + (v < 0 ? -0.5f : 0.5f)); 120 return r; 121 } 122 123 static inline float eina_f8p24_float_to(Eina_F8p24 v)124eina_f8p24_float_to(Eina_F8p24 v) 125 { 126 float r; 127 128 r = v / 16777216.0f; 129 return r; 130 } 131 132 133 134 static inline Eina_F32p32 eina_f16p16_to_f32p32(Eina_F16p16 a)135eina_f16p16_to_f32p32(Eina_F16p16 a) 136 { 137 return ((Eina_F32p32) a) << 16; 138 } 139 140 static inline Eina_F32p32 eina_f8p24_to_f32p32(Eina_F8p24 a)141eina_f8p24_to_f32p32(Eina_F8p24 a) 142 { 143 return ((Eina_F32p32) a) << 8; 144 } 145 146 static inline Eina_F16p16 eina_f32p32_to_f16p16(Eina_F32p32 a)147eina_f32p32_to_f16p16(Eina_F32p32 a) 148 { 149 return (Eina_F16p16) (a >> 16); 150 } 151 152 static inline Eina_F16p16 eina_f8p24_to_f16p16(Eina_F8p24 a)153eina_f8p24_to_f16p16(Eina_F8p24 a) 154 { 155 return (Eina_F16p16) (a >> 8); 156 } 157 158 static inline Eina_F8p24 eina_f32p32_to_f8p24(Eina_F32p32 a)159eina_f32p32_to_f8p24(Eina_F32p32 a) 160 { 161 return (Eina_F8p24) (a >> 8); 162 } 163 164 static inline Eina_F8p24 eina_f16p16_to_f8p24(Eina_F16p16 a)165eina_f16p16_to_f8p24(Eina_F16p16 a) 166 { 167 return (Eina_F8p24) (a << 8); 168 } 169 170 #endif 171