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

memset.S (1084B)


      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
      8#define SMALL	7 /* Must be at least 6 to deal with alignment/loop issues.  */
      9
     10ENTRY_CFI(memset)
     11	mov_s	r4,r0
     12	or	r12,r0,r2
     13	bmsk.f	r12,r12,1
     14	extb_s	r1,r1
     15	asl	r3,r1,8
     16	beq.d	.Laligned
     17	or_s	r1,r1,r3
     18	brls	r2,SMALL,.Ltiny
     19	add	r3,r2,r0
     20	stb	r1,[r3,-1]
     21	bclr_s	r3,r3,0
     22	stw	r1,[r3,-2]
     23	bmsk.f	r12,r0,1
     24	add_s	r2,r2,r12
     25	sub.ne	r2,r2,4
     26	stb.ab	r1,[r4,1]
     27	and	r4,r4,-2
     28	stw.ab	r1,[r4,2]
     29	and	r4,r4,-4
     30.Laligned:	; This code address should be aligned for speed.
     31	asl	r3,r1,16
     32	lsr.f	lp_count,r2,2
     33	or_s	r1,r1,r3
     34	lpne	.Loop_end
     35	st.ab	r1,[r4,4]
     36.Loop_end:
     37	j_s	[blink]
     38
     39	.balign	4
     40.Ltiny:
     41	mov.f	lp_count,r2
     42	lpne	.Ltiny_end
     43	stb.ab	r1,[r4,1]
     44.Ltiny_end:
     45	j_s	[blink]
     46END_CFI(memset)
     47
     48; memzero: @r0 = mem, @r1 = size_t
     49; memset:  @r0 = mem, @r1 = char, @r2 = size_t
     50
     51ENTRY_CFI(memzero)
     52    ; adjust bzero args to memset args
     53    mov r2, r1
     54    mov r1, 0
     55    b  memset    ;tail call so need to tinker with blink
     56END_CFI(memzero)