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;
}
|