# HG changeset patch # User lorenm # Date 1279752316 0 # Node ID bc13f76ecfbf5adbc51ca722ff13b97747f7f6e9 # Parent 5fbc541988f7041edd1e0968908651d111c1cf9f sync yasm macros from x264 diff -r 5fbc541988f7 -r bc13f76ecfbf x86/x86inc.asm --- a/x86/x86inc.asm Wed Jul 21 22:41:37 2010 +0000 +++ b/x86/x86inc.asm Wed Jul 21 22:45:16 2010 +0000 @@ -271,13 +271,21 @@ ASSERT %2 >= %1 %assign regs_used %2 ASSERT regs_used <= 7 - %assign xmm_regs_used %3 - ASSERT xmm_regs_used <= 16 %if regs_used > 4 push r4 push r5 %assign stack_offset stack_offset+16 %endif + WIN64_SPILL_XMM %3 + LOAD_IF_USED 4, %1 + LOAD_IF_USED 5, %1 + LOAD_IF_USED 6, %1 + DEFINE_ARGS %4 +%endmacro + +%macro WIN64_SPILL_XMM 1 + %assign xmm_regs_used %1 + ASSERT xmm_regs_used <= 16 %if xmm_regs_used > 6 sub rsp, (xmm_regs_used-6)*16+16 %assign stack_offset stack_offset+(xmm_regs_used-6)*16+16 @@ -287,13 +295,9 @@ movdqa [rsp + (%%i-6)*16+8], xmm %+ %%i %endrep %endif - LOAD_IF_USED 4, %1 - LOAD_IF_USED 5, %1 - LOAD_IF_USED 6, %1 - DEFINE_ARGS %4 %endmacro -%macro RESTORE_XMM_INTERNAL 1 +%macro WIN64_RESTORE_XMM_INTERNAL 1 %if xmm_regs_used > 6 %assign %%i xmm_regs_used %rep (xmm_regs_used-6) @@ -304,14 +308,14 @@ %endif %endmacro -%macro RESTORE_XMM 1 - RESTORE_XMM_INTERNAL %1 +%macro WIN64_RESTORE_XMM 1 + WIN64_RESTORE_XMM_INTERNAL %1 %assign stack_offset stack_offset-(xmm_regs_used-6)*16+16 %assign xmm_regs_used 0 %endmacro %macro RET 0 - RESTORE_XMM_INTERNAL rsp + WIN64_RESTORE_XMM_INTERNAL rsp %if regs_used > 4 pop r5 pop r4 @@ -428,6 +432,13 @@ %endif ;====================================================================== +%ifndef WIN64 +%macro WIN64_SPILL_XMM 1 +%endmacro +%macro WIN64_RESTORE_XMM 1 +%endmacro +%endif + ;============================================================================= @@ -494,7 +505,7 @@ %define mova movq %define movu movq %define movh movd - %define movnt movntq + %define movnta movntq %assign %%i 0 %rep 8 CAT_XDEFINE m, %%i, mm %+ %%i @@ -518,7 +529,7 @@ %define mova movdqa %define movu movdqu %define movh movq - %define movnt movntdq + %define movnta movntdq %assign %%i 0 %rep num_mmregs CAT_XDEFINE m, %%i, xmm %+ %%i