This commit fixes bug #10495 The code had several bugs related to post-loop compensation code: - test assembly instruction performs bitwise AND operation and generate flags used by jz branch instruction. Wrong test condition leads to incorrect branching - Incorrect compensation code for some branches
Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -228,25 +228,22 @@ cglobal ssim_end_line, 3, 3, 7, sum0, sum1, w · 227 unmodified lines | ||
| 228 | 228 | |
| 229 | 229 | ; subpd the ones we added too much |
| 230 | 230 | test wd, wd |
| 231 | − jz .end | |
| 231 | + jz .end | |
| 232 | 232 | add wd, 4 |
| 233 | − test wd, 3 | |
| 234 | − jz .skip3 | |
| 235 | − test wd, 2 | |
| 236 | − jz .skip2 | |
| 237 | − test wd, 1 | |
| 238 | − jz .skip1 | |
| 239 | −.skip3: | |
| 233 | + cmp wd, 1 | |
| 234 | + jz .skip3 | |
| 235 | + cmp wd, 2 | |
| 236 | + jz .skip2 | |
| 237 | +.skip1: ; 3 valid => skip 1 invalid | |
| 240 | 238 | psrldq m5, 8 |
| 241 | 239 | subpd m6, m5 |
| 242 | − jmp .end | |
| 243 | −.skip2: | |
| 244 | − psrldq m5, 8 | |
| 240 | + jmp .end | |
| 241 | +.skip2: ; 2 valid => skip 2 invalid | |
| 245 | 242 | subpd m6, m5 |
| 243 | + jmp .end | |
| 244 | +.skip3: ; 1 valid => skip 3 invalid | |
| 245 | + psrldq m3, 8 | |
| 246 | 246 | subpd m0, m3 |
| 247 | − jmp .end | |
| 248 | −.skip1: | |
| 249 | − psrldq m3, 16 | |
| 250 | 247 | subpd m6, m5 |
| 251 | 248 | |
| 252 | 249 | .end: |