1/* 2 * Copyright (c) 2013, Andreas Sandberg 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 52 unchanged lines hidden (view full) --- 61#define BUILD_IFP64(sign, frac, exp) \ 62 ((sign) ? FP64_SIGN_BIT : 0) | \ 63 (((uint64_t)(exp) << FP64_EXP_SHIFT) & FP64_EXP_MASK) | \ 64 ((frac) & FP64_FRAC_MASK) 65 66#define BUILD_FP64(sign, frac, exp) \ 67 { .bits = BUILD_IFP64(sign, frac, exp) } 68 |
69static inline fp64_t 70build_fp64(int sign, uint64_t frac, int exp) 71{ 72 const fp64_t f = BUILD_FP64(sign, frac, exp); 73 74 return f; 75} 76 |
77#define BUILD_FP80_SE(sign, exp) \ 78 ((sign) ? FP80_SIGN_BIT : 0) | \ 79 ((exp) & FP80_EXP_MASK) 80 81#define BUILD_FP80_FI(frac, exp) \ 82 ((exp) ? FP80_INT_BIT : 0) | \ 83 ((frac) & FP80_FRAC_MASK) 84 85#define BUILD_FP80(sign, frac, exp) \ 86 { \ 87 .repr.se = BUILD_FP80_SE(sign, exp), \ 88 .repr.fi = BUILD_FP80_FI(frac, exp) \ 89 } 90 |
91static inline fp80_t 92build_fp80(int sign, uint64_t frac, int exp) 93{ 94 const fp80_t f = BUILD_FP80(sign, frac, exp); 95 96 return f; 97} 98 |
99#define FP80_FRAC(fp80) \ 100 (fp80.repr.fi & FP80_FRAC_MASK) 101 102#define FP80_EXP(fp80) \ 103 (fp80.repr.se & FP80_EXP_MASK) 104 105#define FP64_FRAC(fp64) \ 106 (fp64.bits & FP64_FRAC_MASK) 107 108#define FP64_EXP(fp80) \ 109 ((fp64.bits & FP64_EXP_MASK) >> FP64_EXP_SHIFT) 110 |
111 |
112#endif |