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
Unified · Split
| @@ -228,25 +228,22 @@ cglobal ssim_end_line, 3, 3, 7, sum0, sum1, w · 227 unmodified lines | |||
| 228 | 228 | ||
| 229 | ; subpd the ones we added too much | 229 | ; subpd the ones we added too much |
| 230 | test wd, wd | 230 | test wd, wd |
| 231 | jz .end | 231 | jz .end |
| 232 | add wd, 4 | 232 | add wd, 4 |
| 233 | test wd, 3 | 233 | cmp wd, 1 |
| 234 | jz .skip3 | 234 | jz .skip3 |
| 235 | test wd, 2 | 235 | cmp wd, 2 |
| 236 | jz .skip2 | 236 | jz .skip2 |
| 237 | test wd, 1 | 237 | .skip1: ; 3 valid => skip 1 invalid |
| 238 | jz .skip1 | ||
| 239 | .skip3: | ||
| 240 | psrldq m5, 8 | 238 | psrldq m5, 8 |
| 241 | subpd m6, m5 | 239 | subpd m6, m5 |
| 242 | jmp .end | 240 | jmp .end |
| 243 | .skip2: | 241 | .skip2: ; 2 valid => skip 2 invalid |
| 244 | psrldq m5, 8 | ||
| 245 | subpd m6, m5 | 242 | subpd m6, m5 |
| 243 | jmp .end | ||
| 244 | .skip3: ; 1 valid => skip 3 invalid | ||
| 245 | psrldq m3, 8 | ||
| 246 | subpd m0, m3 | 246 | subpd m0, m3 |
| 247 | jmp .end | ||
| 248 | .skip1: | ||
| 249 | psrldq m3, 16 | ||
| 250 | subpd m6, m5 | 247 | subpd m6, m5 |
| 251 | 248 | ||
| 252 | .end: | 249 | .end: |