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
Showing the changes to libavcodec/ppc (1 of 1 file). Show all
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 | 41 | register vector unsigned char pixelsv1D; |
| 42 | 42 | |
| 43 | 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 | 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 | 48 | // hand-unrolling the loop by 4 gains about 15% |
| 49 | 49 | // mininum execution time goes from 74 to 60 cycles |