Advertisement
Guest User

Untitled

a guest
Nov 2nd, 2014
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %macro FLAC_DECORRELATE_INDEP_32 2
  2. cglobal flac_decorrelate_indep%1_32, 2, %1+2, %1+2, out, in0, in1, len, in2, in3, in4, in5
  3. %if ARCH_X86_32
  4.     movd      m%2, r4m
  5. %if %1 == 6
  6.     DEFINE_ARGS out, in0, in1, in2, in3, in4, in5
  7.     %define  lend  dword r3m
  8. %else
  9.     mov      lend, lenm
  10. %endif
  11. %elif WIN64
  12.     movd      m%2, r4m
  13. %else ; UNIX64
  14.     movd      m%2, r4d
  15. %endif
  16.  
  17. %assign %%i 1
  18. %rep %1-1
  19.     mov      in %+ %%i %+ q, [in0q+%%i*gprsize]
  20. %assign    %%i %%i+1
  21. %endrep
  22.  
  23.     mov      in0q, [in0q]
  24.     mov      outq, [outq]
  25.  
  26. %assign %%i 1
  27. %rep %1-1
  28.     sub      in %+ %%i %+ q, in0q
  29. %assign    %%i %%i+1
  30. %endrep
  31.  
  32. align 16
  33. .loop:
  34.     mova       m0, [in0q]
  35. %assign %%i 1
  36. %rep %1-1
  37.     mova       m %+ %%i, [in0q+in %+ %%i %+ q]
  38. %assign    %%i %%i+1
  39. %endrep
  40.  
  41. %assign %%i 0
  42. %rep %1
  43.     pslld    m %+ %%i, m%2
  44. %assign    %%i %%i+1
  45. %endrep
  46.  
  47. %if %1 == 6
  48.     SBUTTERFLY dq, 0, 1, 6
  49.     SBUTTERFLY dq, 2, 3, 6
  50.     SBUTTERFLY dq, 4, 5, 6
  51.  
  52.     punpcklqdq m6, m0, m2
  53.     punpckhqdq m2, m4
  54.     shufps     m4, m0, 0xe4
  55.     mova [outq   ], m6
  56.     mova [outq+16], m4
  57.     mova [outq+32], m2
  58.  
  59.     punpcklqdq m6, m1, m3
  60.     punpckhqdq m3, m5
  61.     shufps     m5, m1, 0xe4
  62.     mova [outq+48], m6
  63.     mova [outq+64], m5
  64.     mova [outq+80], m3
  65.    
  66. %else ; %1 == 2 || %1 == 4
  67.  
  68. %if %1 == 4
  69.     TRANSPOSE4x4D 0, 1, 2, 3, 4
  70. %else ; %1 == 2
  71.     SBUTTERFLY dq, 0, 1, 2
  72. %endif
  73.  
  74.     mova [outq         ], m0
  75.     mova [outq+1*mmsize], m1
  76. %if %1 > 2
  77.     mova [outq+2*mmsize], m2
  78.     mova [outq+3*mmsize], m3
  79. %endif
  80.  
  81. %endif ; %1 == 2 || %1 == 4 || %1 == 6
  82.  
  83.     add      in0q, mmsize
  84.     add      outq, mmsize*%1
  85.     sub      lend, mmsize/4
  86.     jg .loop
  87.     REP_RET
  88. %endmacro
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement