Welcome to mirror list, hosted at ThFree Co, Russian Federation.

strlen.c « m68k « machine « libc « newlib - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 589a697517b90d0f6a0caa7b7c35aa99686e2ea1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
 *  C library strlen routine
 *
 *  This routine has been optimized for the CPU32+.
 *  It should run on all 68k machines.
 *
 *  W. Eric Norum
 *  Saskatchewan Accelerator Laboratory
 *  University of Saskatchewan
 *  Saskatoon, Saskatchewan, CANADA
 *  eric@skatter.usask.ca
 */

#include <string.h>

/*
 * Test bytes using CPU32+ loop mode if possible.
 */
size_t
strlen (const char *str)
{
	unsigned int n = ~0;
	const char *cp = str;

	asm volatile ("1:\n"
	     "\ttst.b (%0)+\n"
#if defined(__mcpu32__)
	     "\tdbeq %1,1b\n"
#endif
	     "\tbne.b 1b\n" :
		"=a" (cp), "=d" (n) :
		 "0" (cp),  "1" (n) :
		 "cc");
	return (cp - str) - 1;
}