mirror of https://git.ffmpeg.org/ffmpeg.git
x86inc: Enable AVX emulation in additional cases
Allows emulation to work when dst is equal to src2 as long as the instruction is commutative, e.g. `addps m0, m1, m0`.
This commit is contained in:
parent
4bd5583ace
commit
e428f3b30c
|
@ -1130,14 +1130,12 @@ INIT_XMM
|
||||||
%if __emulate_avx
|
%if __emulate_avx
|
||||||
%xdefine __src1 %7
|
%xdefine __src1 %7
|
||||||
%xdefine __src2 %8
|
%xdefine __src2 %8
|
||||||
%ifnidn %6, %7
|
|
||||||
%if %0 >= 9
|
|
||||||
CHECK_AVX_INSTR_EMU {%1 %6, %7, %8, %9}, %6, %8, %9
|
|
||||||
%else
|
|
||||||
CHECK_AVX_INSTR_EMU {%1 %6, %7, %8}, %6, %8
|
|
||||||
%endif
|
|
||||||
%if %5 && %4 == 0
|
%if %5 && %4 == 0
|
||||||
%ifnnum sizeof%8
|
%ifnidn %6, %7
|
||||||
|
%ifidn %6, %8
|
||||||
|
%xdefine __src1 %8
|
||||||
|
%xdefine __src2 %7
|
||||||
|
%elifnnum sizeof%8
|
||||||
; 3-operand AVX instructions with a memory arg can only have it in src2,
|
; 3-operand AVX instructions with a memory arg can only have it in src2,
|
||||||
; whereas SSE emulation prefers to have it in src1 (i.e. the mov).
|
; whereas SSE emulation prefers to have it in src1 (i.e. the mov).
|
||||||
; So, if the instruction is commutative with a memory arg, swap them.
|
; So, if the instruction is commutative with a memory arg, swap them.
|
||||||
|
@ -1145,6 +1143,13 @@ INIT_XMM
|
||||||
%xdefine __src2 %7
|
%xdefine __src2 %7
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
%endif
|
||||||
|
%ifnidn %6, __src1
|
||||||
|
%if %0 >= 9
|
||||||
|
CHECK_AVX_INSTR_EMU {%1 %6, %7, %8, %9}, %6, __src2, %9
|
||||||
|
%else
|
||||||
|
CHECK_AVX_INSTR_EMU {%1 %6, %7, %8}, %6, __src2
|
||||||
|
%endif
|
||||||
%if __sizeofreg == 8
|
%if __sizeofreg == 8
|
||||||
MOVQ %6, __src1
|
MOVQ %6, __src1
|
||||||
%elif %3
|
%elif %3
|
||||||
|
|
Loading…
Reference in New Issue