Treat the 32 bit stride registers as signed. Alternatively, we could make the stride arguments ptrdiff_t instead of int, and changing all of the assembly to operate on these registers with their full 64 bit width, but that's a much larger and more intrusive change (and risks missing some operation, which would clamp the intermediates to 32 bit still). Fixes: https://trac.ffmpeg.org/ticket/9985
Unified · Split
| @@ -118,8 +118,8 @@ · 117 unmodified lines | |||
| 118 | .endm | 118 | .endm |
| 119 | 119 | ||
| 120 | .macro increment_yuv422p | 120 | .macro increment_yuv422p |
| 121 | add x6, x6, w7, UXTW // srcU += incU | 121 | add x6, x6, w7, SXTW // srcU += incU |
| 122 | add x13, x13, w14, UXTW // srcV += incV | 122 | add x13, x13, w14, SXTW // srcV += incV |
| 123 | .endm | 123 | .endm |
| 124 | 124 | ||
| 125 | .macro compute_rgba r1 g1 b1 a1 r2 g2 b2 a2 | 125 | .macro compute_rgba r1 g1 b1 a1 r2 g2 b2 a2 |
| @@ -189,8 +189,8 @@ function ff_\ifmt\()_to_\ofmt\()_neon, export=1 · 63 unmodified lines | |||
| 189 | st4 {v16.8B,v17.8B,v18.8B,v19.8B}, [x2], #32 | 189 | st4 {v16.8B,v17.8B,v18.8B,v19.8B}, [x2], #32 |
| 190 | subs w8, w8, #16 // width -= 16 | 190 | subs w8, w8, #16 // width -= 16 |
| 191 | b.gt 2b | 191 | b.gt 2b |
| 192 | add x2, x2, w3, UXTW // dst += padding | 192 | add x2, x2, w3, SXTW // dst += padding |
| 193 | add x4, x4, w5, UXTW // srcY += paddingY | 193 | add x4, x4, w5, SXTW // srcY += paddingY |
| 194 | increment_\ifmt | 194 | increment_\ifmt |
| 195 | subs w1, w1, #1 // height -= 1 | 195 | subs w1, w1, #1 // height -= 1 |
| 196 | b.gt 1b | 196 | b.gt 1b |