forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
758 B
33 lines
758 B
// SPDX-License-Identifier: GPL-2.0 |
|
#include <linux/string.h> |
|
#include <linux/export.h> |
|
|
|
char *strstr(const char *cs, const char *ct) |
|
{ |
|
int d0, d1; |
|
register char *__res; |
|
__asm__ __volatile__( |
|
"movl %6,%%edi\n\t" |
|
"repne\n\t" |
|
"scasb\n\t" |
|
"notl %%ecx\n\t" |
|
"decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ |
|
"movl %%ecx,%%edx\n" |
|
"1:\tmovl %6,%%edi\n\t" |
|
"movl %%esi,%%eax\n\t" |
|
"movl %%edx,%%ecx\n\t" |
|
"repe\n\t" |
|
"cmpsb\n\t" |
|
"je 2f\n\t" /* also works for empty string, see above */ |
|
"xchgl %%eax,%%esi\n\t" |
|
"incl %%esi\n\t" |
|
"cmpb $0,-1(%%eax)\n\t" |
|
"jne 1b\n\t" |
|
"xorl %%eax,%%eax\n\t" |
|
"2:" |
|
: "=a" (__res), "=&c" (d0), "=&S" (d1) |
|
: "0" (0), "1" (0xffffffff), "2" (cs), "g" (ct) |
|
: "dx", "di"); |
|
return __res; |
|
} |
|
EXPORT_SYMBOL(strstr);
|
|
|