Mercurial > libavcodec.hg
comparison x86/x86inc.asm @ 12212:bc13f76ecfbf libavcodec
sync yasm macros from x264
author | lorenm |
---|---|
date | Wed, 21 Jul 2010 22:45:16 +0000 |
parents | 980030a3e315 |
children |
comparison
equal
deleted
inserted
replaced
12211:5fbc541988f7 | 12212:bc13f76ecfbf |
---|---|
269 | 269 |
270 %macro PROLOGUE 2-4+ 0 ; #args, #regs, #xmm_regs, arg_names... | 270 %macro PROLOGUE 2-4+ 0 ; #args, #regs, #xmm_regs, arg_names... |
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 |
284 %assign %%i xmm_regs_used | 292 %assign %%i xmm_regs_used |
285 %rep (xmm_regs_used-6) | 293 %rep (xmm_regs_used-6) |
286 %assign %%i %%i-1 | 294 %assign %%i %%i-1 |
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 | 298 %endmacro |
291 LOAD_IF_USED 5, %1 | 299 |
292 LOAD_IF_USED 6, %1 | 300 %macro WIN64_RESTORE_XMM_INTERNAL 1 |
293 DEFINE_ARGS %4 | |
294 %endmacro | |
295 | |
296 %macro 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) |
300 %assign %%i %%i-1 | 304 %assign %%i %%i-1 |
301 movdqa xmm %+ %%i, [%1 + (%%i-6)*16+8] | 305 movdqa xmm %+ %%i, [%1 + (%%i-6)*16+8] |
302 %endrep | 306 %endrep |
303 add %1, (xmm_regs_used-6)*16+16 | 307 add %1, (xmm_regs_used-6)*16+16 |
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 |
318 %endif | 322 %endif |
319 ret | 323 ret |
426 %endif | 430 %endif |
427 %endmacro | 431 %endmacro |
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 ;============================================================================= |
434 ; arch-independent part | 445 ; arch-independent part |
435 ;============================================================================= | 446 ;============================================================================= |
492 %define mmsize 8 | 503 %define mmsize 8 |
493 %define num_mmregs 8 | 504 %define num_mmregs 8 |
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 |
501 CAT_XDEFINE nmm, %%i, %%i | 512 CAT_XDEFINE nmm, %%i, %%i |
502 %assign %%i %%i+1 | 513 %assign %%i %%i+1 |
516 %define num_mmregs 16 | 527 %define num_mmregs 16 |
517 %endif | 528 %endif |
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 |
525 CAT_XDEFINE nxmm, %%i, %%i | 536 CAT_XDEFINE nxmm, %%i, %%i |
526 %assign %%i %%i+1 | 537 %assign %%i %%i+1 |