Commit e428f3b3 authored by Anton Mitrofanov's avatar Anton Mitrofanov Committed by Henrik Gramner

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`.
parent 4bd5583a
...@@ -1130,14 +1130,12 @@ INIT_XMM ...@@ -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 ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment