The stereo_interpolate functions add h_step to the values h BUF_SIZE times. Within the stereo_interpolate C functions, the values h (h0-h3, h00-h13) are declared as local float variables, but the compiler is free to keep them in a register with extra precision. If the accumulation is rounded to 32 bit float precision after each step, the less significant bits of h_step end up ignored and the sum can deviate, affecting the end result more than the currently set EPS. By clearing the log2(BUF_SIZE) lower bits of h_step, we make sure that the accumulation shouldn't differ significantly, regardless of any extra precision in the accmulating register/variable. This fixes the aacpsdsp checkasm test when built with clang for mingw/x86_32. Signed-off-by: Martin Storsjö <martin@martin.st> |
||
|---|---|---|
| .. | ||
| aarch64 | ||
| arm | ||
| x86 | ||
| .gitignore | ||
| aacpsdsp.c | ||
| af_afir.c | ||
| alacdsp.c | ||
| audiodsp.c | ||
| blockdsp.c | ||
| bswapdsp.c | ||
| checkasm.c | ||
| checkasm.h | ||
| exrdsp.c | ||
| fixed_dsp.c | ||
| flacdsp.c | ||
| float_dsp.c | ||
| fmtconvert.c | ||
| g722dsp.c | ||
| h264dsp.c | ||
| h264pred.c | ||
| h264qpel.c | ||
| hevc_add_res.c | ||
| hevc_idct.c | ||
| hevc_sao.c | ||
| huffyuvdsp.c | ||
| jpeg2000dsp.c | ||
| llviddsp.c | ||
| llviddspenc.c | ||
| Makefile | ||
| opusdsp.c | ||
| pixblockdsp.c | ||
| sbrdsp.c | ||
| sw_rgb.c | ||
| synth_filter.c | ||
| utvideodsp.c | ||
| v210dec.c | ||
| v210enc.c | ||
| vf_blend.c | ||
| vf_colorspace.c | ||
| vf_eq.c | ||
| vf_gblur.c | ||
| vf_hflip.c | ||
| vf_nlmeans.c | ||
| vf_threshold.c | ||
| videodsp.c | ||
| vp8dsp.c | ||
| vp9dsp.c | ||