Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
include
asm
string.h
Go to the documentation of this file.
1
/*
2
* This file is subject to the terms and conditions of the GNU General Public
3
* License. See the file "COPYING" in the main directory of this archive
4
* for more details.
5
*
6
* Copyright (c) 1994, 95, 96, 97, 98, 2000, 01 Ralf Baechle
7
* Copyright (c) 2000 by Silicon Graphics, Inc.
8
* Copyright (c) 2001 MIPS Technologies, Inc.
9
*/
10
#ifndef _ASM_STRING_H
11
#define _ASM_STRING_H
12
13
14
/*
15
* Most of the inline functions are rather naive implementations so I just
16
* didn't bother updating them for 64-bit ...
17
*/
18
#ifdef CONFIG_32BIT
19
20
#ifndef IN_STRING_C
21
22
#define __HAVE_ARCH_STRCPY
23
static
__inline__
char
*
strcpy
(
char
*__dest, __const__
char
*__src)
24
{
25
char
*__xdest = __dest;
26
27
__asm__
__volatile__(
28
".set\tnoreorder\n\t"
29
".set\tnoat\n"
30
"1:\tlbu\t$1,(%1)\n\t"
31
"addiu\t%1,1\n\t"
32
"sb\t$1,(%0)\n\t"
33
"bnez\t$1,1b\n\t"
34
"addiu\t%0,1\n\t"
35
".set\tat\n\t"
36
".set\treorder"
37
:
"=r"
(__dest),
"=r"
(__src)
38
:
"0"
(__dest),
"1"
(__src)
39
:
"memory"
);
40
41
return
__xdest;
42
}
43
44
#define __HAVE_ARCH_STRNCPY
45
static
__inline__
char
*
strncpy
(
char
*__dest, __const__
char
*__src,
size_t
__n)
46
{
47
char
*__xdest = __dest;
48
49
if
(__n == 0)
50
return
__xdest;
51
52
__asm__
__volatile__(
53
".set\tnoreorder\n\t"
54
".set\tnoat\n"
55
"1:\tlbu\t$1,(%1)\n\t"
56
"subu\t%2,1\n\t"
57
"sb\t$1,(%0)\n\t"
58
"beqz\t$1,2f\n\t"
59
"addiu\t%0,1\n\t"
60
"bnez\t%2,1b\n\t"
61
"addiu\t%1,1\n"
62
"2:\n\t"
63
".set\tat\n\t"
64
".set\treorder"
65
:
"=r"
(__dest),
"=r"
(__src),
"=r"
(__n)
66
:
"0"
(__dest),
"1"
(__src),
"2"
(__n)
67
:
"memory"
);
68
69
return
__xdest;
70
}
71
72
#define __HAVE_ARCH_STRCMP
73
static
__inline__
int
strcmp
(__const__
char
*__cs, __const__
char
*__ct)
74
{
75
int
__res;
76
77
__asm__
__volatile__(
78
".set\tnoreorder\n\t"
79
".set\tnoat\n\t"
80
"lbu\t%2,(%0)\n"
81
"1:\tlbu\t$1,(%1)\n\t"
82
"addiu\t%0,1\n\t"
83
"bne\t$1,%2,2f\n\t"
84
"addiu\t%1,1\n\t"
85
"bnez\t%2,1b\n\t"
86
"lbu\t%2,(%0)\n\t"
87
#
if
defined(CONFIG_CPU_R3000)
88
"nop\n\t"
89
#
endif
90
"move\t%2,$1\n"
91
"2:\tsubu\t%2,$1\n"
92
"3:\t.set\tat\n\t"
93
".set\treorder"
94
:
"=r"
(__cs),
"=r"
(__ct),
"=r"
(__res)
95
:
"0"
(__cs),
"1"
(__ct));
96
97
return
__res;
98
}
99
100
#endif
/* !defined(IN_STRING_C) */
101
102
#define __HAVE_ARCH_STRNCMP
103
static
__inline__
int
104
strncmp
(__const__
char
*__cs, __const__
char
*__ct,
size_t
__count)
105
{
106
int
__res;
107
108
__asm__
__volatile__(
109
".set\tnoreorder\n\t"
110
".set\tnoat\n"
111
"1:\tlbu\t%3,(%0)\n\t"
112
"beqz\t%2,2f\n\t"
113
"lbu\t$1,(%1)\n\t"
114
"subu\t%2,1\n\t"
115
"bne\t$1,%3,3f\n\t"
116
"addiu\t%0,1\n\t"
117
"bnez\t%3,1b\n\t"
118
"addiu\t%1,1\n"
119
"2:\n\t"
120
#
if
defined(CONFIG_CPU_R3000)
121
"nop\n\t"
122
#
endif
123
"move\t%3,$1\n"
124
"3:\tsubu\t%3,$1\n\t"
125
".set\tat\n\t"
126
".set\treorder"
127
:
"=r"
(__cs),
"=r"
(__ct),
"=r"
(__count),
"=r"
(__res)
128
:
"0"
(__cs),
"1"
(__ct),
"2"
(__count));
129
130
return
__res;
131
}
132
#endif
/* CONFIG_32BIT */
133
134
#define __HAVE_ARCH_MEMSET
135
extern
void
*
memset
(
void
*__s,
int
__c,
size_t
__count);
136
137
#define __HAVE_ARCH_MEMCPY
138
extern
void
*
memcpy
(
void
*__to, __const__
void
*__from,
size_t
__n);
139
140
#define __HAVE_ARCH_MEMMOVE
141
extern
void
*
memmove
(
void
*__dest, __const__
void
*__src,
size_t
__n);
142
143
#endif
/* _ASM_STRING_H */
Generated on Thu Jan 10 2013 12:50:36 for Linux Kernel by
1.8.2