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 (867B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* $Id: memset.S,v 1.1 2000/04/14 16:49:01 mjd Exp $
      3 *
      4 * "memset" implementation of SuperH
      5 *
      6 * Copyright (C) 1999  Niibe Yutaka
      7 *
      8 */
      9
     10/*
     11 *            void *memset(void *s, int c, size_t n);
     12 */
     13
     14#include <linux/linkage.h>
     15
     16ENTRY(memset)
     17	tst	r6,r6
     18	bt/s	5f		! if n=0, do nothing
     19	 add	r6,r4
     20	mov	#12,r0
     21	cmp/gt	r6,r0
     22	bt/s	4f		! if it's too small, set a byte at once
     23	 mov	r4,r0
     24	and	#3,r0
     25	cmp/eq	#0,r0
     26	bt/s	2f		! It's aligned
     27	 sub	r0,r6
     281:
     29	dt	r0
     30	bf/s	1b
     31	 mov.b	r5,@-r4
     322:				! make VVVV
     33	extu.b	r5,r5
     34	swap.b	r5,r0		!   V0
     35	or	r0,r5		!   VV
     36	swap.w	r5,r0		! VV00
     37	or	r0,r5		! VVVV
     38	!
     39	mov	r6,r0
     40	shlr2	r0
     41	shlr	r0		! r0 = r6 >> 3
     423:
     43	dt	r0
     44	mov.l	r5,@-r4		! set 8-byte at once
     45	bf/s	3b
     46	 mov.l	r5,@-r4
     47	!
     48	mov	#7,r0
     49	and	r0,r6
     50	tst	r6,r6
     51	bt	5f
     52	! fill bytes
     534:
     54	dt	r6
     55	bf/s	4b
     56	 mov.b	r5,@-r4
     575:
     58	rts
     59	 mov	r4,r0