~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/csky/abiv2/memcpy.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/csky/abiv2/memcpy.S (Architecture i386) and /arch/alpha/abiv2/memcpy.S (Architecture alpha)


  1 /* SPDX-License-Identifier: GPL-2.0 */            
  2 // Copyright (C) 2018 Hangzhou C-SKY Microsyst    
  3                                                   
  4 #include <linux/linkage.h>                        
  5 #include "sysdep.h"                               
  6                                                   
  7 ENTRY(__memcpy)                                   
  8 ENTRY(memcpy)                                     
  9         /* Test if len less than 4 bytes.  */     
 10         mov     r12, r0                           
 11         cmplti  r2, 4                             
 12         bt      .L_copy_by_byte                   
 13                                                   
 14         andi    r13, r0, 3                        
 15         movi    r19, 4                            
 16         /* Test if dest is not 4 bytes aligned    
 17         bnez    r13, .L_dest_not_aligned          
 18                                                   
 19 /* Hardware can handle unaligned access direct    
 20 .L_dest_aligned:                                  
 21         /* If dest is aligned, then copy.  */     
 22         zext    r18, r2, 31, 4                    
 23                                                   
 24         /* Test if len less than 16 bytes.  */    
 25         bez     r18, .L_len_less_16bytes          
 26         movi    r19, 0                            
 27                                                   
 28         LABLE_ALIGN                               
 29 .L_len_larger_16bytes:                            
 30 #if defined(__CK860__)                            
 31         ldw     r3, (r1, 0)                       
 32         stw     r3, (r0, 0)                       
 33         ldw     r3, (r1, 4)                       
 34         stw     r3, (r0, 4)                       
 35         ldw     r3, (r1, 8)                       
 36         stw     r3, (r0, 8)                       
 37         ldw     r3, (r1, 12)                      
 38         addi    r1, 16                            
 39         stw     r3, (r0, 12)                      
 40         addi    r0, 16                            
 41 #else                                             
 42         ldw     r20, (r1, 0)                      
 43         ldw     r21, (r1, 4)                      
 44         ldw     r22, (r1, 8)                      
 45         ldw     r23, (r1, 12)                     
 46         stw     r20, (r0, 0)                      
 47         stw     r21, (r0, 4)                      
 48         stw     r22, (r0, 8)                      
 49         stw     r23, (r0, 12)                     
 50         PRE_BNEZAD (r18)                          
 51         addi    r1, 16                            
 52         addi    r0, 16                            
 53 #endif                                            
 54         BNEZAD (r18, .L_len_larger_16bytes)       
 55                                                   
 56 .L_len_less_16bytes:                              
 57         zext    r18, r2, 3, 2                     
 58         bez     r18, .L_copy_by_byte              
 59 .L_len_less_16bytes_loop:                         
 60         ldw     r3, (r1, 0)                       
 61         PRE_BNEZAD (r18)                          
 62         addi    r1, 4                             
 63         stw     r3, (r0, 0)                       
 64         addi    r0, 4                             
 65         BNEZAD (r18, .L_len_less_16bytes_loop)    
 66                                                   
 67 /* Test if len less than 4 bytes.  */             
 68 .L_copy_by_byte:                                  
 69         zext    r18, r2, 1, 0                     
 70         bez     r18, .L_return                    
 71 .L_copy_by_byte_loop:                             
 72         ldb     r3, (r1, 0)                       
 73         PRE_BNEZAD (r18)                          
 74         addi    r1, 1                             
 75         stb     r3, (r0, 0)                       
 76         addi    r0, 1                             
 77         BNEZAD (r18, .L_copy_by_byte_loop)        
 78                                                   
 79 .L_return:                                        
 80         mov     r0, r12                           
 81         rts                                       
 82                                                   
 83 /*                                                
 84  * If dest is not aligned, just copying some b    
 85  * dest align.                                    
 86  */                                               
 87 .L_dest_not_aligned:                              
 88         sub     r13, r19, r13                     
 89         sub     r2, r13                           
 90                                                   
 91 /* Makes the dest align.  */                      
 92 .L_dest_not_aligned_loop:                         
 93         ldb     r3, (r1, 0)                       
 94         PRE_BNEZAD (r13)                          
 95         addi    r1, 1                             
 96         stb     r3, (r0, 0)                       
 97         addi    r0, 1                             
 98         BNEZAD (r13, .L_dest_not_aligned_loop)    
 99         cmplti  r2, 4                             
100         bt      .L_copy_by_byte                   
101                                                   
102         /* Check whether the src is aligned.      
103         jbr     .L_dest_aligned                   
104 ENDPROC(__memcpy)                                 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php