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