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-700.S (1115B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
      4 */
      5
      6#include <linux/linkage.h>
      7
      8ENTRY_CFI(memcpy)
      9	or	r3,r0,r1
     10	asl_s	r3,r3,30
     11	mov_s	r5,r0
     12	brls.d	r2,r3,.Lcopy_bytewise
     13	sub.f	r3,r2,1
     14	ld_s	r12,[r1,0]
     15	asr.f	lp_count,r3,3
     16	bbit0.d	r3,2,.Lnox4
     17	bmsk_s	r2,r2,1
     18	st.ab	r12,[r5,4]
     19	ld.a	r12,[r1,4]
     20.Lnox4:
     21	lppnz	.Lendloop
     22	ld_s	r3,[r1,4]
     23	st.ab	r12,[r5,4]
     24	ld.a	r12,[r1,8]
     25	st.ab	r3,[r5,4]
     26.Lendloop:
     27	breq	r2,0,.Last_store
     28	ld	r3,[r5,0]
     29#ifdef __LITTLE_ENDIAN__
     30	add3	r2,-1,r2
     31	; uses long immediate
     32	xor_s	r12,r12,r3
     33	bmsk	r12,r12,r2
     34    xor_s	r12,r12,r3
     35#else /* BIG ENDIAN */
     36	sub3	r2,31,r2
     37	; uses long immediate
     38        xor_s	r3,r3,r12
     39        bmsk	r3,r3,r2
     40        xor_s	r12,r12,r3
     41#endif /* ENDIAN */
     42.Last_store:
     43	j_s.d	[blink]
     44	st	r12,[r5,0]
     45
     46	.balign	4
     47.Lcopy_bytewise:
     48	jcs	[blink]
     49	ldb_s	r12,[r1,0]
     50	lsr.f	lp_count,r3
     51	bhs_s	.Lnox1
     52	stb.ab	r12,[r5,1]
     53	ldb.a	r12,[r1,1]
     54.Lnox1:
     55	lppnz	.Lendbloop
     56	ldb_s	r3,[r1,1]
     57	stb.ab	r12,[r5,1]
     58	ldb.a	r12,[r1,2]
     59	stb.ab	r3,[r5,1]
     60.Lendbloop:
     61	j_s.d	[blink]
     62	stb	r12,[r5,0]
     63END_CFI(memcpy)