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 | ASSERT %2 >= %1 | 271 | ASSERT %2 >= %1 |
| 272 | %assign regs_used %2 | 272 | %assign regs_used %2 |
| 273 | ASSERT regs_used <= 7 | 273 | ASSERT regs_used <= 7 |
| 274 | %assign xmm_regs_used %3 | ||
| 275 | ASSERT xmm_regs_used <= 16 | ||
| 276 | %if regs_used > 4 | 274 | %if regs_used > 4 |
| 277 | push r4 | 275 | push r4 |
| 278 | push r5 | 276 | push r5 |
| 279 | %assign stack_offset stack_offset+16 | 277 | %assign stack_offset stack_offset+16 |
| 280 | %endif | 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 | %if xmm_regs_used > 6 | 289 | %if xmm_regs_used > 6 |
| 282 | sub rsp, (xmm_regs_used-6)*16+16 | 290 | sub rsp, (xmm_regs_used-6)*16+16 |
| 283 | %assign stack_offset stack_offset+(xmm_regs_used-6)*16+16 | 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 | movdqa [rsp + (%%i-6)*16+8], xmm %+ %%i | 295 | movdqa [rsp + (%%i-6)*16+8], xmm %+ %%i |
| 288 | %endrep | 296 | %endrep |
| 289 | %endif | 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 | %endmacro | 298 | %endmacro |
| 295 | 299 | ||
| 296 | %macro RESTORE_XMM_INTERNAL 1 | 300 | %macro WIN64_RESTORE_XMM_INTERNAL 1 |
| 297 | %if xmm_regs_used > 6 | 301 | %if xmm_regs_used > 6 |
| 298 | %assign %%i xmm_regs_used | 302 | %assign %%i xmm_regs_used |
| 299 | %rep (xmm_regs_used-6) | 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 | %endif | 308 | %endif |
| 305 | %endmacro | 309 | %endmacro |
| 306 | 310 | ||
| 307 | %macro RESTORE_XMM 1 | 311 | %macro WIN64_RESTORE_XMM 1 |
| 308 | RESTORE_XMM_INTERNAL %1 | 312 | WIN64_RESTORE_XMM_INTERNAL %1 |
| 309 | %assign stack_offset stack_offset-(xmm_regs_used-6)*16+16 | 313 | %assign stack_offset stack_offset-(xmm_regs_used-6)*16+16 |
| 310 | %assign xmm_regs_used 0 | 314 | %assign xmm_regs_used 0 |
| 311 | %endmacro | 315 | %endmacro |
| 312 | 316 | ||
| 313 | %macro RET 0 | 317 | %macro RET 0 |
| 314 | RESTORE_XMM_INTERNAL rsp | 318 | WIN64_RESTORE_XMM_INTERNAL rsp |
| 315 | %if regs_used > 4 | 319 | %if regs_used > 4 |
| 316 | pop r5 | 320 | pop r5 |
| 317 | pop r4 | 321 | pop r4 |
| @@ -428,6 +432,13 @@ DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28] · 110 unmodified lines | |||
| 428 | 432 | ||
| 429 | %endif ;====================================================================== | 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 | %define mova movq | 505 | %define mova movq |
| 495 | %define movu movq | 506 | %define movu movq |
| 496 | %define movh movd | 507 | %define movh movd |
| 497 | %define movnt movntq | 508 | %define movnta movntq |
| 498 | %assign %%i 0 | 509 | %assign %%i 0 |
| 499 | %rep 8 | 510 | %rep 8 |
| 500 | CAT_XDEFINE m, %%i, mm %+ %%i | 511 | CAT_XDEFINE m, %%i, mm %+ %%i |
| @@ -518,7 +529,7 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits · 17 unmodified lines | |||
| 518 | %define mova movdqa | 529 | %define mova movdqa |
| 519 | %define movu movdqu | 530 | %define movu movdqu |
| 520 | %define movh movq | 531 | %define movh movq |
| 521 | %define movnt movntdq | 532 | %define movnta movntdq |
| 522 | %assign %%i 0 | 533 | %assign %%i 0 |
| 523 | %rep num_mmregs | 534 | %rep num_mmregs |
| 524 | CAT_XDEFINE m, %%i, xmm %+ %%i | 535 | CAT_XDEFINE m, %%i, xmm %+ %%i |