Unified · Split
| @@ -131,13 +131,19 @@ · 130 unmodified lines | ||
| 131 | 131 | |
| 132 | 132 | #define LINEAR_INTERPOLATION8(s, f) \ |
| 133 | 133 | { \ |
| 134 | − const double dFrac = (const double)((uint32_t)f * (1.0 / (UINT32_MAX+1.0))); /* 0.0 .. 0.999999999 */ \ | |
| 134 | + /* uint32_t -> int32_t so that we can use SIMD for fast int->double conversion */ \ | |
| 135 | + const int32_t frac = (uint32_t)(f) >> 1; /* (2^32)-1 -> (2^31)-1 */ \ | |
| 136 | + \ | |
| 137 | + const double dFrac = (double)(frac * (1.0 / (INT32_MAX+1.0))); /* 0.0 .. 0.999999999 */ \ | |
| 135 | 138 | dSample = ((s[0] + (s[1]-s[0]) * dFrac)) * (1.0 / 128.0); \ |
| 136 | 139 | } \ |
| 137 | 140 | |
| 138 | 141 | #define LINEAR_INTERPOLATION16(s, f) \ |
| 139 | 142 | { \ |
| 140 | − const double dFrac = (const double)((uint32_t)f * (1.0 / (UINT32_MAX+1.0))); /* 0.0 .. 0.999999999 */ \ | |
| 143 | + /* uint32_t -> int32_t so that we can use SIMD for fast int->double conversion */ \ | |
| 144 | + const int32_t frac = (uint32_t)(f) >> 1; /* (2^32)-1 -> (2^31)-1 */ \ | |
| 145 | + \ | |
| 146 | + const double dFrac = (double)(frac * (1.0 / (INT32_MAX+1.0))); /* 0.0 .. 0.999999999 */ \ | |
| 141 | 147 | dSample = ((s[0] + (s[1]-s[0]) * dFrac)) * (1.0 / 32768.0); \ |
| 142 | 148 | } \ |
| 143 | 149 | |