gcc/libgo/go/strings/indexbyte.c

30 lines
778 B
C
Raw Normal View History

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