-
Notifications
You must be signed in to change notification settings - Fork 0
/
builtin.go
408 lines (400 loc) · 16.1 KB
/
builtin.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
// Code generated by mkbuiltin.go. DO NOT EDIT.
package typecheck
import (
"github.com/bir3/gocompiler/src/cmd/compile/internal/types"
"github.com/bir3/gocompiler/src/cmd/internal/src"
)
// Not inlining this function removes a significant chunk of init code.
//
//go:noinline
func newSig(params, results []*types.Field) *types.Type {
return types.NewSignature(nil, params, results)
}
func params(tlist ...*types.Type) []*types.Field {
flist := make([]*types.Field, len(tlist))
for i, typ := range tlist {
flist[i] = types.NewField(src.NoXPos, nil, typ)
}
return flist
}
var runtimeDecls = [...]struct {
name string
tag int
typ int
}{
{"newobject", funcTag, 4},
{"mallocgc", funcTag, 8},
{"panicdivide", funcTag, 9},
{"panicshift", funcTag, 9},
{"panicmakeslicelen", funcTag, 9},
{"panicmakeslicecap", funcTag, 9},
{"throwinit", funcTag, 9},
{"panicwrap", funcTag, 9},
{"gopanic", funcTag, 11},
{"gorecover", funcTag, 14},
{"goschedguarded", funcTag, 9},
{"goPanicIndex", funcTag, 16},
{"goPanicIndexU", funcTag, 18},
{"goPanicSliceAlen", funcTag, 16},
{"goPanicSliceAlenU", funcTag, 18},
{"goPanicSliceAcap", funcTag, 16},
{"goPanicSliceAcapU", funcTag, 18},
{"goPanicSliceB", funcTag, 16},
{"goPanicSliceBU", funcTag, 18},
{"goPanicSlice3Alen", funcTag, 16},
{"goPanicSlice3AlenU", funcTag, 18},
{"goPanicSlice3Acap", funcTag, 16},
{"goPanicSlice3AcapU", funcTag, 18},
{"goPanicSlice3B", funcTag, 16},
{"goPanicSlice3BU", funcTag, 18},
{"goPanicSlice3C", funcTag, 16},
{"goPanicSlice3CU", funcTag, 18},
{"goPanicSliceConvert", funcTag, 16},
{"printbool", funcTag, 19},
{"printfloat", funcTag, 21},
{"printint", funcTag, 23},
{"printhex", funcTag, 25},
{"printuint", funcTag, 25},
{"printcomplex", funcTag, 27},
{"printstring", funcTag, 29},
{"printpointer", funcTag, 30},
{"printuintptr", funcTag, 31},
{"printiface", funcTag, 30},
{"printeface", funcTag, 30},
{"printslice", funcTag, 30},
{"printnl", funcTag, 9},
{"printsp", funcTag, 9},
{"printlock", funcTag, 9},
{"printunlock", funcTag, 9},
{"concatstring2", funcTag, 34},
{"concatstring3", funcTag, 35},
{"concatstring4", funcTag, 36},
{"concatstring5", funcTag, 37},
{"concatstrings", funcTag, 39},
{"cmpstring", funcTag, 40},
{"intstring", funcTag, 43},
{"slicebytetostring", funcTag, 44},
{"slicebytetostringtmp", funcTag, 45},
{"slicerunetostring", funcTag, 48},
{"stringtoslicebyte", funcTag, 50},
{"stringtoslicerune", funcTag, 53},
{"slicecopy", funcTag, 54},
{"decoderune", funcTag, 55},
{"countrunes", funcTag, 56},
{"convT", funcTag, 57},
{"convTnoptr", funcTag, 57},
{"convT16", funcTag, 59},
{"convT32", funcTag, 61},
{"convT64", funcTag, 62},
{"convTstring", funcTag, 63},
{"convTslice", funcTag, 66},
{"assertE2I", funcTag, 67},
{"assertE2I2", funcTag, 67},
{"panicdottypeE", funcTag, 68},
{"panicdottypeI", funcTag, 68},
{"panicnildottype", funcTag, 69},
{"typeAssert", funcTag, 67},
{"interfaceSwitch", funcTag, 70},
{"ifaceeq", funcTag, 72},
{"efaceeq", funcTag, 72},
{"panicrangeexit", funcTag, 9},
{"deferrangefunc", funcTag, 73},
{"rand32", funcTag, 74},
{"makemap64", funcTag, 76},
{"makemap", funcTag, 77},
{"makemap_small", funcTag, 78},
{"mapaccess1", funcTag, 79},
{"mapaccess1_fast32", funcTag, 80},
{"mapaccess1_fast64", funcTag, 81},
{"mapaccess1_faststr", funcTag, 82},
{"mapaccess1_fat", funcTag, 83},
{"mapaccess2", funcTag, 84},
{"mapaccess2_fast32", funcTag, 85},
{"mapaccess2_fast64", funcTag, 86},
{"mapaccess2_faststr", funcTag, 87},
{"mapaccess2_fat", funcTag, 88},
{"mapassign", funcTag, 79},
{"mapassign_fast32", funcTag, 80},
{"mapassign_fast32ptr", funcTag, 89},
{"mapassign_fast64", funcTag, 81},
{"mapassign_fast64ptr", funcTag, 89},
{"mapassign_faststr", funcTag, 82},
{"mapiterinit", funcTag, 90},
{"mapdelete", funcTag, 90},
{"mapdelete_fast32", funcTag, 91},
{"mapdelete_fast64", funcTag, 92},
{"mapdelete_faststr", funcTag, 93},
{"mapiternext", funcTag, 94},
{"mapclear", funcTag, 95},
{"makechan64", funcTag, 97},
{"makechan", funcTag, 98},
{"chanrecv1", funcTag, 100},
{"chanrecv2", funcTag, 101},
{"chansend1", funcTag, 103},
{"closechan", funcTag, 30},
{"writeBarrier", varTag, 105},
{"typedmemmove", funcTag, 106},
{"typedmemclr", funcTag, 107},
{"typedslicecopy", funcTag, 108},
{"selectnbsend", funcTag, 109},
{"selectnbrecv", funcTag, 110},
{"selectsetpc", funcTag, 111},
{"selectgo", funcTag, 112},
{"block", funcTag, 9},
{"makeslice", funcTag, 113},
{"makeslice64", funcTag, 114},
{"makeslicecopy", funcTag, 115},
{"growslice", funcTag, 117},
{"unsafeslicecheckptr", funcTag, 118},
{"panicunsafeslicelen", funcTag, 9},
{"panicunsafeslicenilptr", funcTag, 9},
{"unsafestringcheckptr", funcTag, 119},
{"panicunsafestringlen", funcTag, 9},
{"panicunsafestringnilptr", funcTag, 9},
{"memmove", funcTag, 120},
{"memclrNoHeapPointers", funcTag, 121},
{"memclrHasPointers", funcTag, 121},
{"memequal", funcTag, 122},
{"memequal0", funcTag, 123},
{"memequal8", funcTag, 123},
{"memequal16", funcTag, 123},
{"memequal32", funcTag, 123},
{"memequal64", funcTag, 123},
{"memequal128", funcTag, 123},
{"f32equal", funcTag, 124},
{"f64equal", funcTag, 124},
{"c64equal", funcTag, 124},
{"c128equal", funcTag, 124},
{"strequal", funcTag, 124},
{"interequal", funcTag, 124},
{"nilinterequal", funcTag, 124},
{"memhash", funcTag, 125},
{"memhash0", funcTag, 126},
{"memhash8", funcTag, 126},
{"memhash16", funcTag, 126},
{"memhash32", funcTag, 126},
{"memhash64", funcTag, 126},
{"memhash128", funcTag, 126},
{"f32hash", funcTag, 127},
{"f64hash", funcTag, 127},
{"c64hash", funcTag, 127},
{"c128hash", funcTag, 127},
{"strhash", funcTag, 127},
{"interhash", funcTag, 127},
{"nilinterhash", funcTag, 127},
{"int64div", funcTag, 128},
{"uint64div", funcTag, 129},
{"int64mod", funcTag, 128},
{"uint64mod", funcTag, 129},
{"float64toint64", funcTag, 130},
{"float64touint64", funcTag, 131},
{"float64touint32", funcTag, 132},
{"int64tofloat64", funcTag, 133},
{"int64tofloat32", funcTag, 135},
{"uint64tofloat64", funcTag, 136},
{"uint64tofloat32", funcTag, 137},
{"uint32tofloat64", funcTag, 138},
{"complex128div", funcTag, 139},
{"getcallerpc", funcTag, 140},
{"getcallersp", funcTag, 140},
{"racefuncenter", funcTag, 31},
{"racefuncexit", funcTag, 9},
{"raceread", funcTag, 31},
{"racewrite", funcTag, 31},
{"racereadrange", funcTag, 141},
{"racewriterange", funcTag, 141},
{"msanread", funcTag, 141},
{"msanwrite", funcTag, 141},
{"msanmove", funcTag, 142},
{"asanread", funcTag, 141},
{"asanwrite", funcTag, 141},
{"checkptrAlignment", funcTag, 143},
{"checkptrArithmetic", funcTag, 145},
{"libfuzzerTraceCmp1", funcTag, 146},
{"libfuzzerTraceCmp2", funcTag, 147},
{"libfuzzerTraceCmp4", funcTag, 148},
{"libfuzzerTraceCmp8", funcTag, 149},
{"libfuzzerTraceConstCmp1", funcTag, 146},
{"libfuzzerTraceConstCmp2", funcTag, 147},
{"libfuzzerTraceConstCmp4", funcTag, 148},
{"libfuzzerTraceConstCmp8", funcTag, 149},
{"libfuzzerHookStrCmp", funcTag, 150},
{"libfuzzerHookEqualFold", funcTag, 150},
{"addCovMeta", funcTag, 152},
{"x86HasPOPCNT", varTag, 6},
{"x86HasSSE41", varTag, 6},
{"x86HasFMA", varTag, 6},
{"armHasVFPv4", varTag, 6},
{"arm64HasATOMICS", varTag, 6},
{"asanregisterglobals", funcTag, 121},
}
func runtimeTypes() []*types.Type {
var typs [153]*types.Type
typs[0] = types.ByteType
typs[1] = types.NewPtr(typs[0])
typs[2] = types.Types[types.TANY]
typs[3] = types.NewPtr(typs[2])
typs[4] = newSig(params(typs[1]), params(typs[3]))
typs[5] = types.Types[types.TUINTPTR]
typs[6] = types.Types[types.TBOOL]
typs[7] = types.Types[types.TUNSAFEPTR]
typs[8] = newSig(params(typs[5], typs[1], typs[6]), params(typs[7]))
typs[9] = newSig(nil, nil)
typs[10] = types.Types[types.TINTER]
typs[11] = newSig(params(typs[10]), nil)
typs[12] = types.Types[types.TINT32]
typs[13] = types.NewPtr(typs[12])
typs[14] = newSig(params(typs[13]), params(typs[10]))
typs[15] = types.Types[types.TINT]
typs[16] = newSig(params(typs[15], typs[15]), nil)
typs[17] = types.Types[types.TUINT]
typs[18] = newSig(params(typs[17], typs[15]), nil)
typs[19] = newSig(params(typs[6]), nil)
typs[20] = types.Types[types.TFLOAT64]
typs[21] = newSig(params(typs[20]), nil)
typs[22] = types.Types[types.TINT64]
typs[23] = newSig(params(typs[22]), nil)
typs[24] = types.Types[types.TUINT64]
typs[25] = newSig(params(typs[24]), nil)
typs[26] = types.Types[types.TCOMPLEX128]
typs[27] = newSig(params(typs[26]), nil)
typs[28] = types.Types[types.TSTRING]
typs[29] = newSig(params(typs[28]), nil)
typs[30] = newSig(params(typs[2]), nil)
typs[31] = newSig(params(typs[5]), nil)
typs[32] = types.NewArray(typs[0], 32)
typs[33] = types.NewPtr(typs[32])
typs[34] = newSig(params(typs[33], typs[28], typs[28]), params(typs[28]))
typs[35] = newSig(params(typs[33], typs[28], typs[28], typs[28]), params(typs[28]))
typs[36] = newSig(params(typs[33], typs[28], typs[28], typs[28], typs[28]), params(typs[28]))
typs[37] = newSig(params(typs[33], typs[28], typs[28], typs[28], typs[28], typs[28]), params(typs[28]))
typs[38] = types.NewSlice(typs[28])
typs[39] = newSig(params(typs[33], typs[38]), params(typs[28]))
typs[40] = newSig(params(typs[28], typs[28]), params(typs[15]))
typs[41] = types.NewArray(typs[0], 4)
typs[42] = types.NewPtr(typs[41])
typs[43] = newSig(params(typs[42], typs[22]), params(typs[28]))
typs[44] = newSig(params(typs[33], typs[1], typs[15]), params(typs[28]))
typs[45] = newSig(params(typs[1], typs[15]), params(typs[28]))
typs[46] = types.RuneType
typs[47] = types.NewSlice(typs[46])
typs[48] = newSig(params(typs[33], typs[47]), params(typs[28]))
typs[49] = types.NewSlice(typs[0])
typs[50] = newSig(params(typs[33], typs[28]), params(typs[49]))
typs[51] = types.NewArray(typs[46], 32)
typs[52] = types.NewPtr(typs[51])
typs[53] = newSig(params(typs[52], typs[28]), params(typs[47]))
typs[54] = newSig(params(typs[3], typs[15], typs[3], typs[15], typs[5]), params(typs[15]))
typs[55] = newSig(params(typs[28], typs[15]), params(typs[46], typs[15]))
typs[56] = newSig(params(typs[28]), params(typs[15]))
typs[57] = newSig(params(typs[1], typs[3]), params(typs[7]))
typs[58] = types.Types[types.TUINT16]
typs[59] = newSig(params(typs[58]), params(typs[7]))
typs[60] = types.Types[types.TUINT32]
typs[61] = newSig(params(typs[60]), params(typs[7]))
typs[62] = newSig(params(typs[24]), params(typs[7]))
typs[63] = newSig(params(typs[28]), params(typs[7]))
typs[64] = types.Types[types.TUINT8]
typs[65] = types.NewSlice(typs[64])
typs[66] = newSig(params(typs[65]), params(typs[7]))
typs[67] = newSig(params(typs[1], typs[1]), params(typs[1]))
typs[68] = newSig(params(typs[1], typs[1], typs[1]), nil)
typs[69] = newSig(params(typs[1]), nil)
typs[70] = newSig(params(typs[1], typs[1]), params(typs[15], typs[1]))
typs[71] = types.NewPtr(typs[5])
typs[72] = newSig(params(typs[71], typs[7], typs[7]), params(typs[6]))
typs[73] = newSig(nil, params(typs[10]))
typs[74] = newSig(nil, params(typs[60]))
typs[75] = types.NewMap(typs[2], typs[2])
typs[76] = newSig(params(typs[1], typs[22], typs[3]), params(typs[75]))
typs[77] = newSig(params(typs[1], typs[15], typs[3]), params(typs[75]))
typs[78] = newSig(nil, params(typs[75]))
typs[79] = newSig(params(typs[1], typs[75], typs[3]), params(typs[3]))
typs[80] = newSig(params(typs[1], typs[75], typs[60]), params(typs[3]))
typs[81] = newSig(params(typs[1], typs[75], typs[24]), params(typs[3]))
typs[82] = newSig(params(typs[1], typs[75], typs[28]), params(typs[3]))
typs[83] = newSig(params(typs[1], typs[75], typs[3], typs[1]), params(typs[3]))
typs[84] = newSig(params(typs[1], typs[75], typs[3]), params(typs[3], typs[6]))
typs[85] = newSig(params(typs[1], typs[75], typs[60]), params(typs[3], typs[6]))
typs[86] = newSig(params(typs[1], typs[75], typs[24]), params(typs[3], typs[6]))
typs[87] = newSig(params(typs[1], typs[75], typs[28]), params(typs[3], typs[6]))
typs[88] = newSig(params(typs[1], typs[75], typs[3], typs[1]), params(typs[3], typs[6]))
typs[89] = newSig(params(typs[1], typs[75], typs[7]), params(typs[3]))
typs[90] = newSig(params(typs[1], typs[75], typs[3]), nil)
typs[91] = newSig(params(typs[1], typs[75], typs[60]), nil)
typs[92] = newSig(params(typs[1], typs[75], typs[24]), nil)
typs[93] = newSig(params(typs[1], typs[75], typs[28]), nil)
typs[94] = newSig(params(typs[3]), nil)
typs[95] = newSig(params(typs[1], typs[75]), nil)
typs[96] = types.NewChan(typs[2], types.Cboth)
typs[97] = newSig(params(typs[1], typs[22]), params(typs[96]))
typs[98] = newSig(params(typs[1], typs[15]), params(typs[96]))
typs[99] = types.NewChan(typs[2], types.Crecv)
typs[100] = newSig(params(typs[99], typs[3]), nil)
typs[101] = newSig(params(typs[99], typs[3]), params(typs[6]))
typs[102] = types.NewChan(typs[2], types.Csend)
typs[103] = newSig(params(typs[102], typs[3]), nil)
typs[104] = types.NewArray(typs[0], 3)
typs[105] = types.NewStruct([]*types.Field{types.NewField(src.NoXPos, Lookup("enabled"), typs[6]), types.NewField(src.NoXPos, Lookup("pad"), typs[104]), types.NewField(src.NoXPos, Lookup("cgo"), typs[6]), types.NewField(src.NoXPos, Lookup("alignme"), typs[24])})
typs[106] = newSig(params(typs[1], typs[3], typs[3]), nil)
typs[107] = newSig(params(typs[1], typs[3]), nil)
typs[108] = newSig(params(typs[1], typs[3], typs[15], typs[3], typs[15]), params(typs[15]))
typs[109] = newSig(params(typs[102], typs[3]), params(typs[6]))
typs[110] = newSig(params(typs[3], typs[99]), params(typs[6], typs[6]))
typs[111] = newSig(params(typs[71]), nil)
typs[112] = newSig(params(typs[1], typs[1], typs[71], typs[15], typs[15], typs[6]), params(typs[15], typs[6]))
typs[113] = newSig(params(typs[1], typs[15], typs[15]), params(typs[7]))
typs[114] = newSig(params(typs[1], typs[22], typs[22]), params(typs[7]))
typs[115] = newSig(params(typs[1], typs[15], typs[15], typs[7]), params(typs[7]))
typs[116] = types.NewSlice(typs[2])
typs[117] = newSig(params(typs[3], typs[15], typs[15], typs[15], typs[1]), params(typs[116]))
typs[118] = newSig(params(typs[1], typs[7], typs[22]), nil)
typs[119] = newSig(params(typs[7], typs[22]), nil)
typs[120] = newSig(params(typs[3], typs[3], typs[5]), nil)
typs[121] = newSig(params(typs[7], typs[5]), nil)
typs[122] = newSig(params(typs[3], typs[3], typs[5]), params(typs[6]))
typs[123] = newSig(params(typs[3], typs[3]), params(typs[6]))
typs[124] = newSig(params(typs[7], typs[7]), params(typs[6]))
typs[125] = newSig(params(typs[3], typs[5], typs[5]), params(typs[5]))
typs[126] = newSig(params(typs[7], typs[5]), params(typs[5]))
typs[127] = newSig(params(typs[3], typs[5]), params(typs[5]))
typs[128] = newSig(params(typs[22], typs[22]), params(typs[22]))
typs[129] = newSig(params(typs[24], typs[24]), params(typs[24]))
typs[130] = newSig(params(typs[20]), params(typs[22]))
typs[131] = newSig(params(typs[20]), params(typs[24]))
typs[132] = newSig(params(typs[20]), params(typs[60]))
typs[133] = newSig(params(typs[22]), params(typs[20]))
typs[134] = types.Types[types.TFLOAT32]
typs[135] = newSig(params(typs[22]), params(typs[134]))
typs[136] = newSig(params(typs[24]), params(typs[20]))
typs[137] = newSig(params(typs[24]), params(typs[134]))
typs[138] = newSig(params(typs[60]), params(typs[20]))
typs[139] = newSig(params(typs[26], typs[26]), params(typs[26]))
typs[140] = newSig(nil, params(typs[5]))
typs[141] = newSig(params(typs[5], typs[5]), nil)
typs[142] = newSig(params(typs[5], typs[5], typs[5]), nil)
typs[143] = newSig(params(typs[7], typs[1], typs[5]), nil)
typs[144] = types.NewSlice(typs[7])
typs[145] = newSig(params(typs[7], typs[144]), nil)
typs[146] = newSig(params(typs[64], typs[64], typs[17]), nil)
typs[147] = newSig(params(typs[58], typs[58], typs[17]), nil)
typs[148] = newSig(params(typs[60], typs[60], typs[17]), nil)
typs[149] = newSig(params(typs[24], typs[24], typs[17]), nil)
typs[150] = newSig(params(typs[28], typs[28], typs[17]), nil)
typs[151] = types.NewArray(typs[0], 16)
typs[152] = newSig(params(typs[7], typs[60], typs[151], typs[28], typs[15], typs[64], typs[64]), params(typs[60]))
return typs[:]
}
var coverageDecls = [...]struct {
name string
tag int
typ int
}{
{"initHook", funcTag, 1},
}
func coverageTypes() []*types.Type {
var typs [2]*types.Type
typs[0] = types.Types[types.TBOOL]
typs[1] = newSig(params(typs[0]), nil)
return typs[:]
}