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