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

TOMOYO Linux Cross Reference
Linux/arch/arc/lib/memcpy-archs-unaligned.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 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0+ */
  2 /*
  3  * ARCv2 memcpy implementation optimized for unaligned memory access using.
  4  *
  5  * Copyright (C) 2019 Synopsys
  6  * Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
  7  */
  8 
  9 #include <linux/linkage.h>
 10 
 11 #ifdef CONFIG_ARC_HAS_LL64
 12 # define LOADX(DST,RX)          ldd.ab  DST, [RX, 8]
 13 # define STOREX(SRC,RX)         std.ab  SRC, [RX, 8]
 14 # define ZOLSHFT                5
 15 # define ZOLAND                 0x1F
 16 #else
 17 # define LOADX(DST,RX)          ld.ab   DST, [RX, 4]
 18 # define STOREX(SRC,RX)         st.ab   SRC, [RX, 4]
 19 # define ZOLSHFT                4
 20 # define ZOLAND                 0xF
 21 #endif
 22 
 23 ENTRY_CFI(memcpy)
 24         mov     r3, r0          ; don;t clobber ret val
 25 
 26         lsr.f   lp_count, r2, ZOLSHFT
 27         lpnz    @.Lcopy32_64bytes
 28         ;; LOOP START
 29         LOADX   (r6, r1)
 30         LOADX   (r8, r1)
 31         LOADX   (r10, r1)
 32         LOADX   (r4, r1)
 33         STOREX  (r6, r3)
 34         STOREX  (r8, r3)
 35         STOREX  (r10, r3)
 36         STOREX  (r4, r3)
 37 .Lcopy32_64bytes:
 38 
 39         and.f   lp_count, r2, ZOLAND ;Last remaining 31 bytes
 40         lpnz    @.Lcopyremainingbytes
 41         ;; LOOP START
 42         ldb.ab  r5, [r1, 1]
 43         stb.ab  r5, [r3, 1]
 44 .Lcopyremainingbytes:
 45 
 46         j       [blink]
 47 END_CFI(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