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: "Ctz8NonZero", argLength: 1},
233 {name: "Ctz16NonZero", argLength: 1},
234 {name: "Ctz32NonZero", argLength: 1},
235 {name: "Ctz64NonZero", argLength: 1},
236 {name: "BitLen8", argLength: 1},
237 {name: "BitLen16", argLength: 1},
238 {name: "BitLen32", argLength: 1},
239 {name: "BitLen64", argLength: 1},
240
241 {name: "Bswap16", argLength: 1},
242 {name: "Bswap32", argLength: 1},
243 {name: "Bswap64", argLength: 1},
244
245 {name: "BitRev8", argLength: 1},
246 {name: "BitRev16", argLength: 1},
247 {name: "BitRev32", argLength: 1},
248 {name: "BitRev64", argLength: 1},
249
250 {name: "PopCount8", argLength: 1},
251 {name: "PopCount16", argLength: 1},
252 {name: "PopCount32", argLength: 1},
253 {name: "PopCount64", argLength: 1},
254
255
256
257
258
259 {name: "RotateLeft64", argLength: 2},
260 {name: "RotateLeft32", argLength: 2},
261 {name: "RotateLeft16", argLength: 2},
262 {name: "RotateLeft8", argLength: 2},
263
264
265
266
267
268
269
270 {name: "Sqrt", argLength: 1},
271 {name: "Sqrt32", argLength: 1},
272
273
274
275
276
277
278 {name: "Floor", argLength: 1},
279 {name: "Ceil", argLength: 1},
280 {name: "Trunc", argLength: 1},
281 {name: "Round", argLength: 1},
282 {name: "RoundToEven", argLength: 1},
283
284
285 {name: "Abs", argLength: 1},
286 {name: "Copysign", argLength: 2},
287
288
289 {name: "Min64F", argLength: 2},
290 {name: "Min32F", argLength: 2},
291 {name: "Max64F", argLength: 2},
292 {name: "Max32F", argLength: 2},
293
294
295
296
297
298
299
300
301
302
303
304
305
306 {name: "FMA", argLength: 3},
307
308
309 {name: "Phi", argLength: -1, zeroWidth: true},
310 {name: "Copy", argLength: 1},
311
312
313
314
315
316
317
318
319 {name: "Convert", argLength: 2, zeroWidth: true, resultInArg0: true},
320
321
322
323 {name: "ConstBool", aux: "Bool"},
324 {name: "ConstString", aux: "String"},
325 {name: "ConstNil", typ: "BytePtr"},
326 {name: "Const8", aux: "Int8"},
327 {name: "Const16", aux: "Int16"},
328 {name: "Const32", aux: "Int32"},
329
330
331 {name: "Const64", aux: "Int64"},
332
333
334
335
336
337 {name: "Const32F", aux: "Float32"},
338 {name: "Const64F", aux: "Float64"},
339 {name: "ConstInterface"},
340 {name: "ConstSlice"},
341
342
343 {name: "InitMem", zeroWidth: true},
344 {name: "Arg", aux: "SymOff", symEffect: "Read", zeroWidth: true},
345
346
347
348 {name: "ArgIntReg", aux: "NameOffsetInt8", zeroWidth: true},
349 {name: "ArgFloatReg", aux: "NameOffsetInt8", zeroWidth: true},
350
351
352
353
354
355
356 {name: "Addr", argLength: 1, aux: "Sym", symEffect: "Addr"},
357 {name: "LocalAddr", argLength: 2, aux: "Sym", symEffect: "Addr"},
358
359 {name: "SP", zeroWidth: true},
360 {name: "SB", typ: "Uintptr", zeroWidth: true},
361 {name: "Invalid"},
362 {name: "SPanchored", typ: "Uintptr", argLength: 2, zeroWidth: true},
363
364
365 {name: "Load", argLength: 2},
366 {name: "Dereference", argLength: 2},
367 {name: "Store", argLength: 3, typ: "Mem", aux: "Typ"},
368
369
370
371
372
373
374
375
376
377
378
379
380 {name: "Move", argLength: 3, typ: "Mem", aux: "TypSize"},
381 {name: "Zero", argLength: 2, typ: "Mem", aux: "TypSize"},
382
383
384
385 {name: "StoreWB", argLength: 3, typ: "Mem", aux: "Typ"},
386 {name: "MoveWB", argLength: 3, typ: "Mem", aux: "TypSize"},
387 {name: "ZeroWB", argLength: 2, typ: "Mem", aux: "TypSize"},
388 {name: "WBend", argLength: 1, typ: "Mem"},
389
390
391
392
393
394 {name: "WB", argLength: 1, typ: "(BytePtr,Mem)", aux: "Int64"},
395
396 {name: "HasCPUFeature", argLength: 0, typ: "bool", aux: "Sym", symEffect: "None"},
397
398
399
400
401
402
403 {name: "PanicBounds", argLength: 3, aux: "Int64", typ: "Mem", call: true},
404 {name: "PanicExtend", argLength: 4, aux: "Int64", typ: "Mem", call: true},
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430 {name: "ClosureCall", argLength: -1, aux: "CallOff", call: true},
431 {name: "StaticCall", argLength: -1, aux: "CallOff", call: true},
432 {name: "InterCall", argLength: -1, aux: "CallOff", call: true},
433 {name: "TailCall", argLength: -1, aux: "CallOff", call: true},
434
435 {name: "ClosureLECall", argLength: -1, aux: "CallOff", call: true},
436 {name: "StaticLECall", argLength: -1, aux: "CallOff", call: true},
437 {name: "InterLECall", argLength: -1, aux: "CallOff", call: true},
438 {name: "TailLECall", argLength: -1, aux: "CallOff", call: true},
439
440
441 {name: "SignExt8to16", argLength: 1, typ: "Int16"},
442 {name: "SignExt8to32", argLength: 1, typ: "Int32"},
443 {name: "SignExt8to64", argLength: 1, typ: "Int64"},
444 {name: "SignExt16to32", argLength: 1, typ: "Int32"},
445 {name: "SignExt16to64", argLength: 1, typ: "Int64"},
446 {name: "SignExt32to64", argLength: 1, typ: "Int64"},
447 {name: "ZeroExt8to16", argLength: 1, typ: "UInt16"},
448 {name: "ZeroExt8to32", argLength: 1, typ: "UInt32"},
449 {name: "ZeroExt8to64", argLength: 1, typ: "UInt64"},
450 {name: "ZeroExt16to32", argLength: 1, typ: "UInt32"},
451 {name: "ZeroExt16to64", argLength: 1, typ: "UInt64"},
452 {name: "ZeroExt32to64", argLength: 1, typ: "UInt64"},
453 {name: "Trunc16to8", argLength: 1},
454 {name: "Trunc32to8", argLength: 1},
455 {name: "Trunc32to16", argLength: 1},
456 {name: "Trunc64to8", argLength: 1},
457 {name: "Trunc64to16", argLength: 1},
458 {name: "Trunc64to32", argLength: 1},
459
460 {name: "Cvt32to32F", argLength: 1},
461 {name: "Cvt32to64F", argLength: 1},
462 {name: "Cvt64to32F", argLength: 1},
463 {name: "Cvt64to64F", argLength: 1},
464 {name: "Cvt32Fto32", argLength: 1},
465 {name: "Cvt32Fto64", argLength: 1},
466 {name: "Cvt64Fto32", argLength: 1},
467 {name: "Cvt64Fto64", argLength: 1},
468 {name: "Cvt32Fto64F", argLength: 1},
469 {name: "Cvt64Fto32F", argLength: 1},
470 {name: "CvtBoolToUint8", argLength: 1},
471
472
473 {name: "Round32F", argLength: 1},
474 {name: "Round64F", argLength: 1},
475
476
477 {name: "IsNonNil", argLength: 1, typ: "Bool"},
478 {name: "IsInBounds", argLength: 2, typ: "Bool"},
479 {name: "IsSliceInBounds", argLength: 2, typ: "Bool"},
480 {name: "NilCheck", argLength: 2, nilCheck: true},
481
482
483 {name: "GetG", argLength: 1, zeroWidth: true},
484 {name: "GetClosurePtr"},
485 {name: "GetCallerPC"},
486 {name: "GetCallerSP", argLength: 1},
487
488
489 {name: "PtrIndex", argLength: 2},
490 {name: "OffPtr", argLength: 1, aux: "Int64"},
491
492
493 {name: "SliceMake", argLength: 3},
494 {name: "SlicePtr", argLength: 1, typ: "BytePtr"},
495 {name: "SliceLen", argLength: 1},
496 {name: "SliceCap", argLength: 1},
497
498
499
500 {name: "SlicePtrUnchecked", argLength: 1},
501
502
503 {name: "ComplexMake", argLength: 2},
504 {name: "ComplexReal", argLength: 1},
505 {name: "ComplexImag", argLength: 1},
506
507
508 {name: "StringMake", argLength: 2},
509 {name: "StringPtr", argLength: 1, typ: "BytePtr"},
510 {name: "StringLen", argLength: 1, typ: "Int"},
511
512
513 {name: "IMake", argLength: 2},
514 {name: "ITab", argLength: 1, typ: "Uintptr"},
515 {name: "IData", argLength: 1},
516
517
518 {name: "StructMake0"},
519 {name: "StructMake1", argLength: 1},
520 {name: "StructMake2", argLength: 2},
521 {name: "StructMake3", argLength: 3},
522 {name: "StructMake4", argLength: 4},
523 {name: "StructSelect", argLength: 1, aux: "Int64"},
524
525
526 {name: "ArrayMake0"},
527 {name: "ArrayMake1", argLength: 1},
528 {name: "ArraySelect", argLength: 1, aux: "Int64"},
529
530
531
532
533
534 {name: "StoreReg", argLength: 1},
535 {name: "LoadReg", argLength: 1},
536
537
538 {name: "FwdRef", aux: "Sym", symEffect: "None"},
539
540
541 {name: "Unknown"},
542
543 {name: "VarDef", argLength: 1, aux: "Sym", typ: "Mem", symEffect: "None", zeroWidth: true},
544
545 {name: "VarLive", argLength: 1, aux: "Sym", symEffect: "Read", zeroWidth: true},
546 {name: "KeepAlive", argLength: 2, typ: "Mem", zeroWidth: true},
547
548
549
550 {name: "InlMark", argLength: 1, aux: "Int32", typ: "Void"},
551
552
553 {name: "Int64Make", argLength: 2, typ: "UInt64"},
554 {name: "Int64Hi", argLength: 1, typ: "UInt32"},
555 {name: "Int64Lo", argLength: 1, typ: "UInt32"},
556
557 {name: "Add32carry", argLength: 2, commutative: true, typ: "(UInt32,Flags)"},
558 {name: "Add32withcarry", argLength: 3, commutative: true},
559
560 {name: "Sub32carry", argLength: 2, typ: "(UInt32,Flags)"},
561 {name: "Sub32withcarry", argLength: 3},
562
563 {name: "Add64carry", argLength: 3, commutative: true, typ: "(UInt64,UInt64)"},
564 {name: "Sub64borrow", argLength: 3, typ: "(UInt64,UInt64)"},
565
566 {name: "Signmask", argLength: 1, typ: "Int32"},
567 {name: "Zeromask", argLength: 1, typ: "UInt32"},
568 {name: "Slicemask", argLength: 1},
569
570 {name: "SpectreIndex", argLength: 2},
571 {name: "SpectreSliceIndex", argLength: 2},
572
573 {name: "Cvt32Uto32F", argLength: 1},
574 {name: "Cvt32Uto64F", argLength: 1},
575 {name: "Cvt32Fto32U", argLength: 1},
576 {name: "Cvt64Fto32U", argLength: 1},
577 {name: "Cvt64Uto32F", argLength: 1},
578 {name: "Cvt64Uto64F", argLength: 1},
579 {name: "Cvt32Fto64U", argLength: 1},
580 {name: "Cvt64Fto64U", argLength: 1},
581
582
583 {name: "Select0", argLength: 1, zeroWidth: true},
584 {name: "Select1", argLength: 1, zeroWidth: true},
585 {name: "SelectN", argLength: 1, aux: "Int64"},
586 {name: "SelectNAddr", argLength: 1, aux: "Int64"},
587 {name: "MakeResult", argLength: -1},
588
589
590
591
592
593 {name: "AtomicLoad8", argLength: 2, typ: "(UInt8,Mem)"},
594 {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"},
595 {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"},
596 {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"},
597 {name: "AtomicLoadAcq32", argLength: 2, typ: "(UInt32,Mem)"},
598 {name: "AtomicLoadAcq64", argLength: 2, typ: "(UInt64,Mem)"},
599 {name: "AtomicStore8", argLength: 3, typ: "Mem", hasSideEffects: true},
600 {name: "AtomicStore32", argLength: 3, typ: "Mem", hasSideEffects: true},
601 {name: "AtomicStore64", argLength: 3, typ: "Mem", hasSideEffects: true},
602 {name: "AtomicStorePtrNoWB", argLength: 3, typ: "Mem", hasSideEffects: true},
603 {name: "AtomicStoreRel32", argLength: 3, typ: "Mem", hasSideEffects: true},
604 {name: "AtomicStoreRel64", argLength: 3, typ: "Mem", hasSideEffects: true},
605 {name: "AtomicExchange32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
606 {name: "AtomicExchange64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
607 {name: "AtomicAdd32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
608 {name: "AtomicAdd64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
609 {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
610 {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
611 {name: "AtomicCompareAndSwapRel32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
612 {name: "AtomicAnd8", argLength: 3, typ: "Mem", hasSideEffects: true},
613 {name: "AtomicAnd32", argLength: 3, typ: "Mem", hasSideEffects: true},
614 {name: "AtomicOr8", argLength: 3, typ: "Mem", hasSideEffects: true},
615 {name: "AtomicOr32", argLength: 3, typ: "Mem", hasSideEffects: true},
616
617
618
619
620
621 {name: "AtomicAdd32Variant", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
622 {name: "AtomicAdd64Variant", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
623 {name: "AtomicExchange32Variant", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true},
624 {name: "AtomicExchange64Variant", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true},
625 {name: "AtomicCompareAndSwap32Variant", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
626 {name: "AtomicCompareAndSwap64Variant", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true},
627 {name: "AtomicAnd8Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
628 {name: "AtomicAnd32Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
629 {name: "AtomicOr8Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
630 {name: "AtomicOr32Variant", argLength: 3, typ: "Mem", hasSideEffects: true},
631
632
633 {name: "PubBarrier", argLength: 1, hasSideEffects: true},
634
635
636 {name: "Clobber", argLength: 0, typ: "Void", aux: "SymOff", symEffect: "None"},
637 {name: "ClobberReg", argLength: 0, typ: "Void"},
638
639
640 {name: "PrefetchCache", argLength: 2, hasSideEffects: true},
641 {name: "PrefetchCacheStreamed", argLength: 2, hasSideEffects: true},
642 }
643
644
645
646
647
648
649
650
651
652
653
654
655 var genericBlocks = []blockData{
656 {name: "Plain"},
657 {name: "If", controls: 1},
658 {name: "Defer", controls: 1},
659 {name: "Ret", controls: 1},
660 {name: "RetJmp", controls: 1},
661 {name: "Exit", controls: 1},
662 {name: "JumpTable", controls: 1},
663
664
665 {name: "First"},
666 }
667
668 func init() {
669 archs = append(archs, arch{
670 name: "generic",
671 ops: genericOps,
672 blocks: genericBlocks,
673 generic: true,
674 })
675 }
676
View as plain text