diff options
author | Anton Mitrofanov <BugMaster@narod.ru> | 2016-04-07 13:09:03 +0300 |
---|---|---|
committer | Henrik Gramner <henrik@gramner.com> | 2016-04-20 19:16:22 +0200 |
commit | e428f3b30cebbc2beafb3ff2972dbf8b47bc4a70 (patch) | |
tree | 5c433d9d583ddb6c22fc6992dada8afeb413c612 /libavutil/x86 | |
parent | 4bd5583acea5d65a2f8fd8fcd5ab7b404af23f45 (diff) | |
download | ffmpeg-e428f3b30cebbc2beafb3ff2972dbf8b47bc4a70.tar.gz |
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`.
Diffstat (limited to 'libavutil/x86')
-rw-r--r-- | libavutil/x86/x86inc.asm | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/libavutil/x86/x86inc.asm b/libavutil/x86/x86inc.asm index 0bcfeb3295..b2e9c60195 100644 --- a/libavutil/x86/x86inc.asm +++ b/libavutil/x86/x86inc.asm @@ -1130,14 +1130,12 @@ INIT_XMM %if __emulate_avx %xdefine __src1 %7 %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 - %ifnnum sizeof%8 + %if %5 && %4 == 0 + %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, ; 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. @@ -1145,6 +1143,13 @@ INIT_XMM %xdefine __src2 %7 %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 MOVQ %6, __src1 %elif %3 |