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

strlen.S (827B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $
      3 *
      4 * "strlen" implementation of SuperH
      5 *
      6 * Copyright (C) 1999  Kaz Kojima
      7 *
      8 */
      9
     10/* size_t strlen (const char *s)  */
     11
     12#include <linux/linkage.h>
     13ENTRY(strlen)
     14	mov	r4,r0
     15	and	#3,r0
     16	tst	r0,r0
     17	bt/s	1f
     18	 mov	#0,r2
     19
     20	add	#-1,r0
     21	shll2	r0
     22	shll	r0
     23	braf	r0
     24	 nop
     25
     26	mov.b	@r4+,r1
     27	tst	r1,r1
     28	bt	8f
     29	add	#1,r2
     30
     31	mov.b	@r4+,r1
     32	tst	r1,r1
     33	bt	8f
     34	add	#1,r2
     35
     36	mov.b	@r4+,r1
     37	tst	r1,r1
     38	bt	8f
     39	add	#1,r2
     40
     411:
     42	mov	#0,r3
     432:
     44	mov.l	@r4+,r1
     45	cmp/str	r3,r1
     46	bf/s	2b
     47	 add	#4,r2
     48
     49	add	#-4,r2
     50#ifndef __LITTLE_ENDIAN__
     51	swap.b	r1,r1
     52	swap.w	r1,r1
     53	swap.b	r1,r1
     54#endif
     55	extu.b	r1,r0
     56	tst	r0,r0
     57	bt/s	8f
     58	 shlr8	r1
     59	add	#1,r2
     60	extu.b	r1,r0
     61	tst	r0,r0
     62	bt/s	8f
     63	 shlr8	r1
     64	add	#1,r2
     65	extu.b	r1,r0
     66	tst	r0,r0
     67	bt	8f
     68	add	#1,r2
     698:
     70	rts
     71	 mov	r2,r0