| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -792,7 +792,11 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%endmacro | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; merge mmx and sse* | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; Merge mmx and sse* | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; m# is a simd regsiter of the currently selected size | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; xm# is the corresponding xmmreg (if selcted xmm or ymm size), or mmreg (if selected mmx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; ym# is the corresponding ymmreg (if selcted xmm or ymm size), or mmreg (if selected mmx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; (All 3 remain in sync through SWAP.) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%macro CAT_XDEFINE 3 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %xdefine %1%2 %3 | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -869,6 +873,26 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			INIT_XMM | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%macro DECLARE_MMCAST 1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define  mmmm%1   mm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define  mmxmm%1  mm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define  mmymm%1  mm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define xmmmm%1   mm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define xmmxmm%1 xmm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define xmmymm%1 xmm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define ymmmm%1   mm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define ymmxmm%1 ymm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define ymmymm%1 ymm%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define xm%1 xmm %+ m%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    %define ym%1 ymm %+ m%1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%endmacro | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%assign i 0 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%rep 16 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DECLARE_MMCAST i | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%assign i i+1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			%endrep | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; I often want to use macros that permute their arguments. e.g. there's no | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; efficient way to implement butterfly or transpose or dct without swapping some | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			; arguments. | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |