| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <linux/string.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-22 23:09:56 +01:00
										 |  |  | char *strstr(const char *cs, const char *ct) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | int	d0, d1; | 
					
						
							| 
									
										
										
										
											2008-02-22 23:09:56 +01:00
										 |  |  | register char *__res; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | __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:" | 
					
						
							| 
									
										
										
										
											2008-08-02 21:24:45 +02:00
										 |  |  | 	: "=a" (__res), "=&c" (d0), "=&S" (d1) | 
					
						
							|  |  |  | 	: "0" (0), "1" (0xffffffff), "2" (cs), "g" (ct) | 
					
						
							|  |  |  | 	: "dx", "di"); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | return __res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |