1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367
|
//===-- Definitions from stdfix.h -----------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_MACROS_STDFIX_MACROS_H
#define LLVM_LIBC_MACROS_STDFIX_MACROS_H
#ifdef __FRACT_FBIT__
// _Fract and _Accum types are available
#define LIBC_COMPILER_HAS_FIXED_POINT
#endif // __FRACT_FBIT__
#ifdef LIBC_COMPILER_HAS_FIXED_POINT
#define fract _Fract
#define accum _Accum
#define sat _Sat
// Default values: from ISO/IEC TR 18037:2008 standard - Annex A.3 - Typical
// desktop processor.
#ifdef __SFRACT_FBIT__
#define SFRACT_FBIT __SFRACT_FBIT__
#else
#define SFRACT_FBIT 7
#endif // SFRACT_FBIT
#ifdef __SFRACT_MIN__
#define SFRACT_MIN __SFRACT_MIN__
#else
#define SFRACT_MIN (-0.5HR - 0.5HR)
#endif // SFRACT_MIN
#ifdef __SFRACT_MAX__
#define SFRACT_MAX __SFRACT_MAX__
#else
#define SFRACT_MAX 0x1.FCp-1HR
#endif // SFRACT_MAX
#ifdef __SFRACT_EPSILON__
#define SFRACT_EPSILON __SFRACT_EPSILON__
#else
#define SFRACT_EPSILON 0x1.0p-7HR
#endif // SFRACT_EPSILON
#ifdef __USFRACT_FBIT__
#define USFRACT_FBIT __USFRACT_FBIT__
#else
#define USFRACT_FBIT 8
#endif // USFRACT_FBIT
#define USFRACT_MIN 0.0UHR
#ifdef __USFRACT_MAX__
#define USFRACT_MAX __USFRACT_MAX__
#else
#define USFRACT_MAX 0x1.FEp-1UHR
#endif // USFRACT_MAX
#ifdef __USFRACT_EPSILON__
#define USFRACT_EPSILON __USFRACT_EPSILON__
#else
#define USFRACT_EPSILON 0x1.0p-8UHR
#endif // USFRACT_EPSILON
#ifdef __FRACT_FBIT__
#define FRACT_FBIT __FRACT_FBIT__
#else
#define FRACT_FBIT 15
#endif // FRACT_FBIT
#ifdef __FRACT_MIN__
#define FRACT_MIN __FRACT_MIN__
#else
#define FRACT_MIN (-0.5R - 0.5R)
#endif // FRACT_MIN
#ifdef __FRACT_MAX__
#define FRACT_MAX __FRACT_MAX__
#else
#define FRACT_MAX 0x1.FFFCp-1R
#endif // FRACT_MAX
#ifdef __FRACT_EPSILON__
#define FRACT_EPSILON __FRACT_EPSILON__
#else
#define FRACT_EPSILON 0x1.0p-15R
#endif // FRACT_EPSILON
#ifdef __UFRACT_FBIT__
#define UFRACT_FBIT __UFRACT_FBIT__
#else
#define UFRACT_FBIT 16
#endif // UFRACT_FBIT
#define UFRACT_MIN 0.0UR
#ifdef __UFRACT_MAX__
#define UFRACT_MAX __UFRACT_MAX__
#else
#define UFRACT_MAX 0x1.FFFEp-1UR
#endif // UFRACT_MAX
#ifdef __UFRACT_EPSILON__
#define UFRACT_EPSILON __UFRACT_EPSILON__
#else
#define UFRACT_EPSILON 0x1.0p-16UR
#endif // UFRACT_EPSILON
#ifdef __LFRACT_FBIT__
#define LFRACT_FBIT __LFRACT_FBIT__
#else
#define LFRACT_FBIT 31
#endif // LFRACT_FBIT
#ifdef __LFRACT_MIN__
#define LFRACT_MIN __LFRACT_MIN__
#else
#define LFRACT_MIN (-0.5LR - 0.5LR)
#endif // LFRACT_MIN
#ifdef __LFRACT_MAX__
#define LFRACT_MAX __LFRACT_MAX__
#else
#define LFRACT_MAX 0x1.FFFFFFFCp-1LR
#endif // LFRACT_MAX
#ifdef __LFRACT_EPSILON__
#define LFRACT_EPSILON __LFRACT_EPSILON__
#else
#define LFRACT_EPSILON 0x1.0p-31LR
#endif // LFRACT_EPSILON
#ifdef __ULFRACT_FBIT__
#define ULFRACT_FBIT __ULFRACT_FBIT__
#else
#define ULFRACT_FBIT 32
#endif // ULFRACT_FBIT
#define ULFRACT_MIN 0.0ULR
#ifdef __ULFRACT_MAX__
#define ULFRACT_MAX __ULFRACT_MAX__
#else
#define ULFRACT_MAX 0x1.FFFFFFFEp-1ULR
#endif // ULFRACT_MAX
#ifdef __ULFRACT_EPSILON__
#define ULFRACT_EPSILON __ULFRACT_EPSILON__
#else
#define ULFRACT_EPSILON 0x1.0p-32ULR
#endif // ULFRACT_EPSILON
#ifdef __SACCUM_FBIT__
#define SACCUM_FBIT __SACCUM_FBIT__
#else
#define SACCUM_FBIT 7
#endif // SACCUM_FBIT
#ifdef __SACCUM_IBIT__
#define SACCUM_IBIT __SACCUM_IBIT__
#else
#define SACCUM_IBIT 8
#endif // SACCUM_IBIT
#ifdef __SACCUM_MIN__
#define SACCUM_MIN __SACCUM_MIN__
#else
#define SACCUM_MIN (-0x1.0p+7HK - 0x1.0p+7HK)
#endif // SACCUM_MIN
#ifdef __SACCUM_MAX__
#define SACCUM_MAX __SACCUM_MAX__
#else
#define SACCUM_MAX 0x1.FFFCp+7HK
#endif // SACCUM_MAX
#ifdef __SACCUM_EPSILON__
#define SACCUM_EPSILON __SACCUM_EPSILON__
#else
#define SACCUM_EPSILON 0x1.0p-7HK
#endif // SACCUM_EPSILON
#ifdef __USACCUM_FBIT__
#define USACCUM_FBIT __USACCUM_FBIT__
#else
#define USACCUM_FBIT 8
#endif // USACCUM_FBIT
#ifdef __USACCUM_IBIT__
#define USACCUM_IBIT __USACCUM_IBIT__
#else
#define USACCUM_IBIT 8
#endif // USACCUM_IBIT
#define USACCUM_MIN 0.0UHK
#ifdef __USACCUM_MAX__
#define USACCUM_MAX __USACCUM_MAX__
#else
#define USACCUM_MAX 0x1.FFFEp+7UHK
#endif // USACCUM_MAX
#ifdef __USACCUM_EPSILON__
#define USACCUM_EPSILON __USACCUM_EPSILON__
#else
#define USACCUM_EPSILON 0x1.0p-8UHK
#endif // USACCUM_EPSILON
#ifdef __ACCUM_FBIT__
#define ACCUM_FBIT __ACCUM_FBIT__
#else
#define ACCUM_FBIT 15
#endif // ACCUM_FBIT
#ifdef __ACCUM_IBIT__
#define ACCUM_IBIT __ACCUM_IBIT__
#else
#define ACCUM_IBIT 16
#endif // ACCUM_IBIT
#ifdef __ACCUM_MIN__
#define ACCUM_MIN __ACCUM_MIN__
#else
#define ACCUM_MIN (-0x1.0p+15K - 0x1.0p+15K)
#endif // ACCUM_MIN
#ifdef __ACCUM_MAX__
#define ACCUM_MAX __ACCUM_MAX__
#else
#define ACCUM_MAX 0x1.FFFFFFFCp+15K
#endif // ACCUM_MAX
#ifdef __ACCUM_EPSILON__
#define ACCUM_EPSILON __ACCUM_EPSILON__
#else
#define ACCUM_EPSILON 0x1.0p-15K
#endif // ACCUM_EPSILON
#ifdef __UACCUM_FBIT__
#define UACCUM_FBIT __UACCUM_FBIT__
#else
#define UACCUM_FBIT 16
#endif // UACCUM_FBIT
#ifdef __UACCUM_IBIT__
#define UACCUM_IBIT __UACCUM_IBIT__
#else
#define UACCUM_IBIT 16
#endif // UACCUM_IBIT
#define UACCUM_MIN 0.0UK
#ifdef __UACCUM_MAX__
#define UACCUM_MAX __UACCUM_MAX__
#else
#define UACCUM_MAX 0x1.FFFFFFFEp+15UK
#endif // UACCUM_MAX
#ifdef __UACCUM_EPSILON__
#define UACCUM_EPSILON __UACCUM_EPSILON__
#else
#define UACCUM_EPSILON 0x1.0p-16UK
#endif // UACCUM_EPSILON
#ifdef __LACCUM_FBIT__
#define LACCUM_FBIT __LACCUM_FBIT__
#else
#define LACCUM_FBIT 31
#endif // LACCUM_FBIT
#ifdef __LACCUM_IBIT__
#define LACCUM_IBIT __LACCUM_IBIT__
#else
#define LACCUM_IBIT 32
#endif // LACCUM_IBIT
#ifdef __LACCUM_MIN__
#define LACCUM_MIN __LACCUM_MIN__
#else
#define LACCUM_MIN (-0x1.0p+31LK - 0x1.0p+31LK)
#endif // LACCUM_MIN
#ifdef __LACCUM_MAX__
#define LACCUM_MAX __LACCUM_MAX__
#else
#define LACCUM_MAX 0x1.FFFFFFFFFFFFFFFCp+31LK
#endif // LACCUM_MAX
#ifdef __LACCUM_EPSILON__
#define LACCUM_EPSILON __LACCUM_EPSILON__
#else
#define LACCUM_EPSILON 0x1.0p-31LK
#endif // LACCUM_EPSILON
#ifdef __ULACCUM_FBIT__
#define ULACCUM_FBIT __ULACCUM_FBIT__
#else
#define ULACCUM_FBIT 32
#endif // ULACCUM_FBIT
#ifdef __ULACCUM_IBIT__
#define ULACCUM_IBIT __ULACCUM_IBIT__
#else
#define ULACCUM_IBIT 32
#endif // ULACCUM_IBIT
#define ULACCUM_MIN 0.0ULK
#ifdef __ULACCUM_MAX__
#define ULACCUM_MAX __ULACCUM_MAX__
#else
#define ULACCUM_MAX 0x1.FFFFFFFFFFFFFFFEp+31ULK
#endif // ULACCUM_MAX
#ifdef __ULACCUM_EPSILON__
#define ULACCUM_EPSILON __ULACCUM_EPSILON__
#else
#define ULACCUM_EPSILON 0x1.0p-32ULK
#endif // ULACCUM_EPSILON
#define absfx(x) \
_Generic((x), \
fract: absr, \
short fract: abshr, \
long fract: abslr, \
accum: absk, \
short accum: abshk, \
long accum: abslk)(x)
#define countlsfx(x) \
_Generic((x), \
fract: countlsr, \
short fract: countlshr, \
long fract: countlslr, \
accum: countlsk, \
short accum: countlshk, \
long accum: countlslk, \
unsigned fract: countlsur, \
unsigned short fract: countlsuhr, \
unsigned long fract: countlsulr, \
unsigned accum: countlsuk, \
unsigned short accum: countlsuhk, \
unsigned long accum: countlsulk)(x)
#define roundfx(x, y) \
_Generic((x), \
fract: roundr, \
short fract: roundhr, \
long fract: roundlr, \
accum: roundk, \
short accum: roundhk, \
long accum: roundlk, \
unsigned fract: roundur, \
unsigned short fract: rounduhr, \
unsigned long fract: roundulr, \
unsigned accum: rounduk, \
unsigned short accum: rounduhk, \
unsigned long accum: roundulk)(x, y)
#endif // LIBC_COMPILER_HAS_FIXED_POINT
#endif // LLVM_LIBC_MACROS_STDFIX_MACROS_H
|