1
2
3
4
5 package main
6
7
8
9
10
11
12
13
14
15
16
17
18 var genericOps = []opData{
19
20
21
22 {name: "Add8", argLength: 2, commutative: true},
23 {name: "Add16", argLength: 2, commutative: true},
24 {name: "Add32", argLength: 2, commutative: true},
25 {name: "Add64", argLength: 2, commutative: true},
26 {name: "AddPtr", argLength: 2},
27 {name: "Add32F", argLength: 2, commutative: true},
28 {name: "Add64F", argLength: 2, commutative: true},
29
30 {name: "Sub8", argLength: 2},
31 {name: "Sub16", argLength: 2},
32 {name: "Sub32", argLength: 2},
33 {name: "Sub64", argLength: 2},
34 {name: "SubPtr", argLength: 2},
35 {name: "Sub32F", argLength: 2},
36 {name: "Sub64F", argLength: 2},
37
38 {name: "Mul8", argLength: 2, commutative: true},
39 {name: "Mul16", argLength: 2, commutative: true},
40 {name: "Mul32", argLength: 2, commutative: true},
41 {name: "Mul64", argLength: 2, commutative: true},
42 {name: "Mul32F", argLength: 2, commutative: true},
43 {name: "Mul64F", argLength: 2, commutative: true},
44
45 {name: "Div32F", argLength: 2},
46 {name: "Div64F", argLength: 2},
47
48 {name: "Hmul32", argLength: 2, commutative: true},
49 {name: "Hmul32u", argLength: 2, commutative: true},
50 {name: "Hmul64", argLength: 2, commutative: true},
51 {name: "Hmul64u", argLength: 2, commutative: true},
52
53 {name: "Mul32uhilo", argLength: 2, typ: "(UInt32,UInt32)", commutative: true},
54 {name: "Mul64uhilo", argLength: 2, typ: "(UInt64,UInt64)", commutative: true},
55
56 {name: "Mul32uover", argLength: 2, typ: "(UInt32,Bool)", commutative: true},
57 {name: "Mul64uover", argLength: 2, typ: "(UInt64,Bool)", commutative: true},
58
59
60
61
62
63
64 {name: "Avg32u", argLength: 2, typ: "UInt32"},
65 {name: "Avg64u", argLength: 2, typ: "UInt64"},
66
67
68
69 {name: "Div8", argLength: 2},
70 {name: "Div8u", argLength: 2},
71 {name: "Div16", argLength: 2, aux: "Bool"},
72 {name: "Div16u", argLength: 2},
73 {name: "Div32", argLength: 2, aux: "Bool"},
74 {name: "Div32u", argLength: 2},
75 {name: "Div64", argLength: 2, aux: "Bool"},
76 {name: "Div64u", argLength: 2},
77 {name: "Div128u", argLength: 3},
78
79
80 {name: "Mod8", argLength: 2},
81 {name: "Mod8u", argLength: 2},
82 {name: "Mod16", argLength: 2, aux: "Bool"},
83 {name: "Mod16u", argLength: 2},
84 {name: "Mod32", argLength: 2, aux: "Bool"},
85 {name: "Mod32u", argLength: 2},
86 {name: "Mod64", argLength: 2, aux: "Bool"},
87 {name: "Mod64u", argLength: 2},
88
89 {name: "And8", argLength: 2, commutative: true},
90 {name: "And16", argLength: 2, commutative: true},
91 {name: "And32", argLength: 2, commutative: true},
92 {name: "And64", argLength: 2, commutative: true},
93
94 {name: "Or8", argLength: 2, commutative: true},
95 {name: "Or16", argLength: 2, commutative: true},
96 {name: "Or32", argLength: 2, commutative: true},
97 {name: "Or64", argLength: 2, commutative: true},
98
99 {name: "Xor8", argLength: 2, commutative: true},
100 {name: "Xor16", argLength: 2, commutative: true},
101 {name: "Xor32", argLength: 2, commutative: true},
102 {name: "Xor64", argLength: 2, commutative: true},
103
104
105
106
107
108
109 {name: "Lsh8x8", argLength: 2, aux: "Bool"},
110 {name: "Lsh8x16", argLength: 2, aux: "Bool"},
111 {name: "Lsh8x32", argLength: 2, aux: "Bool"},
112 {name: "Lsh8x64", argLength: 2, aux: "Bool"},
113 {name: "Lsh16x8", argLength: 2, aux: "Bool"},
114 {name: "Lsh16x16", argLength: 2, aux: "Bool"},
115 {name: "Lsh16x32", argLength: 2, aux: "Bool"},
116 {name: "Lsh16x64", argLength: 2, aux: "Bool"},
117 {name: "Lsh32x8", argLength: 2, aux: "Bool"},
118 {name: "Lsh32x16", argLength: 2, aux: "Bool"},
119 {name: "Lsh32x32", argLength: 2, aux: "Bool"},
120 {name: "Lsh32x64", argLength: 2, aux: "Bool"},
121 {name: "Lsh64x8", argLength: 2, aux: "Bool"},
122 {name: "Lsh64x16", argLength: 2, aux: "Bool"},
123 {name: "Lsh64x32", argLength: 2, aux: "Bool"},
124 {name: "Lsh64x64", argLength: 2, aux: "Bool"},
125
126 {name: "Rsh8x8", argLength: 2, aux: "Bool"},
127 {name: "Rsh8x16", argLength: 2, aux: "Bool"},
128 {name: "Rsh8x32", argLength: 2, aux: "Bool"},
129 {name: "Rsh8x64", argLength: 2, aux: "Bool"},
130 {name: "Rsh16x8", argLength: 2, aux: "Bool"},
131 {name: "Rsh16x16", argLength: 2, aux: "Bool"},
132 {name: "Rsh16x32", argLength: 2, aux: "Bool"},
133 {name: "Rsh16x64", argLength: 2, aux: "Bool"},
134 {name: "Rsh32x8", argLength: 2, aux: "Bool"},
135 {name: "Rsh32x16", argLength: 2, aux: "Bool"},
136 {name: "Rsh32x32", argLength: 2, aux: "Bool"},
137 {name: "Rsh32x64", argLength: 2, aux: "Bool"},
138 {name: "Rsh64x8", argLength: 2, aux: "Bool"},
139 {name: "Rsh64x16", argLength: 2, aux: "Bool"},
140 {name: "Rsh64x32", argLength: 2, aux: "Bool"},
141 {name: "Rsh64x64", argLength: 2, aux: "Bool"},
142
143 {name: "Rsh8Ux8", argLength: 2, aux: "Bool"},
144 {name: "Rsh8Ux16", argLength: 2, aux: "Bool"},
145 {name: "Rsh8Ux32", argLength: 2, aux: "Bool"},
146 {name: "Rsh8Ux64", argLength: 2, aux: "Bool"},
147 {name: "Rsh16Ux8", argLength: 2, aux: "Bool"},
148 {name: "Rsh16Ux16", argLength: 2, aux: "Bool"},
149 {name: "Rsh16Ux32", argLength: 2, aux: "Bool"},
150 {name: "Rsh16Ux64", argLength: 2, aux: "Bool"},
151 {name: "Rsh32Ux8", argLength: 2, aux: "Bool"},
152 {name: "Rsh32Ux16", argLength: 2, aux: "Bool"},
153 {name: "Rsh32Ux32", argLength: 2, aux: "Bool"},
154 {name: "Rsh32Ux64", argLength: 2, aux: "Bool"},
155 {name: "Rsh64Ux8", argLength: 2, aux: "Bool"},
156 {name: "Rsh64Ux16", argLength: 2, aux: "Bool"},
157 {name: "Rsh64Ux32", argLength: 2, aux: "Bool"},
158 {name: "Rsh64Ux64", argLength: 2, aux: "Bool"},
159
160
161 {name: "Eq8", argLength: 2, commutative: true, typ: "Bool"},
162 {name: "Eq16", argLength: 2, commutative: true, typ: "Bool"},
163 {name: "Eq32", argLength: 2, commutative: true, typ: "Bool"},
164 {name: "Eq64", argLength: 2, commutative: true, typ: "Bool"},
165 {name: "EqPtr", argLength: 2, commutative: true, typ: "Bool"},
166 {name: "EqInter", argLength: 2, typ: "Bool"},
167 {name: "EqSlice", argLength: 2, typ: "Bool"},
168 {name: "Eq32F", argLength: 2, commutative: true, typ: "Bool"},
169 {name: "Eq64F", argLength: 2, commutative: true, typ: "Bool"},
170
171 {name: "Neq8", argLength: 2, commutative: true, typ: "Bool"},
172 {name: "Neq16", argLength: 2, commutative: true, typ: "Bool"},
173 {name: "Neq32", argLength: 2, commutative: true, typ: "Bool"},
174 {name: "Neq64", argLength: 2, commutative: true, typ: "Bool"},
175 {name: "NeqPtr", argLength: 2, commutative: true, typ: "Bool"},
176 {name: "NeqInter", argLength: 2, typ: "Bool"},
177 {name: "NeqSlice", argLength: 2, typ: "Bool"},
178 {name: "Neq32F", argLength: 2, commutative: true, typ: "Bool"},
179 {name: "Neq64F", argLength: 2, commutative: true, typ: "Bool"},
180
181 {name: "Less8", argLength: 2, typ: "Bool"},
182 {name: "Less8U", argLength: 2, typ: "Bool"},
183 {name: "Less16", argLength: 2, typ: "Bool"},
184 {name: "Less16U", argLength: 2, typ: "Bool"},
185 {name: "Less32", argLength: 2, typ: "Bool"},
186 {name: "Less32U", argLength: 2, typ: "Bool"},
187 {name: "Less64", argLength: 2, typ: "Bool"},
188 {name: "Less64U", argLength: 2, typ: "Bool"},
189 {name: "Less32F", argLength: 2, typ: "Bool"},
190 {name: "Less64F", argLength: 2, typ: "Bool"},
191
192 {name: "Leq8", argLength: 2, typ: "Bool"},
193 {name: "Leq8U", argLength: 2, typ: "Bool"},
194 {name: "Leq16", argLength: 2, typ: "Bool"},
195 {name: "Leq16U", argLength: 2, typ: "Bool"},
196 {name: "Leq32", argLength: 2, typ: "Bool"},
197 {name: "Leq32U", argLength: 2, typ: "Bool"},
198 {name: "Leq64", argLength: 2, typ: "Bool"},
199 {name: "Leq64U", argLength: 2, typ: "Bool"},
200 {name: "Leq32F", argLength: 2, typ: "Bool"},
201 {name: "Leq64F", argLength: 2, typ: "Bool"},
202
203
204
205
206 {name: "CondSelect", argLength: 3},
207
208
209 {name: "AndB", argLength: 2, commutative: true, typ: "Bool"},
210 {name: "OrB", argLength: 2, commutative: true, typ: "Bool"},
211 {name: "EqB", argLength: 2, commutative: true, typ: "Bool"},
212 {name: "NeqB", argLength: 2, commutative: true, typ: "Bool"},
213 {name: "Not", argLength: 1, typ: "Bool"},
214
215
216 {name: "Neg8", argLength: 1},
217 {name: "Neg16", argLength: 1},
218 {name: "Neg32", argLength: 1},
219 {name: "Neg64", argLength: 1},
220 {name: "Neg32F", argLength: 1},
221 {name: "Neg64F", argLength: 1},
222
223 {name: "Com8", argLength: 1},
224 {name: "Com16", argLength: 1},
225 {name: "Com32", argLength: 1},
226 {name: "Com64", argLength: 1},
227
228 {name: "Ctz8", argLength: 1},
229 {name: "Ctz16", argLength: 1},
230 {name: "Ctz32", argLength: 1},
231 {name: "Ctz64", argLength: 1},
232 {name: "Ctz64On32", argLength: 2},
233 {name: "Ctz8NonZero", argLength: 1},
234 {name: "Ctz16NonZero", argLength: 1},
235 {name: "Ctz32NonZero", argLength: 1},
236 {name: "Ctz64NonZero", argLength: 1},
237 {name: "BitLen8", argLength: 1},
238 {name: "BitLen16", argLength: 1},
239 {name: "BitLen32", argLength: 1},
240 {name: "BitLen64", argLength: 1},
241
242 {name: "Bswap16", argLength: 1},
243 {name: "Bswap32", argLength: 1},
244 {name: "Bswap64", argLength: 1},
245
246 {name: "BitRev8", argLength: 1},
247 {name: "BitRev16", argLength: 1},
248 {name: "BitRev32", argLength: 1},
249 {name: "BitRev64", argLength: 1},
250
251 {name: "PopCount8", argLength: 1},
252 {name: "PopCount16", argLength: 1},
253 {name: "PopCount32", argLength: 1},
254 {name: "PopCount64", argLength: 1},
255
256
257
258
259
260 {name: "RotateLeft64", argLength: 2},
261 {name: "RotateLeft32", argLength: 2},
262 {name: "RotateLeft16", argLength: 2},
263 {name: "RotateLeft8", argLength: 2},
264
265
266
267
268
269
270
271 {name: "Sqrt", argLength: 1},
272 {name: "Sqrt32", argLength: 1},
273
274
275
276
277
278
279 {name: "Floor", argLength: 1},
280 {name: "Ceil", argLength: 1},
281 {name: "Trunc", argLength: 1},
282 {name: "Round", argLength: 1},
283 {name: "RoundToEven", argLength: 1},
284
285
286 {name: "Abs", argLength: 1},
287 {name: "Copysign", argLength: 2},
288
289
290 {name: "Min64", argLength: 2},
291 {name: "Max64", argLength: 2},
292 {name: "Min64u", argLength: 2},
293 {name: "Max64u", argLength: 2},
294
295
296 {name: "Min64F", argLength: 2},
297 {name: "Min32F", argLength: 2},
298 {name: "Max64F", argLength: 2},
299 {name: "Max32F", argLength: 2},
300
301
302
303
304
305
306
307
308
309
310
311
312
313 {name: "FMA", argLength: 3},
314
315
316 {name: "Phi", argLength: -1, zeroWidth: true},
317 {name: "Copy", argLength: 1},
318
319
320
321
322
323
324
325
326 {name: "Convert", argLength: 2, zeroWidth: true, resultInArg0: true},
327
328
329
330 {name: "ConstBool", aux: "Bool"},
331 {name: "ConstString", aux: "String"},
332 {name: "ConstNil", typ: "BytePtr"},
333 {name: "Const8", aux: "Int8"},
334 {name: "Const16", aux: "Int16"},
335 {name: "Const32", aux: "Int32"},
336
337
338 {name: "Const64", aux: "Int64"},
339
340
341
342
343
344 {name: "Const32F", aux: "Float32"},
345 {name: "Const64F", aux: "Float64"},
346 {name: "ConstInterface"},
347 {name: "ConstSlice"},
348
349
350 {name: "InitMem", zeroWidth: true},
351 {name: "Arg", aux: "SymOff", symEffect: "Read", zeroWidth: true},
352
353
354
355 {name: "ArgIntReg", aux: "NameOffsetInt8", zeroWidth: true},
356 {name: "ArgFloatReg", aux: "NameOffsetInt8", zeroWidth: true},
357
358
359
360
361
362
363 {name: "Addr", argLength: 1, aux: "Sym", symEffect: "Addr"},
364 {name: "LocalAddr", argLength: 2, aux: "Sym", symEffect: "Addr"},
365
366 {name: "SP", zeroWidth: true},
367 {name: "SB", typ: "Uintptr", zeroWidth: true},
368 {name: "Invalid"},
369 {name: "SPanchored", typ: "Uintptr", argLength: 2, zeroWidth: true},
370
371
372 {name: "Load", argLength: 2},
373 {name: "Dereference", argLength: 2},
374 {name: "Store", argLength: 3, typ: "Mem", aux: "Typ"},
375
376
377
378
379
380
381
382
383
384
385
386
387 {name: "Move", argLength: 3, typ: "Mem", aux: "TypSize"},
388 {name: "Zero", argLength: 2, typ: "Mem", aux: "TypSize"},
389
390
391
392 {name: "StoreWB", argLength: 3, typ: "Mem", aux: "Typ"},
393 {name: "MoveWB", argLength: 3, typ: "Mem", aux: "TypSize"},
394 {name: "ZeroWB", argLength: 2, typ: "Mem", aux: "TypSize"},
395 {name: "WBend", argLength: 1, typ: "Mem"},
396
397
398
399
400
401 {name: "WB", argLength: 1, typ: "(BytePtr,Mem)", aux: "Int64"},
402
403 {name: "HasCPUFeature", argLength: 0, typ: "bool", aux: "Sym", symEffect: "None"},
404
405
406
407
408
409
410 {name: "PanicBounds", argLength: 3, aux: "Int64", typ: "Mem", call: true},
411 {name: "PanicExtend", argLength: 4, aux: "Int64", typ: "Mem", call: true},
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437 {name: "ClosureCall", argLength: -1, aux: "CallOff", call: true},
438 {name: "StaticCall", argLength: -1, aux: "CallOff", call: true},
439 {name: "InterCall", argLength: -1, aux: "CallOff", call: true},
440 {name: "TailCall", argLength: -1, aux: "CallOff", call: true},
441
442 {name: "ClosureLECall", argLength: -1, aux: "CallOff", call: true},
443 {name: "StaticLECall", argLength: -1, aux: "CallOff", call: true},
444 {name: "InterLECall", argLength: -1, aux: "CallOff", call: true},
445 {name: "TailLECall", argLength: -1, aux: "CallOff", call: true},
446
447
448 {name: "SignExt8to16", argLength: 1, typ: "Int16"},
449 {name: "SignExt8to32", argLength: 1, typ: "Int32"},
450 {name: "SignExt8to64", argLength: 1, typ: "Int64"},
451 {name: "SignExt16to32", argLength: 1, typ: "Int32"},
452 {name: "SignExt16to64", argLength: 1, typ: "Int64"},
453 {name: "SignExt32to64", argLength: 1, typ: "Int64"},
454 {name: "ZeroExt8to16", argLength: 1, typ: "UInt16"},
455 {name: "ZeroExt8to32", argLength: 1, typ: "UInt32"},
456 {name: "ZeroExt8to64", argLength: 1, typ: "UInt64"},
457 {name: "ZeroExt16to32", argLength: 1, typ: "UInt32"},
458 {name: "ZeroExt16to64", argLength: 1, typ: "UInt64"},
459 {name: "ZeroExt32to64", argLength: 1, typ: "UInt64"},
460 {name: "Trunc16to8", argLength: 1},
461 {name: "Trunc32to8", argLength: 1},
462 {name: "Trunc32to16", argLength: 1},
463 {name: "Trunc64to8", argLength: 1},
464 {name: "Trunc64to16", argLength: 1},
465 {name: "Trunc64to32", argLength: 1},
466
467 {name: "Cvt32to32F", argLength: 1},
468 {name: "Cvt32to64F", argLength: 1},
469 {name: "Cvt64to32F", argLength: 1},
470 {name: "Cvt64to64F", argLength: 1},
471 {name: "Cvt32Fto32", argLength: 1},
472 {name: "Cvt32Fto64", argLength: 1},
473 {name: "Cvt64Fto32", argLength: 1},
474 {name: "Cvt64Fto64", argLength: 1},
475 {name: "Cvt32Fto64F", argLength: 1},
476 {name: "Cvt64Fto32F", argLength: 1},
477 {name: "CvtBoolToUint8", argLength: 1},
478
479
480 {name: "Round32F", argLength: 1},
481 {name: "Round64F", argLength: 1},
482
483
484 {name: "IsNonNil", argLength: 1, typ: "Bool"},
485 {name: "IsInBounds", argLength: 2, typ: "Bool"},
486 {name: "IsSliceInBounds", argLength: 2, typ: "Bool"},
487 {name: "NilCheck", argLength: 2, nilCheck: true},
488
489
490 {name: "GetG", argLength: 1, zeroWidth: true},
491 {name: "GetClosurePtr"},
492 {name: "GetCallerPC"},
493 {name: "GetCallerSP", argLength: 1},
494
495
496 {name: "PtrIndex", argLength: 2},
497 {name: "OffPtr", argLength: 1, aux: "Int64"},
498
499
500 {name: "SliceMake", argLength: 3},
501 {name: "SlicePtr", argLength: 1, typ: "BytePtr"},
502 {name: "SliceLen", argLength: 1},
503 {name: "SliceCap", argLength: 1},
504
505
506
507 {name: "SlicePtrUnchecked", argLength: 1},
508
509
510 {name: "ComplexMake", argLength: 2},
511 {name: "ComplexReal", argLength: 1},
512 {name: "ComplexImag", argLength: 1},
513
514
515 {name: "StringMake", argLength: 2},
516 {name: "StringPtr", argLength: 1, typ: "BytePtr"},
517 {name: "StringLen", argLength: 1, typ: "Int"},
518
519
520 {name: "IMake", argLength: 2},
521 {name: "ITab", argLength: 1, typ: "Uintptr"},
522 {name: "IData", argLength: 1},
523
524
525 {name: "StructMake", argLength: -1},
526 {name: "StructSelect", argLength: 1, aux: "Int64"},
527
528
529 {name: "ArrayMake0"},
530 {name: "ArrayMake1", argLength: 1},
531 {name: "ArraySelect", argLength: 1, aux: "Int64"},
532
533
534
535
536
537 {name: "StoreReg", argLength: 1},
538 {name: "LoadReg", argLength: 1},
539
540
541 {name: "FwdRef", aux: "Sym", symEffect: "None"},
542
543
544 {name: "Unknown"},
545
546 {name: "VarDef", argLength: 1, aux: "Sym", typ: "Mem", symEffect: "None", zeroWidth: true},
547
548 {name: "VarLive", argLength: 1, aux: "Sym", symEffect: "Read", zeroWidth: true},
549 {name: "KeepAlive", argLength: 2, typ: "Mem", zeroWidth: true},
550
551
552
553 {name: "InlMark", argLength: 1, aux: "Int32", typ: "Void"},
554
555
556 {name: "Int64Make", argLength: 2, typ: "UInt64"},
557 {name: "Int64Hi", argLength: 1, typ: "UInt32"},
558 {name: "Int64Lo", argLength: 1, typ: "UInt32"},
559
560 {name: "Add32carry", argLength: 2, commutative: true, typ: "(UInt32,Flags)"},
561 {name: "Add32withcarry", argLength: 3, commutative: true},
562
563 {name: "Sub32carry", argLength: 2, typ: "(UInt32,Flags)"},
564 {name: "Sub32withcarry", argLength: 3},
565
566 {name: "Add64carry", argLength: 3, commutative: true, typ: "(UInt64,UInt64)"},
567 {name: "Sub64borrow", argLength: 3, typ: "(UInt64,UInt64)"},
568
569 {name: "Signmask", argLength: 1, typ: "Int32"},
570 {name: "Zeromask", argLength: 1, typ: "UInt32"},
571 {name: "Slicemask", argLength: 1},
572
573 {name: "SpectreIndex", argLength: 2},
574 {name: "SpectreSliceIndex", argLength: 2},
575
576 {name: "Cvt32Uto32F", argLength: 1},
577 {name: "Cvt32Uto64F", argLength: 1},
578 {name: "Cvt32Fto32U", argLength: 1},
579 {name: "Cvt64Fto32U", argLength: 1},
580 {name: "Cvt64Uto32F", argLength: 1},
581 {name: "Cvt64Uto64F", argLength: 1},
582 {name: "Cvt32Fto64U", argLength: 1},
583 {name: "Cvt64Fto64U", argLength: 1},
584
585
586 {name: "Select0", argLength: 1, zeroWidth: true},
587 {name: "Select1", argLength: 1, zeroWidth: true},
588 {name: "SelectN", argLength: 1, aux: "Int64"},
589 {name: "SelectNAddr", argLength: 1, aux: "Int64"},
590 {name: "MakeResult", argLength: -1},
591
592
593
594
595
596 {name: "AtomicLoad8", argLength: 2, typ: "(UInt8,Mem)"},
597 {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"},
598 {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"},
599 {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"},
600 {name: "AtomicLoadAcq32", argLength: 2, typ: "(UInt32,Mem)"},
601 {name: "AtomicLoadAcq64", argLength: 2, typ: "(UInt64,Mem)"},
602 {name: "AtomicStore8", argLength: 3, typ: "Mem", hasSideEffects: true},
603 {name: "AtomicStore32", argLength: 3, typ: "Mem", hasSideEffects: true},
604 {name: "AtomicStore64", argLength: 3, typ: "Mem", hasSideEffects: true},
605 {name: "AtomicStorePtrNoWB", argLength: 3, typ: "Mem", hasSideEffects: true},
606 {name: "AtomicStoreRel32", argLength: 3, typ: "Mem", hasSideEffects: true},
607 {name: "AtomicStoreRel64", argLength: 3, typ: "Mem", hasSideEffects: true},
608 {name: "AtomicExchange8", argLength: 3, typ: "(UInt8,Mem)", hasSideEffects: true},
609 {name: "AtomicExchange32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
610 {name: "AtomicExchange64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
611 {name: "AtomicAdd32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
612 {name: "AtomicAdd64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
613 {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
614 {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
615 {name: "AtomicCompareAndSwapRel32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
616
617
618 {name: "AtomicAnd8", argLength: 3, typ: "Mem", hasSideEffects: true},
619 {name: "AtomicOr8", argLength: 3, typ: "Mem", hasSideEffects: true},
620 {name: "AtomicAnd32", argLength: 3, typ: "Mem", hasSideEffects: true},
621 {name: "AtomicOr32", argLength: 3, typ: "Mem", hasSideEffects: true},
622
623
624 {name: "AtomicAnd64value", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true},
625 {name: "AtomicAnd32value", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true},
626 {name: "AtomicAnd8value", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true},
627 {name: "AtomicOr64value", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true},
628 {name: "AtomicOr32value", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true},
629 {name: "AtomicOr8value", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true},
630
631
632
633
634
635
636 {name: "AtomicStore8Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
637 {name: "AtomicStore32Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
638 {name: "AtomicStore64Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
639
640 {name: "AtomicAdd32Variant", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
641 {name: "AtomicAdd64Variant", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
642 {name: "AtomicExchange8Variant", argLength: 3, typ: "(UInt8,Mem)", hasSideEffects: true},
643 {name: "AtomicExchange32Variant", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
644 {name: "AtomicExchange64Variant", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
645 {name: "AtomicCompareAndSwap32Variant", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
646 {name: "AtomicCompareAndSwap64Variant", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
647 {name: "AtomicAnd64valueVariant", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true},
648 {name: "AtomicOr64valueVariant", argLength: 3, typ: "(Uint64, Mem)", hasSideEffects: true},
649 {name: "AtomicAnd32valueVariant", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true},
650 {name: "AtomicOr32valueVariant", argLength: 3, typ: "(Uint32, Mem)", hasSideEffects: true},
651 {name: "AtomicAnd8valueVariant", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true},
652 {name: "AtomicOr8valueVariant", argLength: 3, typ: "(Uint8, Mem)", hasSideEffects: true},
653
654
655 {name: "PubBarrier", argLength: 1, hasSideEffects: true},
656
657
658 {name: "Clobber", argLength: 0, typ: "Void", aux: "SymOff", symEffect: "None"},
659 {name: "ClobberReg", argLength: 0, typ: "Void"},
660
661
662 {name: "PrefetchCache", argLength: 2, hasSideEffects: true},
663 {name: "PrefetchCacheStreamed", argLength: 2, hasSideEffects: true},
664 }
665
666
667
668
669
670
671
672
673
674
675
676
677 var genericBlocks = []blockData{
678 {name: "Plain"},
679 {name: "If", controls: 1},
680 {name: "Defer", controls: 1},
681 {name: "Ret", controls: 1},
682 {name: "RetJmp", controls: 1},
683 {name: "Exit", controls: 1},
684 {name: "JumpTable", controls: 1},
685
686
687 {name: "First"},
688 }
689
690 func init() {
691 archs = append(archs, arch{
692 name: "generic",
693 ops: genericOps,
694 blocks: genericBlocks,
695 generic: true,
696 })
697 }
698
View as plain text