.code 32
	.fpu neon
	.align 4
	.globl	ImgRGBA2YUV420SP_neon
ImgRGBA2YUV420SP_neon:
    stmfd                       sp!, {r4-r11,lr}  
 
	LDR				r4, [r2, #4]
	LDR				lr, [r2]
	mov				r2, lr
	
	mul				r6, r2, r3							

	LDR				r7, [r1, #4]
	LDR				lr, [r1]
	mov				r1, lr
							
	mov				lr, r4, lsl #2							
	mov       r8, r2, lsl #2	
	mov       r11, r4, lsl #3	
	sub				r6, r11, r8
			
	add				r9, lr, r0
	add				r10,r2, r1	
	mov				r11, #32						
	
								
       
  mov				r5, #66	                     
	vdup.8		d0, r5                                
	                                                 
	mov			r5, #129	                       
	vdup.8		d1, r5                                
                                                   
	mov			r5, #25	                       
	vdup.8		d2, r5                                
                                                   
	mov			r5, #38	                        
	vdup.8		d3, r5                                
                                                   
	mov			r5, #74	                       
	vdup.8		d4, r5                                
                                                   
	mov			r5, #112	                               
	vdup.8		d5, r5                                
                                                   
	mov			r5, #94	                      
	vdup.8		d6, r5                                
                                                   
	mov			r5, #18	                        
	vdup.8		d7, r5                                
                                                   
	mov			r5, #16	                      
	vdup.8		d30, r5                                
                                                   
	mov			r5, #128                     
	vdup.8		d31, r5             						               
                                    
  mov       r5, r2, lsr #3					
  
loop_row:
loop_col:  
  
  subs            r5, r5, #1               
        vld4.u8         {d8,d9,d10,d11}, [r0], r11		
        vld4.u8         {d12,d13,d14,d15}, [r9], r11	

        PLD				[r0,#64]  
        PLD				[r9,#64]   
                                                   
		vmull.u8		q8,	d10,	d0   								
		vmlal.u8		q8,	d9,	d1                   
		vmlal.u8		q8,	d8,	d2 
		
		vmull.u8		q9,	d8,	d5                   
		vmlsl.u8		q9,	d9,	d4 
		vmlsl.u8		q9, d10, d3
		
		vmull.u8		q10,	d10,	d5                   
		vmlsl.u8		q10,	d9,	d6                   
		vmlsl.u8		q10,	d8,	d7                   
		
		vrshrn.i16    d8, q8, #8										
    vrshrn.i16    d9, q9, #8 									
    vrshrn.i16    d10, q10, #8 									
     
    
    vadd.i8				d27,	d8, d30  								
    vadd.i8				d28,	d9, d31									
    vadd.i8				d29,	d10, d31									
    
    
    vmull.u8		q8,	d14,	d0   							
		vmlal.u8		q8,	d13,	d1                   
		vmlal.u8		q8,	d12,	d2   
		
		vmull.u8		q9,	d12, d5                  
		vmlsl.u8		q9,	d13, d4  
		vmlsl.u8		q9, d14,  d3
		
		vmull.u8		q10,	d14,	d5                  
		vmlsl.u8		q10,	d13,	d6                    
		vmlsl.u8		q10,	d12,	d7                    
		
		vrshrn.i16    d8, q8,  #8
    vrshrn.i16    d9, q9,  #8 
    vrshrn.i16    d10, q10, #8 
     
    
    vadd.i8				d24,	d8, d30   									
    vadd.i8				d25,	d9, d31											
    vadd.i8				d26,	d10, d31										
    
    vaddl.u8				q4, d28, d25										
    vaddl.u8				q5, d29, d26										
    
    vpaddl.u16			q6, q4
    vpaddl.u16      q7, q5									
    
    vrshrn.i32			d8, q6, #2										
    vrshrn.i32			d9, q7,#2		
    
    vshl.i16				d10, d9, #8
    vadd.i16        d11, d8, d10
    										
                     
                                                
		vst1.8			{d27},[r1]!											
		vst1.8			{d24}, [r10]!											
		
		vst1.8			{d11},[r7]!											
												
			  		    
	 bgt         loop_col
        
   subs        r3, r3, #2 
   mov         r5, r2, lsr #3
   add				 r0, r0, r6													
   add				 r9, r9, r6
   mov				 r1, r10
   add				 r10,r10,r2											
      
   bgt             loop_row                
        
   ldmfd                       sp!, {r4-r11,lr}    
   bx              lr                              
                                                   
		.end
		.end

