github.com/gagliardetto/golang-go@v0.0.0-20201020153340-53909ea70814/cmd/compile/internal/gc/builtin/runtime.go (about)

     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  // to update builtin.go. This is not done automatically
     7  // to avoid depending on having a working compiler binary.
     8  
     9  // +build ignore
    10  
    11  package runtime
    12  
    13  // emitted by compiler, not referred to by go programs
    14  
    15  import "unsafe"
    16  
    17  func newobject(typ *byte) *any
    18  func panicdivide()
    19  func panicshift()
    20  func panicmakeslicelen()
    21  func throwinit()
    22  func panicwrap()
    23  
    24  func gopanic(interface{})
    25  func gorecover(*int32) interface{}
    26  func goschedguarded()
    27  
    28  // Note: these declarations are just for wasm port.
    29  // Other ports call assembly stubs instead.
    30  func goPanicIndex(x int, y int)
    31  func goPanicIndexU(x uint, y int)
    32  func goPanicSliceAlen(x int, y int)
    33  func goPanicSliceAlenU(x uint, y int)
    34  func goPanicSliceAcap(x int, y int)
    35  func goPanicSliceAcapU(x uint, y int)
    36  func goPanicSliceB(x int, y int)
    37  func goPanicSliceBU(x uint, y int)
    38  func goPanicSlice3Alen(x int, y int)
    39  func goPanicSlice3AlenU(x uint, y int)
    40  func goPanicSlice3Acap(x int, y int)
    41  func goPanicSlice3AcapU(x uint, y int)
    42  func goPanicSlice3B(x int, y int)
    43  func goPanicSlice3BU(x uint, y int)
    44  func goPanicSlice3C(x int, y int)
    45  func goPanicSlice3CU(x uint, y int)
    46  
    47  func printbool(bool)
    48  func printfloat(float64)
    49  func printint(int64)
    50  func printhex(uint64)
    51  func printuint(uint64)
    52  func printcomplex(complex128)
    53  func printstring(string)
    54  func printpointer(any)
    55  func printiface(any)
    56  func printeface(any)
    57  func printslice(any)
    58  func printnl()
    59  func printsp()
    60  func printlock()
    61  func printunlock()
    62  
    63  func concatstring2(*[32]byte, string, string) string
    64  func concatstring3(*[32]byte, string, string, string) string
    65  func concatstring4(*[32]byte, string, string, string, string) string
    66  func concatstring5(*[32]byte, string, string, string, string, string) string
    67  func concatstrings(*[32]byte, []string) string
    68  
    69  func cmpstring(string, string) int
    70  func intstring(*[4]byte, int64) string
    71  func slicebytetostring(*[32]byte, []byte) string
    72  func slicebytetostringtmp([]byte) string
    73  func slicerunetostring(*[32]byte, []rune) string
    74  func stringtoslicebyte(*[32]byte, string) []byte
    75  func stringtoslicerune(*[32]rune, string) []rune
    76  func slicecopy(to any, fr any, wid uintptr) int
    77  func slicestringcopy(to any, fr any) int
    78  
    79  func decoderune(string, int) (retv rune, retk int)
    80  func countrunes(string) int
    81  
    82  // Non-empty-interface to non-empty-interface conversion.
    83  func convI2I(typ *byte, elem any) (ret any)
    84  
    85  // Specialized type-to-interface conversion.
    86  // These return only a data pointer.
    87  func convT16(val any) unsafe.Pointer     // val must be uint16-like (same size and alignment as a uint16)
    88  func convT32(val any) unsafe.Pointer     // val must be uint32-like (same size and alignment as a uint32)
    89  func convT64(val any) unsafe.Pointer     // val must be uint64-like (same size and alignment as a uint64 and contains no pointers)
    90  func convTstring(val any) unsafe.Pointer // val must be a string
    91  func convTslice(val any) unsafe.Pointer  // val must be a slice
    92  
    93  // Type to empty-interface conversion.
    94  func convT2E(typ *byte, elem *any) (ret any)
    95  func convT2Enoptr(typ *byte, elem *any) (ret any)
    96  
    97  // Type to non-empty-interface conversion.
    98  func convT2I(tab *byte, elem *any) (ret any)
    99  func convT2Inoptr(tab *byte, elem *any) (ret any)
   100  
   101  // interface type assertions x.(T)
   102  func assertE2I(typ *byte, iface any) (ret any)
   103  func assertE2I2(typ *byte, iface any) (ret any, b bool)
   104  func assertI2I(typ *byte, iface any) (ret any)
   105  func assertI2I2(typ *byte, iface any) (ret any, b bool)
   106  func panicdottypeE(have, want, iface *byte)
   107  func panicdottypeI(have, want, iface *byte)
   108  func panicnildottype(want *byte)
   109  
   110  // interface equality. Type/itab pointers are already known to be equal, so
   111  // we only need to pass one.
   112  func ifaceeq(tab *uintptr, x, y unsafe.Pointer) (ret bool)
   113  func efaceeq(typ *uintptr, x, y unsafe.Pointer) (ret bool)
   114  
   115  func fastrand() uint32
   116  
   117  // *byte is really *runtime.Type
   118  func makemap64(mapType *byte, hint int64, mapbuf *any) (hmap map[any]any)
   119  func makemap(mapType *byte, hint int, mapbuf *any) (hmap map[any]any)
   120  func makemap_small() (hmap map[any]any)
   121  func mapaccess1(mapType *byte, hmap map[any]any, key *any) (val *any)
   122  func mapaccess1_fast32(mapType *byte, hmap map[any]any, key any) (val *any)
   123  func mapaccess1_fast64(mapType *byte, hmap map[any]any, key any) (val *any)
   124  func mapaccess1_faststr(mapType *byte, hmap map[any]any, key any) (val *any)
   125  func mapaccess1_fat(mapType *byte, hmap map[any]any, key *any, zero *byte) (val *any)
   126  func mapaccess2(mapType *byte, hmap map[any]any, key *any) (val *any, pres bool)
   127  func mapaccess2_fast32(mapType *byte, hmap map[any]any, key any) (val *any, pres bool)
   128  func mapaccess2_fast64(mapType *byte, hmap map[any]any, key any) (val *any, pres bool)
   129  func mapaccess2_faststr(mapType *byte, hmap map[any]any, key any) (val *any, pres bool)
   130  func mapaccess2_fat(mapType *byte, hmap map[any]any, key *any, zero *byte) (val *any, pres bool)
   131  func mapassign(mapType *byte, hmap map[any]any, key *any) (val *any)
   132  func mapassign_fast32(mapType *byte, hmap map[any]any, key any) (val *any)
   133  func mapassign_fast32ptr(mapType *byte, hmap map[any]any, key any) (val *any)
   134  func mapassign_fast64(mapType *byte, hmap map[any]any, key any) (val *any)
   135  func mapassign_fast64ptr(mapType *byte, hmap map[any]any, key any) (val *any)
   136  func mapassign_faststr(mapType *byte, hmap map[any]any, key any) (val *any)
   137  func mapiterinit(mapType *byte, hmap map[any]any, hiter *any)
   138  func mapdelete(mapType *byte, hmap map[any]any, key *any)
   139  func mapdelete_fast32(mapType *byte, hmap map[any]any, key any)
   140  func mapdelete_fast64(mapType *byte, hmap map[any]any, key any)
   141  func mapdelete_faststr(mapType *byte, hmap map[any]any, key any)
   142  func mapiternext(hiter *any)
   143  func mapclear(mapType *byte, hmap map[any]any)
   144  
   145  // *byte is really *runtime.Type
   146  func makechan64(chanType *byte, size int64) (hchan chan any)
   147  func makechan(chanType *byte, size int) (hchan chan any)
   148  func chanrecv1(hchan <-chan any, elem *any)
   149  func chanrecv2(hchan <-chan any, elem *any) bool
   150  func chansend1(hchan chan<- any, elem *any)
   151  func closechan(hchan any)
   152  
   153  var writeBarrier struct {
   154  	enabled bool
   155  	pad     [3]byte
   156  	needed  bool
   157  	cgo     bool
   158  	alignme uint64
   159  }
   160  
   161  // *byte is really *runtime.Type
   162  func typedmemmove(typ *byte, dst *any, src *any)
   163  func typedmemclr(typ *byte, dst *any)
   164  func typedslicecopy(typ *byte, dst any, src any) int
   165  
   166  func selectnbsend(hchan chan<- any, elem *any) bool
   167  func selectnbrecv(elem *any, hchan <-chan any) bool
   168  func selectnbrecv2(elem *any, received *bool, hchan <-chan any) bool
   169  
   170  func selectsetpc(cas *byte)
   171  func selectgo(cas0 *byte, order0 *byte, ncases int) (int, bool)
   172  func block()
   173  
   174  func makeslice(typ *byte, len int, cap int) unsafe.Pointer
   175  func makeslice64(typ *byte, len int64, cap int64) unsafe.Pointer
   176  func growslice(typ *byte, old []any, cap int) (ary []any)
   177  func memmove(to *any, frm *any, length uintptr)
   178  func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
   179  func memclrHasPointers(ptr unsafe.Pointer, n uintptr)
   180  
   181  func memequal(x, y *any, size uintptr) bool
   182  func memequal0(x, y *any) bool
   183  func memequal8(x, y *any) bool
   184  func memequal16(x, y *any) bool
   185  func memequal32(x, y *any) bool
   186  func memequal64(x, y *any) bool
   187  func memequal128(x, y *any) bool
   188  func f32equal(p, q unsafe.Pointer) bool
   189  func f64equal(p, q unsafe.Pointer) bool
   190  func c64equal(p, q unsafe.Pointer) bool
   191  func c128equal(p, q unsafe.Pointer) bool
   192  func strequal(p, q unsafe.Pointer) bool
   193  func interequal(p, q unsafe.Pointer) bool
   194  func nilinterequal(p, q unsafe.Pointer) bool
   195  
   196  func memhash(p unsafe.Pointer, h uintptr, size uintptr) uintptr
   197  func memhash0(p unsafe.Pointer, h uintptr) uintptr
   198  func memhash8(p unsafe.Pointer, h uintptr) uintptr
   199  func memhash16(p unsafe.Pointer, h uintptr) uintptr
   200  func memhash32(p unsafe.Pointer, h uintptr) uintptr
   201  func memhash64(p unsafe.Pointer, h uintptr) uintptr
   202  func memhash128(p unsafe.Pointer, h uintptr) uintptr
   203  func f32hash(p unsafe.Pointer, h uintptr) uintptr
   204  func f64hash(p unsafe.Pointer, h uintptr) uintptr
   205  func c64hash(p unsafe.Pointer, h uintptr) uintptr
   206  func c128hash(p unsafe.Pointer, h uintptr) uintptr
   207  func strhash(a unsafe.Pointer, h uintptr) uintptr
   208  func interhash(p unsafe.Pointer, h uintptr) uintptr
   209  func nilinterhash(p unsafe.Pointer, h uintptr) uintptr
   210  
   211  // only used on 32-bit
   212  func int64div(int64, int64) int64
   213  func uint64div(uint64, uint64) uint64
   214  func int64mod(int64, int64) int64
   215  func uint64mod(uint64, uint64) uint64
   216  func float64toint64(float64) int64
   217  func float64touint64(float64) uint64
   218  func float64touint32(float64) uint32
   219  func int64tofloat64(int64) float64
   220  func uint64tofloat64(uint64) float64
   221  func uint32tofloat64(uint32) float64
   222  
   223  func complex128div(num complex128, den complex128) (quo complex128)
   224  
   225  // race detection
   226  func racefuncenter(uintptr)
   227  func racefuncenterfp()
   228  func racefuncexit()
   229  func raceread(uintptr)
   230  func racewrite(uintptr)
   231  func racereadrange(addr, size uintptr)
   232  func racewriterange(addr, size uintptr)
   233  
   234  // memory sanitizer
   235  func msanread(addr, size uintptr)
   236  func msanwrite(addr, size uintptr)
   237  
   238  func checkptrAlignment(unsafe.Pointer, *byte, uintptr)
   239  func checkptrArithmetic(unsafe.Pointer, []unsafe.Pointer)
   240  
   241  func libfuzzerTraceCmp1(uint8, uint8)
   242  func libfuzzerTraceCmp2(uint16, uint16)
   243  func libfuzzerTraceCmp4(uint32, uint32)
   244  func libfuzzerTraceCmp8(uint64, uint64)
   245  func libfuzzerTraceConstCmp1(uint8, uint8)
   246  func libfuzzerTraceConstCmp2(uint16, uint16)
   247  func libfuzzerTraceConstCmp4(uint32, uint32)
   248  func libfuzzerTraceConstCmp8(uint64, uint64)
   249  
   250  // architecture variants
   251  var x86HasPOPCNT bool
   252  var x86HasSSE41 bool
   253  var x86HasFMA bool
   254  var armHasVFPv4 bool
   255  var arm64HasATOMICS bool