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

TOMOYO Linux Cross Reference
Linux/arch/arm/lib/io-writesb.S

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  *  linux/arch/arm/lib/io-writesb.S
  4  *
  5  *  Copyright (C) 1995-2000 Russell King
  6  */
  7 #include <linux/linkage.h>
  8 #include <asm/assembler.h>
  9 
 10                 .macro  outword, rd
 11 #ifndef __ARMEB__
 12                 strb    \rd, [r0]
 13                 mov     \rd, \rd, lsr #8
 14                 strb    \rd, [r0]
 15                 mov     \rd, \rd, lsr #8
 16                 strb    \rd, [r0]
 17                 mov     \rd, \rd, lsr #8
 18                 strb    \rd, [r0]
 19 #else
 20                 mov     lr, \rd, lsr #24
 21                 strb    lr, [r0]
 22                 mov     lr, \rd, lsr #16
 23                 strb    lr, [r0]
 24                 mov     lr, \rd, lsr #8
 25                 strb    lr, [r0]
 26                 strb    \rd, [r0]
 27 #endif
 28                 .endm
 29 
 30 .Loutsb_align:  rsb     ip, ip, #4
 31                 cmp     ip, r2
 32                 movgt   ip, r2
 33                 cmp     ip, #2
 34                 ldrb    r3, [r1], #1
 35                 strb    r3, [r0]
 36                 ldrbge  r3, [r1], #1
 37                 strbge  r3, [r0]
 38                 ldrbgt  r3, [r1], #1
 39                 strbgt  r3, [r0]
 40                 subs    r2, r2, ip
 41                 bne     .Loutsb_aligned
 42 
 43 ENTRY(__raw_writesb)
 44                 teq     r2, #0          @ do we have to check for the zero len?
 45                 reteq   lr
 46                 ands    ip, r1, #3
 47                 bne     .Loutsb_align
 48 
 49 .Loutsb_aligned:
 50                 stmfd   sp!, {r4, r5, lr}
 51 
 52                 subs    r2, r2, #16
 53                 bmi     .Loutsb_no_16
 54 
 55 .Loutsb_16_lp:  ldmia   r1!, {r3, r4, r5, ip}
 56                 outword r3
 57                 outword r4
 58                 outword r5
 59                 outword ip
 60                 subs    r2, r2, #16
 61                 bpl     .Loutsb_16_lp
 62 
 63                 tst     r2, #15
 64                 ldmfdeq sp!, {r4, r5, pc}
 65 
 66 .Loutsb_no_16:  tst     r2, #8
 67                 beq     .Loutsb_no_8
 68 
 69                 ldmia   r1!, {r3, r4}
 70                 outword r3
 71                 outword r4
 72 
 73 .Loutsb_no_8:   tst     r2, #4
 74                 beq     .Loutsb_no_4
 75 
 76                 ldr     r3, [r1], #4
 77                 outword r3
 78 
 79 .Loutsb_no_4:   ands    r2, r2, #3
 80                 ldmfdeq sp!, {r4, r5, pc}
 81 
 82                 cmp     r2, #2
 83                 ldrb    r3, [r1], #1
 84                 strb    r3, [r0]
 85                 ldrbge  r3, [r1], #1
 86                 strbge  r3, [r0]
 87                 ldrbgt  r3, [r1]
 88                 strbgt  r3, [r0]
 89 
 90                 ldmfd   sp!, {r4, r5, pc}
 91 ENDPROC(__raw_writesb)

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