Originally committed as revision 24406 to svn://svn.ffmpeg.org/ffmpeg/trunk
Unified · Split
| @@ -271,13 +271,21 @@ DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 56] · 270 unmodified lines | ||
| 271 | 271 | ASSERT %2 >= %1 |
| 272 | 272 | %assign regs_used %2 |
| 273 | 273 | ASSERT regs_used <= 7 |
| 274 | − %assign xmm_regs_used %3 | |
| 275 | − ASSERT xmm_regs_used <= 16 | |
| 276 | 274 | %if regs_used > 4 |
| 277 | 275 | push r4 |
| 278 | 276 | push r5 |
| 279 | 277 | %assign stack_offset stack_offset+16 |
| 280 | 278 | %endif |
| 279 | + WIN64_SPILL_XMM %3 | |
| 280 | + LOAD_IF_USED 4, %1 | |
| 281 | + LOAD_IF_USED 5, %1 | |
| 282 | + LOAD_IF_USED 6, %1 | |
| 283 | + DEFINE_ARGS %4 | |
| 284 | +%endmacro | |
| 285 | + | |
| 286 | +%macro WIN64_SPILL_XMM 1 | |
| 287 | + %assign xmm_regs_used %1 | |
| 288 | + ASSERT xmm_regs_used <= 16 | |
| 281 | 289 | %if xmm_regs_used > 6 |
| 282 | 290 | sub rsp, (xmm_regs_used-6)*16+16 |
| 283 | 291 | %assign stack_offset stack_offset+(xmm_regs_used-6)*16+16 |
| @@ -287,13 +295,9 @@ DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 56] · 3 unmodified lines | ||
| 287 | 295 | movdqa [rsp + (%%i-6)*16+8], xmm %+ %%i |
| 288 | 296 | %endrep |
| 289 | 297 | %endif |
| 290 | − LOAD_IF_USED 4, %1 | |
| 291 | − LOAD_IF_USED 5, %1 | |
| 292 | − LOAD_IF_USED 6, %1 | |
| 293 | − DEFINE_ARGS %4 | |
| 294 | 298 | %endmacro |
| 295 | 299 | |
| 296 | −%macro RESTORE_XMM_INTERNAL 1 | |
| 300 | +%macro WIN64_RESTORE_XMM_INTERNAL 1 | |
| 297 | 301 | %if xmm_regs_used > 6 |
| 298 | 302 | %assign %%i xmm_regs_used |
| 299 | 303 | %rep (xmm_regs_used-6) |
| @@ -304,14 +308,14 @@ DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 56] · 4 unmodified lines | ||
| 304 | 308 | %endif |
| 305 | 309 | %endmacro |
| 306 | 310 | |
| 307 | −%macro RESTORE_XMM 1 | |
| 308 | − RESTORE_XMM_INTERNAL %1 | |
| 311 | +%macro WIN64_RESTORE_XMM 1 | |
| 312 | + WIN64_RESTORE_XMM_INTERNAL %1 | |
| 309 | 313 | %assign stack_offset stack_offset-(xmm_regs_used-6)*16+16 |
| 310 | 314 | %assign xmm_regs_used 0 |
| 311 | 315 | %endmacro |
| 312 | 316 | |
| 313 | 317 | %macro RET 0 |
| 314 | − RESTORE_XMM_INTERNAL rsp | |
| 318 | + WIN64_RESTORE_XMM_INTERNAL rsp | |
| 315 | 319 | %if regs_used > 4 |
| 316 | 320 | pop r5 |
| 317 | 321 | pop r4 |
| @@ -428,6 +432,13 @@ DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28] · 110 unmodified lines | ||
| 428 | 432 | |
| 429 | 433 | %endif ;====================================================================== |
| 430 | 434 | |
| 435 | +%ifndef WIN64 | |
| 436 | +%macro WIN64_SPILL_XMM 1 | |
| 437 | +%endmacro | |
| 438 | +%macro WIN64_RESTORE_XMM 1 | |
| 439 | +%endmacro | |
| 440 | +%endif | |
| 441 | + | |
| 431 | 442 | |
| 432 | 443 | |
| 433 | 444 | ;============================================================================= |
| @@ -494,7 +505,7 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits · 60 unmodified lines | ||
| 494 | 505 | %define mova movq |
| 495 | 506 | %define movu movq |
| 496 | 507 | %define movh movd |
| 497 | − %define movnt movntq | |
| 508 | + %define movnta movntq | |
| 498 | 509 | %assign %%i 0 |
| 499 | 510 | %rep 8 |
| 500 | 511 | CAT_XDEFINE m, %%i, mm %+ %%i |
| @@ -518,7 +529,7 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits · 17 unmodified lines | ||
| 518 | 529 | %define mova movdqa |
| 519 | 530 | %define movu movdqu |
| 520 | 531 | %define movh movq |
| 521 | − %define movnt movntdq | |
| 532 | + %define movnta movntdq | |
| 522 | 533 | %assign %%i 0 |
| 523 | 534 | %rep num_mmregs |
| 524 | 535 | CAT_XDEFINE m, %%i, xmm %+ %%i |