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

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


  1 /*                                                
  2  *  arch/xtensa/lib/memset.S                      
  3  *                                                
  4  *  ANSI C standard library function memset       
  5  *  (Well, almost.  .fixup code might return z    
  6  *                                                
  7  *  This file is subject to the terms and cond    
  8  *  Public License.  See the file "COPYING" in    
  9  *  this archive for more details.                
 10  *                                                
 11  *  Copyright (C) 2002 Tensilica Inc.             
 12  */                                               
 13                                                   
 14 #include <linux/linkage.h>                        
 15 #include <asm/asmmacro.h>                         
 16 #include <asm/core.h>                             
 17                                                   
 18 /*                                                
 19  * void *memset(void *dst, int c, size_t lengt    
 20  *                                                
 21  * The algorithm is as follows:                   
 22  *   Create a word with c in all byte position    
 23  *   If the destination is aligned,               
 24  *     do 16B chucks with a loop, and then fin    
 25  *     8B, 4B, 2B, and 1B stores conditional o    
 26  *   If destination is unaligned, align it by     
 27  *     setting 1B and 2B and then go to aligne    
 28  *   This code tries to use fall-through branc    
 29  *     case of an aligned destination (except     
 30  *     the alignment labels).                     
 31  */                                               
 32                                                   
 33 .text                                             
 34 ENTRY(__memset)                                   
 35 WEAK(memset)                                      
 36                                                   
 37         abi_entry_default                         
 38         # a2/ dst, a3/ c, a4/ length              
 39         extui   a3, a3, 0, 8    # mask to just    
 40         slli    a7, a3, 8       # duplicate ch    
 41         or      a3, a3, a7      # ...             
 42         slli    a7, a3, 16      # ...             
 43         or      a3, a3, a7      # ...             
 44         mov     a5, a2          # copy dst so     
 45         movi    a6, 3           # for alignmen    
 46         bany    a2, a6, .Ldstunaligned # if ds    
 47 .L0:    # return here from .Ldstunaligned when    
 48         srli    a7, a4, 4       # number of lo    
 49                                 # per iteratio    
 50         bnez    a4, .Laligned                     
 51         abi_ret_default                           
 52                                                   
 53 /*                                                
 54  * Destination is word-aligned.                   
 55  */                                               
 56         # set 16 bytes per iteration for word-    
 57         .align  4               # 1 mod 4 alig    
 58         .byte   0               # (0 mod 4 ali    
 59 .Laligned:                                        
 60 #if XCHAL_HAVE_LOOPS                              
 61         loopnez a7, .Loop1done                    
 62 #else /* !XCHAL_HAVE_LOOPS */                     
 63         beqz    a7, .Loop1done                    
 64         slli    a6, a7, 4                         
 65         add     a6, a6, a5      # a6 = end of     
 66 #endif /* !XCHAL_HAVE_LOOPS */                    
 67 .Loop1:                                           
 68 EX(10f) s32i    a3, a5,  0                        
 69 EX(10f) s32i    a3, a5,  4                        
 70 EX(10f) s32i    a3, a5,  8                        
 71 EX(10f) s32i    a3, a5, 12                        
 72         addi    a5, a5, 16                        
 73 #if !XCHAL_HAVE_LOOPS                             
 74         blt     a5, a6, .Loop1                    
 75 #endif /* !XCHAL_HAVE_LOOPS */                    
 76 .Loop1done:                                       
 77         bbci.l  a4, 3, .L2                        
 78         # set 8 bytes                             
 79 EX(10f) s32i    a3, a5,  0                        
 80 EX(10f) s32i    a3, a5,  4                        
 81         addi    a5, a5,  8                        
 82 .L2:                                              
 83         bbci.l  a4, 2, .L3                        
 84         # set 4 bytes                             
 85 EX(10f) s32i    a3, a5,  0                        
 86         addi    a5, a5,  4                        
 87 .L3:                                              
 88         bbci.l  a4, 1, .L4                        
 89         # set 2 bytes                             
 90 EX(10f) s16i    a3, a5,  0                        
 91         addi    a5, a5,  2                        
 92 .L4:                                              
 93         bbci.l  a4, 0, .L5                        
 94         # set 1 byte                              
 95 EX(10f) s8i     a3, a5,  0                        
 96 .L5:                                              
 97 .Lret1:                                           
 98         abi_ret_default                           
 99                                                   
100 /*                                                
101  * Destination is unaligned                       
102  */                                               
103                                                   
104 .Ldstunaligned:                                   
105         bltui   a4, 8, .Lbyteset        # do s    
106         bbci.l  a5, 0, .L20             # bran    
107         # dst is only byte aligned                
108         # set 1 byte                              
109 EX(10f) s8i     a3, a5,  0                        
110         addi    a5, a5,  1                        
111         addi    a4, a4, -1                        
112         # now retest if dst aligned               
113         bbci.l  a5, 1, .L0      # if now align    
114 .L20:                                             
115         # dst half-aligned                        
116         # set 2 bytes                             
117 EX(10f) s16i    a3, a5,  0                        
118         addi    a5, a5,  2                        
119         addi    a4, a4, -2                        
120         j       .L0             # dst is now a    
121                                                   
122 /*                                                
123  * Byte by byte set                               
124  */                                               
125         .align  4                                 
126         .byte   0               # 1 mod 4 alig    
127                                 # (0 mod 4 ali    
128 .Lbyteset:                                        
129 #if XCHAL_HAVE_LOOPS                              
130         loopnez a4, .Lbytesetdone                 
131 #else /* !XCHAL_HAVE_LOOPS */                     
132         beqz    a4, .Lbytesetdone                 
133         add     a6, a5, a4      # a6 = ending     
134 #endif /* !XCHAL_HAVE_LOOPS */                    
135 .Lbyteloop:                                       
136 EX(10f) s8i     a3, a5, 0                         
137         addi    a5, a5, 1                         
138 #if !XCHAL_HAVE_LOOPS                             
139         blt     a5, a6, .Lbyteloop                
140 #endif /* !XCHAL_HAVE_LOOPS */                    
141 .Lbytesetdone:                                    
142         abi_ret_default                           
143                                                   
144 ENDPROC(__memset)                                 
145 EXPORT_SYMBOL(__memset)                           
146 EXPORT_SYMBOL(memset)                             
147                                                   
148         .section .fixup, "ax"                     
149         .align  4                                 
150                                                   
151 /* We return zero if a failure occurred. */       
152                                                   
153 10:                                               
154         movi    a2, 0                             
155         abi_ret_default                           
                                                      

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