Source file src/cmd/compile/internal/typecheck/_builtin/runtime.go

     1  // Copyright 2009 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  // NOTE: If you change this file you must run "go generate"
     6  // in cmd/compile/internal/typecheck
     7  // to update builtin.go. This is not done automatically
     8  // to avoid depending on having a working compiler binary.
     9  
    10  //go:build ignore
    11  
    12  package runtime
    13  
    14  // emitted by compiler, not referred to by go programs
    15  
    16  import "unsafe"
    17  
    18  func newobject(typ *byte) *any
    19  func mallocgc(size uintptr, typ *byte, needszero bool) unsafe.Pointer
    20  func panicdivide()
    21  func panicshift()
    22  func panicmakeslicelen()
    23  func panicmakeslicecap()
    24  func throwinit()
    25  func panicwrap()
    26  
    27  func gopanic(interface{})
    28  func gorecover() interface{}
    29  func goschedguarded()
    30  
    31  // Note: these declarations are just for wasm port.
    32  // Other ports call assembly stubs instead.
    33  func goPanicIndex(x int, y int)
    34  func goPanicIndexU(x uint, y int)
    35  func goPanicSliceAlen(x int, y int)
    36  func goPanicSliceAlenU(x uint, y int)
    37  func goPanicSliceAcap(x int, y int)
    38  func goPanicSliceAcapU(x uint, y int)
    39  func goPanicSliceB(x int, y int)
    40  func goPanicSliceBU(x uint, y int)
    41  func goPanicSlice3Alen(x int, y int)
    42  func goPanicSlice3AlenU(x uint, y int)
    43  func goPanicSlice3Acap(x int, y int)
    44  func goPanicSlice3AcapU(x uint, y int)
    45  func goPanicSlice3B(x int, y int)
    46  func goPanicSlice3BU(x uint, y int)
    47  func goPanicSlice3C(x int, y int)
    48  func goPanicSlice3CU(x uint, y int)
    49  func goPanicSliceConvert(x int, y int)
    50  
    51  func printbool(bool)
    52  func printfloat64(float64)
    53  func printfloat32(float32)
    54  func printint(int64)
    55  func printhex(uint64)
    56  func printuint(uint64)
    57  func printcomplex128(complex128)
    58  func printcomplex64(complex64)
    59  func printstring(string)
    60  func printpointer(any)
    61  func printuintptr(uintptr)
    62  func printiface(any)
    63  func printeface(any)
    64  func printslice(any)
    65  func printnl()
    66  func printsp()
    67  func printlock()
    68  func printunlock()
    69  
    70  func concatstring2(*[32]byte, string, string) string
    71  func concatstring3(*[32]byte, string, string, string) string
    72  func concatstring4(*[32]byte, string, string, string, string) string
    73  func concatstring5(*[32]byte, string, string, string, string, string) string
    74  func concatstrings(*[32]byte, []string) string
    75  
    76  func concatbyte2(*[32]byte, string, string) []byte
    77  func concatbyte3(*[32]byte, string, string, string) []byte
    78  func concatbyte4(*[32]byte, string, string, string, string) []byte
    79  func concatbyte5(*[32]byte, string, string, string, string, string) []byte
    80  func concatbytes(*[32]byte, []string) []byte
    81  
    82  func cmpstring(string, string) int
    83  func intstring(*[4]byte, int64) string
    84  func slicebytetostring(buf *[32]byte, ptr *byte, n int) string
    85  func slicebytetostringtmp(ptr *byte, n int) string
    86  func slicerunetostring(*[32]byte, []rune) string
    87  func stringtoslicebyte(*[32]byte, string) []byte
    88  func stringtoslicerune(*[32]rune, string) []rune
    89  func slicecopy(toPtr *any, toLen int, fromPtr *any, fromLen int, wid uintptr) int
    90  
    91  func decoderune(string, int) (retv rune, retk int)
    92  func countrunes(string) int
    93  
    94  // Convert non-interface type to the data word of a (empty or nonempty) interface.
    95  func convT(typ *byte, elem *any) unsafe.Pointer
    96  
    97  // Same as convT, for types with no pointers in them.
    98  func convTnoptr(typ *byte, elem *any) unsafe.Pointer
    99  
   100  // Specialized versions of convT for specific types.
   101  // These functions take concrete types in the runtime. But they may
   102  // be used for a wider range of types, which have the same memory
   103  // layout as the parameter type. The compiler converts the
   104  // to-be-converted type to the parameter type before calling the
   105  // runtime function. This way, the call is ABI-insensitive.
   106  func convT16(val uint16) unsafe.Pointer
   107  func convT32(val uint32) unsafe.Pointer
   108  func convT64(val uint64) unsafe.Pointer
   109  func convTstring(val string) unsafe.Pointer
   110  func convTslice(val []uint8) unsafe.Pointer
   111  
   112  // interface type assertions x.(T)
   113  func assertE2I(inter *byte, typ *byte) *byte
   114  func assertE2I2(inter *byte, typ *byte) *byte
   115  func panicdottypeE(have, want, iface *byte)
   116  func panicdottypeI(have, want, iface *byte)
   117  func panicnildottype(want *byte)
   118  func typeAssert(s *byte, typ *byte) *byte
   119  
   120  // interface switches
   121  func interfaceSwitch(s *byte, t *byte) (int, *byte)
   122  
   123  // interface equality. Type/itab pointers are already known to be equal, so
   124  // we only need to pass one.
   125  func ifaceeq(tab *uintptr, x, y unsafe.Pointer) (ret bool)
   126  func efaceeq(typ *uintptr, x, y unsafe.Pointer) (ret bool)
   127  
   128  // panic for various rangefunc iterator errors
   129  func panicrangestate(state int)
   130  
   131  // defer in range over func
   132  func deferrangefunc() interface{}
   133  
   134  func rand() uint64
   135  func rand32() uint32
   136  
   137  // *byte is really *runtime.Type
   138  func makemap64(mapType *byte, hint int64, mapbuf *any) (hmap map[any]any)
   139  func makemap(mapType *byte, hint int, mapbuf *any) (hmap map[any]any)
   140  func makemap_small() (hmap map[any]any)
   141  func mapaccess1(mapType *byte, hmap map[any]any, key *any) (val *any)
   142  func mapaccess1_fast32(mapType *byte, hmap map[any]any, key uint32) (val *any)
   143  func mapaccess1_fast64(mapType *byte, hmap map[any]any, key uint64) (val *any)
   144  func mapaccess1_faststr(mapType *byte, hmap map[any]any, key string) (val *any)
   145  func mapaccess1_fat(mapType *byte, hmap map[any]any, key *any, zero *byte) (val *any)
   146  func mapaccess2(mapType *byte, hmap map[any]any, key *any) (val *any, pres bool)
   147  func mapaccess2_fast32(mapType *byte, hmap map[any]any, key uint32) (val *any, pres bool)
   148  func mapaccess2_fast64(mapType *byte, hmap map[any]any, key uint64) (val *any, pres bool)
   149  func mapaccess2_faststr(mapType *byte, hmap map[any]any, key string) (val *any, pres bool)
   150  func mapaccess2_fat(mapType *byte, hmap map[any]any, key *any, zero *byte) (val *any, pres bool)
   151  func mapassign(mapType *byte, hmap map[any]any, key *any) (val *any)
   152  func mapassign_fast32(mapType *byte, hmap map[any]any, key uint32) (val *any)
   153  func mapassign_fast32ptr(mapType *byte, hmap map[any]any, key unsafe.Pointer) (val *any)
   154  func mapassign_fast64(mapType *byte, hmap map[any]any, key uint64) (val *any)
   155  func mapassign_fast64ptr(mapType *byte, hmap map[any]any, key unsafe.Pointer) (val *any)
   156  func mapassign_faststr(mapType *byte, hmap map[any]any, key string) (val *any)
   157  func mapIterStart(mapType *byte, hmap map[any]any, hiter *any)
   158  func mapdelete(mapType *byte, hmap map[any]any, key *any)
   159  func mapdelete_fast32(mapType *byte, hmap map[any]any, key uint32)
   160  func mapdelete_fast64(mapType *byte, hmap map[any]any, key uint64)
   161  func mapdelete_faststr(mapType *byte, hmap map[any]any, key string)
   162  func mapIterNext(hiter *any)
   163  func mapclear(mapType *byte, hmap map[any]any)
   164  
   165  // *byte is really *runtime.Type
   166  func makechan64(chanType *byte, size int64) (hchan chan any)
   167  func makechan(chanType *byte, size int) (hchan chan any)
   168  func chanrecv1(hchan <-chan any, elem *any)
   169  func chanrecv2(hchan <-chan any, elem *any) bool
   170  func chansend1(hchan chan<- any, elem *any)
   171  func closechan(hchan chan<- any)
   172  func chanlen(hchan any) int
   173  func chancap(hchan any) int
   174  
   175  var writeBarrier struct {
   176  	enabled bool
   177  	pad     [3]byte
   178  	cgo     bool
   179  	alignme uint64
   180  }
   181  
   182  // *byte is really *runtime.Type
   183  func typedmemmove(typ *byte, dst *any, src *any)
   184  func typedmemclr(typ *byte, dst *any)
   185  func typedslicecopy(typ *byte, dstPtr *any, dstLen int, srcPtr *any, srcLen int) int
   186  
   187  func selectnbsend(hchan chan<- any, elem *any) bool
   188  func selectnbrecv(elem *any, hchan <-chan any) (bool, bool)
   189  
   190  func selectsetpc(pc *uintptr)
   191  func selectgo(cas0 *byte, order0 *byte, pc0 *uintptr, nsends int, nrecvs int, block bool) (int, bool)
   192  func block()
   193  
   194  func makeslice(typ *byte, len int, cap int) unsafe.Pointer
   195  func makeslice64(typ *byte, len int64, cap int64) unsafe.Pointer
   196  func makeslicecopy(typ *byte, tolen int, fromlen int, from unsafe.Pointer) unsafe.Pointer
   197  func growslice(oldPtr *any, newLen, oldCap, num int, et *byte) (ary []any)
   198  func unsafeslicecheckptr(typ *byte, ptr unsafe.Pointer, len int64)
   199  func panicunsafeslicelen()
   200  func panicunsafeslicenilptr()
   201  func unsafestringcheckptr(ptr unsafe.Pointer, len int64)
   202  func panicunsafestringlen()
   203  func panicunsafestringnilptr()
   204  
   205  func memmove(to *any, frm *any, length uintptr)
   206  func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
   207  func memclrHasPointers(ptr unsafe.Pointer, n uintptr)
   208  
   209  func memequal(x, y *any, size uintptr) bool
   210  func memequal0(x, y *any) bool
   211  func memequal8(x, y *any) bool
   212  func memequal16(x, y *any) bool
   213  func memequal32(x, y *any) bool
   214  func memequal64(x, y *any) bool
   215  func memequal128(x, y *any) bool
   216  func f32equal(p, q unsafe.Pointer) bool
   217  func f64equal(p, q unsafe.Pointer) bool
   218  func c64equal(p, q unsafe.Pointer) bool
   219  func c128equal(p, q unsafe.Pointer) bool
   220  func strequal(p, q unsafe.Pointer) bool
   221  func interequal(p, q unsafe.Pointer) bool
   222  func nilinterequal(p, q unsafe.Pointer) bool
   223  
   224  func memhash(x *any, h uintptr, size uintptr) uintptr
   225  func memhash0(p unsafe.Pointer, h uintptr) uintptr
   226  func memhash8(p unsafe.Pointer, h uintptr) uintptr
   227  func memhash16(p unsafe.Pointer, h uintptr) uintptr
   228  func memhash32(p unsafe.Pointer, h uintptr) uintptr
   229  func memhash64(p unsafe.Pointer, h uintptr) uintptr
   230  func memhash128(p unsafe.Pointer, h uintptr) uintptr
   231  func f32hash(p *any, h uintptr) uintptr
   232  func f64hash(p *any, h uintptr) uintptr
   233  func c64hash(p *any, h uintptr) uintptr
   234  func c128hash(p *any, h uintptr) uintptr
   235  func strhash(a *any, h uintptr) uintptr
   236  func interhash(p *any, h uintptr) uintptr
   237  func nilinterhash(p *any, h uintptr) uintptr
   238  
   239  // only used on 32-bit
   240  func int64div(int64, int64) int64
   241  func uint64div(uint64, uint64) uint64
   242  func int64mod(int64, int64) int64
   243  func uint64mod(uint64, uint64) uint64
   244  func float64toint64(float64) int64
   245  func float64touint64(float64) uint64
   246  func float64touint32(float64) uint32
   247  func int64tofloat64(int64) float64
   248  func int64tofloat32(int64) float32
   249  func uint64tofloat64(uint64) float64
   250  func uint64tofloat32(uint64) float32
   251  func uint32tofloat64(uint32) float64
   252  
   253  func complex128div(num complex128, den complex128) (quo complex128)
   254  
   255  // race detection
   256  func racefuncenter(uintptr)
   257  func racefuncexit()
   258  func raceread(uintptr)
   259  func racewrite(uintptr)
   260  func racereadrange(addr, size uintptr)
   261  func racewriterange(addr, size uintptr)
   262  
   263  // memory sanitizer
   264  func msanread(addr, size uintptr)
   265  func msanwrite(addr, size uintptr)
   266  func msanmove(dst, src, size uintptr)
   267  
   268  // address sanitizer
   269  func asanread(addr, size uintptr)
   270  func asanwrite(addr, size uintptr)
   271  
   272  func checkptrAlignment(unsafe.Pointer, *byte, uintptr)
   273  func checkptrArithmetic(unsafe.Pointer, []unsafe.Pointer)
   274  
   275  func libfuzzerTraceCmp1(uint8, uint8, uint)
   276  func libfuzzerTraceCmp2(uint16, uint16, uint)
   277  func libfuzzerTraceCmp4(uint32, uint32, uint)
   278  func libfuzzerTraceCmp8(uint64, uint64, uint)
   279  func libfuzzerTraceConstCmp1(uint8, uint8, uint)
   280  func libfuzzerTraceConstCmp2(uint16, uint16, uint)
   281  func libfuzzerTraceConstCmp4(uint32, uint32, uint)
   282  func libfuzzerTraceConstCmp8(uint64, uint64, uint)
   283  func libfuzzerHookStrCmp(string, string, uint)
   284  func libfuzzerHookEqualFold(string, string, uint)
   285  
   286  func addCovMeta(p unsafe.Pointer, len uint32, hash [16]byte, pkpath string, pkgId int, cmode uint8, cgran uint8) uint32
   287  
   288  // architecture variants
   289  var x86HasPOPCNT bool
   290  var x86HasSSE41 bool
   291  var x86HasFMA bool
   292  var armHasVFPv4 bool
   293  var arm64HasATOMICS bool
   294  var loong64HasLAMCAS bool
   295  var loong64HasLAM_BH bool
   296  var loong64HasLSX bool
   297  var riscv64HasZbb bool
   298  
   299  func asanregisterglobals(unsafe.Pointer, uintptr)
   300  

View as plain text