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