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

TOMOYO Linux Cross Reference
Linux/arch/csky/abiv2/memset.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/memset.S (Version linux-6.12-rc7) and /arch/i386/abiv2/memset.S (Version linux-6.0.19)


  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         .weak memset                              
  8 ENTRY(__memset)                                   
  9 ENTRY(memset)                                     
 10         /* Test if len less than 4 bytes.  */     
 11         mov     r12, r0                           
 12         cmplti  r2, 8                             
 13         bt      .L_set_by_byte                    
 14                                                   
 15         andi    r13, r0, 3                        
 16         movi    r19, 4                            
 17         /* Test if dest is not 4 bytes aligned    
 18         bnez    r13, .L_dest_not_aligned          
 19         /* Hardware can handle unaligned acces    
 20 .L_dest_aligned:                                  
 21         zextb   r3, r1                            
 22         lsli    r1, 8                             
 23         or      r1, r3                            
 24         lsli    r3, r1, 16                        
 25         or      r3, r1                            
 26                                                   
 27         /* If dest is aligned, then copy.  */     
 28         zext    r18, r2, 31, 4                    
 29         /* Test if len less than 16 bytes.  */    
 30         bez     r18, .L_len_less_16bytes          
 31                                                   
 32         LABLE_ALIGN                               
 33 .L_len_larger_16bytes:                            
 34         stw     r3, (r0, 0)                       
 35         stw     r3, (r0, 4)                       
 36         stw     r3, (r0, 8)                       
 37         stw     r3, (r0, 12)                      
 38         PRE_BNEZAD (r18)                          
 39         addi    r0, 16                            
 40         BNEZAD (r18, .L_len_larger_16bytes)       
 41                                                   
 42 .L_len_less_16bytes:                              
 43         zext    r18, r2, 3, 2                     
 44         andi    r2, 3                             
 45         bez     r18, .L_set_by_byte               
 46 .L_len_less_16bytes_loop:                         
 47         stw     r3, (r0, 0)                       
 48         PRE_BNEZAD (r18)                          
 49         addi    r0, 4                             
 50         BNEZAD (r18, .L_len_less_16bytes_loop)    
 51                                                   
 52         /* Test if len less than 4 bytes.  */     
 53 .L_set_by_byte:                                   
 54         zext    r18, r2, 2, 0                     
 55         bez     r18, .L_return                    
 56 .L_set_by_byte_loop:                              
 57         stb     r1, (r0, 0)                       
 58         PRE_BNEZAD (r18)                          
 59         addi    r0, 1                             
 60         BNEZAD (r18, .L_set_by_byte_loop)         
 61                                                   
 62 .L_return:                                        
 63         mov     r0, r12                           
 64         rts                                       
 65                                                   
 66         /* If dest is not aligned, just set so    
 67            align.  */                             
 68                                                   
 69 .L_dest_not_aligned:                              
 70         sub     r13, r19, r13                     
 71         sub     r2, r13                           
 72 .L_dest_not_aligned_loop:                         
 73         /* Makes the dest align.  */              
 74         stb     r1, (r0, 0)                       
 75         PRE_BNEZAD (r13)                          
 76         addi    r0, 1                             
 77         BNEZAD (r13, .L_dest_not_aligned_loop)    
 78         cmplti  r2, 8                             
 79         bt      .L_set_by_byte                    
 80         /* Check whether the src is aligned.      
 81         jbr     .L_dest_aligned                   
 82 ENDPROC(memset)                                   
 83 ENDPROC(__memset)                                 
                                                      

~ [ 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