cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

memcpy-archs-unaligned.S (1009B)


      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
     23ENTRY_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]
     47END_CFI(memcpy)