History

lavc/x86/hevc_add_res: Fix overflow in ADD_RES_MMX_4_8

Fix overflow for coeff -32768 in function ADD_RES_MMX_4_8 with no performance drop. ./checkasm --test=hevc_add_res --bench Mainline: - hevc_add_res.add_residual [OK] hevc_add_res_4x4_8_mmxext: 15.5 Add overflow test case: - hevc_add_res.add_residual [FAILED] After: - hevc_add_res.add_residual [OK] hevc_add_res_4x4_8_mmxext: 15.0

Linjie Fu committed 6 years ago

Commit 0da14ed1 parent 091341f1 file · +11 −12Browse files

Unified · Split

libavcodec/x86/hevc_add_res.asm+11−12
@@ -30,27 +30,26 @@ cextern pw_1023 · 29 unmodified lines
30%macro ADD_RES_MMX_4_8 030%macro ADD_RES_MMX_4_8 0
31 mova m0, [r1]31 mova m0, [r1]
32 mova m2, [r1+8]32 mova m2, [r1+8]
33 pxor m1, m1
34 pxor m3, m3
35 psubw m1, m0
36 psubw m3, m2
37 packuswb m0, m2
38 packuswb m1, m3
39 33
40 movd m2, [r0]34 movd m1, [r0]
41 movd m3, [r0+r2]35 movd m3, [r0+r2]
42 punpckldq m2, m336 punpcklbw m1, m4
43 paddusb m0, m237 punpcklbw m3, m4
44 psubusb m0, m138
39 paddsw m0, m1
40 paddsw m2, m3
41 packuswb m0, m4
42 packuswb m2, m4
43
45 movd [r0], m044 movd [r0], m0
46 psrlq m0, 3245 movd [r0+r2], m2
47 movd [r0+r2], m0
48%endmacro46%endmacro
49 47
50 48
51INIT_MMX mmxext49INIT_MMX mmxext
52; void ff_hevc_add_residual_4_8_mmxext(uint8_t *dst, int16_t *res, ptrdiff_t stride)50; void ff_hevc_add_residual_4_8_mmxext(uint8_t *dst, int16_t *res, ptrdiff_t stride)
53cglobal hevc_add_residual_4_8, 3, 3, 651cglobal hevc_add_residual_4_8, 3, 3, 6
52 pxor m4, m4
54 ADD_RES_MMX_4_853 ADD_RES_MMX_4_8
55 add r1, 1654 add r1, 16
56 lea r0, [r0+r2*2]55 lea r0, [r0+r2*2]

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t