It is UB and affected e.g. the vp5 and vp61 FATE tests: https://fate.ffmpeg.org/report.cgi?time=20240327083327&slot=ppc-linux-gcc-13.2-ubsan-altivec-qemu
Unified · Split
| @@ -41,9 +41,9 @@ void ff_put_pixels16_altivec(uint8_t *block, const uint8_t *pixels, ptrdiff_t li · 40 unmodified lines | |||
| 41 | register vector unsigned char pixelsv1D; | 41 | register vector unsigned char pixelsv1D; |
| 42 | 42 | ||
| 43 | int i; | 43 | int i; |
| 44 | register ptrdiff_t line_size_2 = line_size << 1; | 44 | register ptrdiff_t line_size_2 = line_size * (1 << 1); |
| 45 | register ptrdiff_t line_size_3 = line_size + line_size_2; | 45 | register ptrdiff_t line_size_3 = line_size + line_size_2; |
| 46 | register ptrdiff_t line_size_4 = line_size << 2; | 46 | register ptrdiff_t line_size_4 = line_size * (1 << 2); |
| 47 | 47 | ||
| 48 | // hand-unrolling the loop by 4 gains about 15% | 48 | // hand-unrolling the loop by 4 gains about 15% |
| 49 | // mininum execution time goes from 74 to 60 cycles | 49 | // mininum execution time goes from 74 to 60 cycles |