github.com/bir3/gocompiler@v0.9.2202/src/cmd/internal/goobj/builtin.go (about) 1 // Copyright 2019 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package goobj 6 7 import "github.com/bir3/gocompiler/src/internal/buildcfg" 8 9 // Builtin (compiler-generated) function references appear 10 // frequently. We assign special indices for them, so they 11 // don't need to be referenced by name. 12 13 // NBuiltin returns the number of listed builtin 14 // symbols. 15 func NBuiltin() int { 16 return len(builtins) 17 } 18 19 // BuiltinName returns the name and ABI of the i-th 20 // builtin symbol. 21 func BuiltinName(i int) (string, int) { 22 return builtins[i].name, builtins[i].abi 23 } 24 25 // BuiltinIdx returns the index of the builtin with the 26 // given name and abi, or -1 if it is not a builtin. 27 func BuiltinIdx(name string, abi int) int { 28 i, ok := builtinMap[name] 29 if !ok { 30 return -1 31 } 32 if buildcfg.Experiment.RegabiWrappers && builtins[i].abi != abi { 33 return -1 34 } 35 return i 36 } 37 38 //go:generate go run mkbuiltin.go 39 40 var builtinMap map[string]int 41 42 func init() { 43 builtinMap = make(map[string]int, len(builtins)) 44 for i, b := range builtins { 45 builtinMap[b.name] = i 46 } 47 }