forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			30 lines
		
	
	
		
			778 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			778 B
		
	
	
	
		
			C
		
	
	
	
| /* indexbyte.c -- implement strings.IndexByte for Go.
 | |
| 
 | |
|    Copyright 2013 The Go Authors. All rights reserved.
 | |
|    Use of this source code is governed by a BSD-style
 | |
|    license that can be found in the LICENSE file.  */
 | |
| 
 | |
| #include <stddef.h>
 | |
| 
 | |
| #include "runtime.h"
 | |
| #include "go-string.h"
 | |
| 
 | |
| /* This is in C so that the compiler can optimize it appropriately.
 | |
|    We deliberately don't split the stack in case it does call the
 | |
|    library function, which shouldn't need much stack space.  */
 | |
| 
 | |
| intgo IndexByte (String, char)
 | |
|   __asm__ (GOSYM_PREFIX "strings.IndexByte")
 | |
|   __attribute__ ((no_split_stack));
 | |
| 
 | |
| intgo
 | |
| IndexByte (String s, char b)
 | |
| {
 | |
|   const char *p;
 | |
| 
 | |
|   p = __builtin_memchr ((const char *) s.str, b, s.len);
 | |
|   if (p == NULL)
 | |
|     return -1;
 | |
|   return p - (const char *) s.str;
 | |
| }
 |