1
2
3
4 package ssa
5
6 func rewriteValueAMD64splitload(v *Value) bool {
7 switch v.Op {
8 case OpAMD64CMPBconstload:
9 return rewriteValueAMD64splitload_OpAMD64CMPBconstload(v)
10 case OpAMD64CMPBconstloadidx1:
11 return rewriteValueAMD64splitload_OpAMD64CMPBconstloadidx1(v)
12 case OpAMD64CMPBload:
13 return rewriteValueAMD64splitload_OpAMD64CMPBload(v)
14 case OpAMD64CMPBloadidx1:
15 return rewriteValueAMD64splitload_OpAMD64CMPBloadidx1(v)
16 case OpAMD64CMPLconstload:
17 return rewriteValueAMD64splitload_OpAMD64CMPLconstload(v)
18 case OpAMD64CMPLconstloadidx1:
19 return rewriteValueAMD64splitload_OpAMD64CMPLconstloadidx1(v)
20 case OpAMD64CMPLconstloadidx4:
21 return rewriteValueAMD64splitload_OpAMD64CMPLconstloadidx4(v)
22 case OpAMD64CMPLload:
23 return rewriteValueAMD64splitload_OpAMD64CMPLload(v)
24 case OpAMD64CMPLloadidx1:
25 return rewriteValueAMD64splitload_OpAMD64CMPLloadidx1(v)
26 case OpAMD64CMPLloadidx4:
27 return rewriteValueAMD64splitload_OpAMD64CMPLloadidx4(v)
28 case OpAMD64CMPQconstload:
29 return rewriteValueAMD64splitload_OpAMD64CMPQconstload(v)
30 case OpAMD64CMPQconstloadidx1:
31 return rewriteValueAMD64splitload_OpAMD64CMPQconstloadidx1(v)
32 case OpAMD64CMPQconstloadidx8:
33 return rewriteValueAMD64splitload_OpAMD64CMPQconstloadidx8(v)
34 case OpAMD64CMPQload:
35 return rewriteValueAMD64splitload_OpAMD64CMPQload(v)
36 case OpAMD64CMPQloadidx1:
37 return rewriteValueAMD64splitload_OpAMD64CMPQloadidx1(v)
38 case OpAMD64CMPQloadidx8:
39 return rewriteValueAMD64splitload_OpAMD64CMPQloadidx8(v)
40 case OpAMD64CMPWconstload:
41 return rewriteValueAMD64splitload_OpAMD64CMPWconstload(v)
42 case OpAMD64CMPWconstloadidx1:
43 return rewriteValueAMD64splitload_OpAMD64CMPWconstloadidx1(v)
44 case OpAMD64CMPWconstloadidx2:
45 return rewriteValueAMD64splitload_OpAMD64CMPWconstloadidx2(v)
46 case OpAMD64CMPWload:
47 return rewriteValueAMD64splitload_OpAMD64CMPWload(v)
48 case OpAMD64CMPWloadidx1:
49 return rewriteValueAMD64splitload_OpAMD64CMPWloadidx1(v)
50 case OpAMD64CMPWloadidx2:
51 return rewriteValueAMD64splitload_OpAMD64CMPWloadidx2(v)
52 }
53 return false
54 }
55 func rewriteValueAMD64splitload_OpAMD64CMPBconstload(v *Value) bool {
56 v_1 := v.Args[1]
57 v_0 := v.Args[0]
58 b := v.Block
59 typ := &b.Func.Config.Types
60
61
62
63 for {
64 vo := auxIntToValAndOff(v.AuxInt)
65 sym := auxToSym(v.Aux)
66 ptr := v_0
67 mem := v_1
68 if !(vo.Val() == 0) {
69 break
70 }
71 v.reset(OpAMD64TESTB)
72 x := b.NewValue0(v.Pos, OpAMD64MOVBload, typ.UInt8)
73 x.AuxInt = int32ToAuxInt(vo.Off())
74 x.Aux = symToAux(sym)
75 x.AddArg2(ptr, mem)
76 v.AddArg2(x, x)
77 return true
78 }
79
80
81
82 for {
83 vo := auxIntToValAndOff(v.AuxInt)
84 sym := auxToSym(v.Aux)
85 ptr := v_0
86 mem := v_1
87 if !(vo.Val() != 0) {
88 break
89 }
90 v.reset(OpAMD64CMPBconst)
91 v.AuxInt = int8ToAuxInt(vo.Val8())
92 v0 := b.NewValue0(v.Pos, OpAMD64MOVBload, typ.UInt8)
93 v0.AuxInt = int32ToAuxInt(vo.Off())
94 v0.Aux = symToAux(sym)
95 v0.AddArg2(ptr, mem)
96 v.AddArg(v0)
97 return true
98 }
99 return false
100 }
101 func rewriteValueAMD64splitload_OpAMD64CMPBconstloadidx1(v *Value) bool {
102 v_2 := v.Args[2]
103 v_1 := v.Args[1]
104 v_0 := v.Args[0]
105 b := v.Block
106 typ := &b.Func.Config.Types
107
108
109
110 for {
111 vo := auxIntToValAndOff(v.AuxInt)
112 sym := auxToSym(v.Aux)
113 ptr := v_0
114 idx := v_1
115 mem := v_2
116 if !(vo.Val() == 0) {
117 break
118 }
119 v.reset(OpAMD64TESTB)
120 x := b.NewValue0(v.Pos, OpAMD64MOVBloadidx1, typ.UInt8)
121 x.AuxInt = int32ToAuxInt(vo.Off())
122 x.Aux = symToAux(sym)
123 x.AddArg3(ptr, idx, mem)
124 v.AddArg2(x, x)
125 return true
126 }
127
128
129
130 for {
131 vo := auxIntToValAndOff(v.AuxInt)
132 sym := auxToSym(v.Aux)
133 ptr := v_0
134 idx := v_1
135 mem := v_2
136 if !(vo.Val() != 0) {
137 break
138 }
139 v.reset(OpAMD64CMPBconst)
140 v.AuxInt = int8ToAuxInt(vo.Val8())
141 v0 := b.NewValue0(v.Pos, OpAMD64MOVBloadidx1, typ.UInt8)
142 v0.AuxInt = int32ToAuxInt(vo.Off())
143 v0.Aux = symToAux(sym)
144 v0.AddArg3(ptr, idx, mem)
145 v.AddArg(v0)
146 return true
147 }
148 return false
149 }
150 func rewriteValueAMD64splitload_OpAMD64CMPBload(v *Value) bool {
151 v_2 := v.Args[2]
152 v_1 := v.Args[1]
153 v_0 := v.Args[0]
154 b := v.Block
155 typ := &b.Func.Config.Types
156
157
158 for {
159 off := auxIntToInt32(v.AuxInt)
160 sym := auxToSym(v.Aux)
161 ptr := v_0
162 x := v_1
163 mem := v_2
164 v.reset(OpAMD64CMPB)
165 v0 := b.NewValue0(v.Pos, OpAMD64MOVBload, typ.UInt8)
166 v0.AuxInt = int32ToAuxInt(off)
167 v0.Aux = symToAux(sym)
168 v0.AddArg2(ptr, mem)
169 v.AddArg2(v0, x)
170 return true
171 }
172 }
173 func rewriteValueAMD64splitload_OpAMD64CMPBloadidx1(v *Value) bool {
174 v_3 := v.Args[3]
175 v_2 := v.Args[2]
176 v_1 := v.Args[1]
177 v_0 := v.Args[0]
178 b := v.Block
179 typ := &b.Func.Config.Types
180
181
182 for {
183 off := auxIntToInt32(v.AuxInt)
184 sym := auxToSym(v.Aux)
185 ptr := v_0
186 idx := v_1
187 x := v_2
188 mem := v_3
189 v.reset(OpAMD64CMPB)
190 v0 := b.NewValue0(v.Pos, OpAMD64MOVBloadidx1, typ.UInt8)
191 v0.AuxInt = int32ToAuxInt(off)
192 v0.Aux = symToAux(sym)
193 v0.AddArg3(ptr, idx, mem)
194 v.AddArg2(v0, x)
195 return true
196 }
197 }
198 func rewriteValueAMD64splitload_OpAMD64CMPLconstload(v *Value) bool {
199 v_1 := v.Args[1]
200 v_0 := v.Args[0]
201 b := v.Block
202 typ := &b.Func.Config.Types
203
204
205
206 for {
207 vo := auxIntToValAndOff(v.AuxInt)
208 sym := auxToSym(v.Aux)
209 ptr := v_0
210 mem := v_1
211 if !(vo.Val() == 0) {
212 break
213 }
214 v.reset(OpAMD64TESTL)
215 x := b.NewValue0(v.Pos, OpAMD64MOVLload, typ.UInt32)
216 x.AuxInt = int32ToAuxInt(vo.Off())
217 x.Aux = symToAux(sym)
218 x.AddArg2(ptr, mem)
219 v.AddArg2(x, x)
220 return true
221 }
222
223
224
225 for {
226 vo := auxIntToValAndOff(v.AuxInt)
227 sym := auxToSym(v.Aux)
228 ptr := v_0
229 mem := v_1
230 if !(vo.Val() != 0) {
231 break
232 }
233 v.reset(OpAMD64CMPLconst)
234 v.AuxInt = int32ToAuxInt(vo.Val())
235 v0 := b.NewValue0(v.Pos, OpAMD64MOVLload, typ.UInt32)
236 v0.AuxInt = int32ToAuxInt(vo.Off())
237 v0.Aux = symToAux(sym)
238 v0.AddArg2(ptr, mem)
239 v.AddArg(v0)
240 return true
241 }
242 return false
243 }
244 func rewriteValueAMD64splitload_OpAMD64CMPLconstloadidx1(v *Value) bool {
245 v_2 := v.Args[2]
246 v_1 := v.Args[1]
247 v_0 := v.Args[0]
248 b := v.Block
249 typ := &b.Func.Config.Types
250
251
252
253 for {
254 vo := auxIntToValAndOff(v.AuxInt)
255 sym := auxToSym(v.Aux)
256 ptr := v_0
257 idx := v_1
258 mem := v_2
259 if !(vo.Val() == 0) {
260 break
261 }
262 v.reset(OpAMD64TESTL)
263 x := b.NewValue0(v.Pos, OpAMD64MOVLloadidx1, typ.UInt32)
264 x.AuxInt = int32ToAuxInt(vo.Off())
265 x.Aux = symToAux(sym)
266 x.AddArg3(ptr, idx, mem)
267 v.AddArg2(x, x)
268 return true
269 }
270
271
272
273 for {
274 vo := auxIntToValAndOff(v.AuxInt)
275 sym := auxToSym(v.Aux)
276 ptr := v_0
277 idx := v_1
278 mem := v_2
279 if !(vo.Val() != 0) {
280 break
281 }
282 v.reset(OpAMD64CMPLconst)
283 v.AuxInt = int32ToAuxInt(vo.Val())
284 v0 := b.NewValue0(v.Pos, OpAMD64MOVLloadidx1, typ.UInt32)
285 v0.AuxInt = int32ToAuxInt(vo.Off())
286 v0.Aux = symToAux(sym)
287 v0.AddArg3(ptr, idx, mem)
288 v.AddArg(v0)
289 return true
290 }
291 return false
292 }
293 func rewriteValueAMD64splitload_OpAMD64CMPLconstloadidx4(v *Value) bool {
294 v_2 := v.Args[2]
295 v_1 := v.Args[1]
296 v_0 := v.Args[0]
297 b := v.Block
298 typ := &b.Func.Config.Types
299
300
301
302 for {
303 vo := auxIntToValAndOff(v.AuxInt)
304 sym := auxToSym(v.Aux)
305 ptr := v_0
306 idx := v_1
307 mem := v_2
308 if !(vo.Val() == 0) {
309 break
310 }
311 v.reset(OpAMD64TESTL)
312 x := b.NewValue0(v.Pos, OpAMD64MOVLloadidx4, typ.UInt32)
313 x.AuxInt = int32ToAuxInt(vo.Off())
314 x.Aux = symToAux(sym)
315 x.AddArg3(ptr, idx, mem)
316 v.AddArg2(x, x)
317 return true
318 }
319
320
321
322 for {
323 vo := auxIntToValAndOff(v.AuxInt)
324 sym := auxToSym(v.Aux)
325 ptr := v_0
326 idx := v_1
327 mem := v_2
328 if !(vo.Val() != 0) {
329 break
330 }
331 v.reset(OpAMD64CMPLconst)
332 v.AuxInt = int32ToAuxInt(vo.Val())
333 v0 := b.NewValue0(v.Pos, OpAMD64MOVLloadidx4, typ.UInt32)
334 v0.AuxInt = int32ToAuxInt(vo.Off())
335 v0.Aux = symToAux(sym)
336 v0.AddArg3(ptr, idx, mem)
337 v.AddArg(v0)
338 return true
339 }
340 return false
341 }
342 func rewriteValueAMD64splitload_OpAMD64CMPLload(v *Value) bool {
343 v_2 := v.Args[2]
344 v_1 := v.Args[1]
345 v_0 := v.Args[0]
346 b := v.Block
347 typ := &b.Func.Config.Types
348
349
350 for {
351 off := auxIntToInt32(v.AuxInt)
352 sym := auxToSym(v.Aux)
353 ptr := v_0
354 x := v_1
355 mem := v_2
356 v.reset(OpAMD64CMPL)
357 v0 := b.NewValue0(v.Pos, OpAMD64MOVLload, typ.UInt32)
358 v0.AuxInt = int32ToAuxInt(off)
359 v0.Aux = symToAux(sym)
360 v0.AddArg2(ptr, mem)
361 v.AddArg2(v0, x)
362 return true
363 }
364 }
365 func rewriteValueAMD64splitload_OpAMD64CMPLloadidx1(v *Value) bool {
366 v_3 := v.Args[3]
367 v_2 := v.Args[2]
368 v_1 := v.Args[1]
369 v_0 := v.Args[0]
370 b := v.Block
371 typ := &b.Func.Config.Types
372
373
374 for {
375 off := auxIntToInt32(v.AuxInt)
376 sym := auxToSym(v.Aux)
377 ptr := v_0
378 idx := v_1
379 x := v_2
380 mem := v_3
381 v.reset(OpAMD64CMPL)
382 v0 := b.NewValue0(v.Pos, OpAMD64MOVLloadidx1, typ.UInt32)
383 v0.AuxInt = int32ToAuxInt(off)
384 v0.Aux = symToAux(sym)
385 v0.AddArg3(ptr, idx, mem)
386 v.AddArg2(v0, x)
387 return true
388 }
389 }
390 func rewriteValueAMD64splitload_OpAMD64CMPLloadidx4(v *Value) bool {
391 v_3 := v.Args[3]
392 v_2 := v.Args[2]
393 v_1 := v.Args[1]
394 v_0 := v.Args[0]
395 b := v.Block
396 typ := &b.Func.Config.Types
397
398
399 for {
400 off := auxIntToInt32(v.AuxInt)
401 sym := auxToSym(v.Aux)
402 ptr := v_0
403 idx := v_1
404 x := v_2
405 mem := v_3
406 v.reset(OpAMD64CMPL)
407 v0 := b.NewValue0(v.Pos, OpAMD64MOVLloadidx4, typ.UInt32)
408 v0.AuxInt = int32ToAuxInt(off)
409 v0.Aux = symToAux(sym)
410 v0.AddArg3(ptr, idx, mem)
411 v.AddArg2(v0, x)
412 return true
413 }
414 }
415 func rewriteValueAMD64splitload_OpAMD64CMPQconstload(v *Value) bool {
416 v_1 := v.Args[1]
417 v_0 := v.Args[0]
418 b := v.Block
419 typ := &b.Func.Config.Types
420
421
422
423 for {
424 vo := auxIntToValAndOff(v.AuxInt)
425 sym := auxToSym(v.Aux)
426 ptr := v_0
427 mem := v_1
428 if !(vo.Val() == 0) {
429 break
430 }
431 v.reset(OpAMD64TESTQ)
432 x := b.NewValue0(v.Pos, OpAMD64MOVQload, typ.UInt64)
433 x.AuxInt = int32ToAuxInt(vo.Off())
434 x.Aux = symToAux(sym)
435 x.AddArg2(ptr, mem)
436 v.AddArg2(x, x)
437 return true
438 }
439
440
441
442 for {
443 vo := auxIntToValAndOff(v.AuxInt)
444 sym := auxToSym(v.Aux)
445 ptr := v_0
446 mem := v_1
447 if !(vo.Val() != 0) {
448 break
449 }
450 v.reset(OpAMD64CMPQconst)
451 v.AuxInt = int32ToAuxInt(vo.Val())
452 v0 := b.NewValue0(v.Pos, OpAMD64MOVQload, typ.UInt64)
453 v0.AuxInt = int32ToAuxInt(vo.Off())
454 v0.Aux = symToAux(sym)
455 v0.AddArg2(ptr, mem)
456 v.AddArg(v0)
457 return true
458 }
459 return false
460 }
461 func rewriteValueAMD64splitload_OpAMD64CMPQconstloadidx1(v *Value) bool {
462 v_2 := v.Args[2]
463 v_1 := v.Args[1]
464 v_0 := v.Args[0]
465 b := v.Block
466 typ := &b.Func.Config.Types
467
468
469
470 for {
471 vo := auxIntToValAndOff(v.AuxInt)
472 sym := auxToSym(v.Aux)
473 ptr := v_0
474 idx := v_1
475 mem := v_2
476 if !(vo.Val() == 0) {
477 break
478 }
479 v.reset(OpAMD64TESTQ)
480 x := b.NewValue0(v.Pos, OpAMD64MOVQloadidx1, typ.UInt64)
481 x.AuxInt = int32ToAuxInt(vo.Off())
482 x.Aux = symToAux(sym)
483 x.AddArg3(ptr, idx, mem)
484 v.AddArg2(x, x)
485 return true
486 }
487
488
489
490 for {
491 vo := auxIntToValAndOff(v.AuxInt)
492 sym := auxToSym(v.Aux)
493 ptr := v_0
494 idx := v_1
495 mem := v_2
496 if !(vo.Val() != 0) {
497 break
498 }
499 v.reset(OpAMD64CMPQconst)
500 v.AuxInt = int32ToAuxInt(vo.Val())
501 v0 := b.NewValue0(v.Pos, OpAMD64MOVQloadidx1, typ.UInt64)
502 v0.AuxInt = int32ToAuxInt(vo.Off())
503 v0.Aux = symToAux(sym)
504 v0.AddArg3(ptr, idx, mem)
505 v.AddArg(v0)
506 return true
507 }
508 return false
509 }
510 func rewriteValueAMD64splitload_OpAMD64CMPQconstloadidx8(v *Value) bool {
511 v_2 := v.Args[2]
512 v_1 := v.Args[1]
513 v_0 := v.Args[0]
514 b := v.Block
515 typ := &b.Func.Config.Types
516
517
518
519 for {
520 vo := auxIntToValAndOff(v.AuxInt)
521 sym := auxToSym(v.Aux)
522 ptr := v_0
523 idx := v_1
524 mem := v_2
525 if !(vo.Val() == 0) {
526 break
527 }
528 v.reset(OpAMD64TESTQ)
529 x := b.NewValue0(v.Pos, OpAMD64MOVQloadidx8, typ.UInt64)
530 x.AuxInt = int32ToAuxInt(vo.Off())
531 x.Aux = symToAux(sym)
532 x.AddArg3(ptr, idx, mem)
533 v.AddArg2(x, x)
534 return true
535 }
536
537
538
539 for {
540 vo := auxIntToValAndOff(v.AuxInt)
541 sym := auxToSym(v.Aux)
542 ptr := v_0
543 idx := v_1
544 mem := v_2
545 if !(vo.Val() != 0) {
546 break
547 }
548 v.reset(OpAMD64CMPQconst)
549 v.AuxInt = int32ToAuxInt(vo.Val())
550 v0 := b.NewValue0(v.Pos, OpAMD64MOVQloadidx8, typ.UInt64)
551 v0.AuxInt = int32ToAuxInt(vo.Off())
552 v0.Aux = symToAux(sym)
553 v0.AddArg3(ptr, idx, mem)
554 v.AddArg(v0)
555 return true
556 }
557 return false
558 }
559 func rewriteValueAMD64splitload_OpAMD64CMPQload(v *Value) bool {
560 v_2 := v.Args[2]
561 v_1 := v.Args[1]
562 v_0 := v.Args[0]
563 b := v.Block
564 typ := &b.Func.Config.Types
565
566
567 for {
568 off := auxIntToInt32(v.AuxInt)
569 sym := auxToSym(v.Aux)
570 ptr := v_0
571 x := v_1
572 mem := v_2
573 v.reset(OpAMD64CMPQ)
574 v0 := b.NewValue0(v.Pos, OpAMD64MOVQload, typ.UInt64)
575 v0.AuxInt = int32ToAuxInt(off)
576 v0.Aux = symToAux(sym)
577 v0.AddArg2(ptr, mem)
578 v.AddArg2(v0, x)
579 return true
580 }
581 }
582 func rewriteValueAMD64splitload_OpAMD64CMPQloadidx1(v *Value) bool {
583 v_3 := v.Args[3]
584 v_2 := v.Args[2]
585 v_1 := v.Args[1]
586 v_0 := v.Args[0]
587 b := v.Block
588 typ := &b.Func.Config.Types
589
590
591 for {
592 off := auxIntToInt32(v.AuxInt)
593 sym := auxToSym(v.Aux)
594 ptr := v_0
595 idx := v_1
596 x := v_2
597 mem := v_3
598 v.reset(OpAMD64CMPQ)
599 v0 := b.NewValue0(v.Pos, OpAMD64MOVQloadidx1, typ.UInt64)
600 v0.AuxInt = int32ToAuxInt(off)
601 v0.Aux = symToAux(sym)
602 v0.AddArg3(ptr, idx, mem)
603 v.AddArg2(v0, x)
604 return true
605 }
606 }
607 func rewriteValueAMD64splitload_OpAMD64CMPQloadidx8(v *Value) bool {
608 v_3 := v.Args[3]
609 v_2 := v.Args[2]
610 v_1 := v.Args[1]
611 v_0 := v.Args[0]
612 b := v.Block
613 typ := &b.Func.Config.Types
614
615
616 for {
617 off := auxIntToInt32(v.AuxInt)
618 sym := auxToSym(v.Aux)
619 ptr := v_0
620 idx := v_1
621 x := v_2
622 mem := v_3
623 v.reset(OpAMD64CMPQ)
624 v0 := b.NewValue0(v.Pos, OpAMD64MOVQloadidx8, typ.UInt64)
625 v0.AuxInt = int32ToAuxInt(off)
626 v0.Aux = symToAux(sym)
627 v0.AddArg3(ptr, idx, mem)
628 v.AddArg2(v0, x)
629 return true
630 }
631 }
632 func rewriteValueAMD64splitload_OpAMD64CMPWconstload(v *Value) bool {
633 v_1 := v.Args[1]
634 v_0 := v.Args[0]
635 b := v.Block
636 typ := &b.Func.Config.Types
637
638
639
640 for {
641 vo := auxIntToValAndOff(v.AuxInt)
642 sym := auxToSym(v.Aux)
643 ptr := v_0
644 mem := v_1
645 if !(vo.Val() == 0) {
646 break
647 }
648 v.reset(OpAMD64TESTW)
649 x := b.NewValue0(v.Pos, OpAMD64MOVWload, typ.UInt16)
650 x.AuxInt = int32ToAuxInt(vo.Off())
651 x.Aux = symToAux(sym)
652 x.AddArg2(ptr, mem)
653 v.AddArg2(x, x)
654 return true
655 }
656
657
658
659 for {
660 vo := auxIntToValAndOff(v.AuxInt)
661 sym := auxToSym(v.Aux)
662 ptr := v_0
663 mem := v_1
664 if !(vo.Val() != 0) {
665 break
666 }
667 v.reset(OpAMD64CMPWconst)
668 v.AuxInt = int16ToAuxInt(vo.Val16())
669 v0 := b.NewValue0(v.Pos, OpAMD64MOVWload, typ.UInt16)
670 v0.AuxInt = int32ToAuxInt(vo.Off())
671 v0.Aux = symToAux(sym)
672 v0.AddArg2(ptr, mem)
673 v.AddArg(v0)
674 return true
675 }
676 return false
677 }
678 func rewriteValueAMD64splitload_OpAMD64CMPWconstloadidx1(v *Value) bool {
679 v_2 := v.Args[2]
680 v_1 := v.Args[1]
681 v_0 := v.Args[0]
682 b := v.Block
683 typ := &b.Func.Config.Types
684
685
686
687 for {
688 vo := auxIntToValAndOff(v.AuxInt)
689 sym := auxToSym(v.Aux)
690 ptr := v_0
691 idx := v_1
692 mem := v_2
693 if !(vo.Val() == 0) {
694 break
695 }
696 v.reset(OpAMD64TESTW)
697 x := b.NewValue0(v.Pos, OpAMD64MOVWloadidx1, typ.UInt16)
698 x.AuxInt = int32ToAuxInt(vo.Off())
699 x.Aux = symToAux(sym)
700 x.AddArg3(ptr, idx, mem)
701 v.AddArg2(x, x)
702 return true
703 }
704
705
706
707 for {
708 vo := auxIntToValAndOff(v.AuxInt)
709 sym := auxToSym(v.Aux)
710 ptr := v_0
711 idx := v_1
712 mem := v_2
713 if !(vo.Val() != 0) {
714 break
715 }
716 v.reset(OpAMD64CMPWconst)
717 v.AuxInt = int16ToAuxInt(vo.Val16())
718 v0 := b.NewValue0(v.Pos, OpAMD64MOVWloadidx1, typ.UInt16)
719 v0.AuxInt = int32ToAuxInt(vo.Off())
720 v0.Aux = symToAux(sym)
721 v0.AddArg3(ptr, idx, mem)
722 v.AddArg(v0)
723 return true
724 }
725 return false
726 }
727 func rewriteValueAMD64splitload_OpAMD64CMPWconstloadidx2(v *Value) bool {
728 v_2 := v.Args[2]
729 v_1 := v.Args[1]
730 v_0 := v.Args[0]
731 b := v.Block
732 typ := &b.Func.Config.Types
733
734
735
736 for {
737 vo := auxIntToValAndOff(v.AuxInt)
738 sym := auxToSym(v.Aux)
739 ptr := v_0
740 idx := v_1
741 mem := v_2
742 if !(vo.Val() == 0) {
743 break
744 }
745 v.reset(OpAMD64TESTW)
746 x := b.NewValue0(v.Pos, OpAMD64MOVWloadidx2, typ.UInt16)
747 x.AuxInt = int32ToAuxInt(vo.Off())
748 x.Aux = symToAux(sym)
749 x.AddArg3(ptr, idx, mem)
750 v.AddArg2(x, x)
751 return true
752 }
753
754
755
756 for {
757 vo := auxIntToValAndOff(v.AuxInt)
758 sym := auxToSym(v.Aux)
759 ptr := v_0
760 idx := v_1
761 mem := v_2
762 if !(vo.Val() != 0) {
763 break
764 }
765 v.reset(OpAMD64CMPWconst)
766 v.AuxInt = int16ToAuxInt(vo.Val16())
767 v0 := b.NewValue0(v.Pos, OpAMD64MOVWloadidx2, typ.UInt16)
768 v0.AuxInt = int32ToAuxInt(vo.Off())
769 v0.Aux = symToAux(sym)
770 v0.AddArg3(ptr, idx, mem)
771 v.AddArg(v0)
772 return true
773 }
774 return false
775 }
776 func rewriteValueAMD64splitload_OpAMD64CMPWload(v *Value) bool {
777 v_2 := v.Args[2]
778 v_1 := v.Args[1]
779 v_0 := v.Args[0]
780 b := v.Block
781 typ := &b.Func.Config.Types
782
783
784 for {
785 off := auxIntToInt32(v.AuxInt)
786 sym := auxToSym(v.Aux)
787 ptr := v_0
788 x := v_1
789 mem := v_2
790 v.reset(OpAMD64CMPW)
791 v0 := b.NewValue0(v.Pos, OpAMD64MOVWload, typ.UInt16)
792 v0.AuxInt = int32ToAuxInt(off)
793 v0.Aux = symToAux(sym)
794 v0.AddArg2(ptr, mem)
795 v.AddArg2(v0, x)
796 return true
797 }
798 }
799 func rewriteValueAMD64splitload_OpAMD64CMPWloadidx1(v *Value) bool {
800 v_3 := v.Args[3]
801 v_2 := v.Args[2]
802 v_1 := v.Args[1]
803 v_0 := v.Args[0]
804 b := v.Block
805 typ := &b.Func.Config.Types
806
807
808 for {
809 off := auxIntToInt32(v.AuxInt)
810 sym := auxToSym(v.Aux)
811 ptr := v_0
812 idx := v_1
813 x := v_2
814 mem := v_3
815 v.reset(OpAMD64CMPW)
816 v0 := b.NewValue0(v.Pos, OpAMD64MOVWloadidx1, typ.UInt16)
817 v0.AuxInt = int32ToAuxInt(off)
818 v0.Aux = symToAux(sym)
819 v0.AddArg3(ptr, idx, mem)
820 v.AddArg2(v0, x)
821 return true
822 }
823 }
824 func rewriteValueAMD64splitload_OpAMD64CMPWloadidx2(v *Value) bool {
825 v_3 := v.Args[3]
826 v_2 := v.Args[2]
827 v_1 := v.Args[1]
828 v_0 := v.Args[0]
829 b := v.Block
830 typ := &b.Func.Config.Types
831
832
833 for {
834 off := auxIntToInt32(v.AuxInt)
835 sym := auxToSym(v.Aux)
836 ptr := v_0
837 idx := v_1
838 x := v_2
839 mem := v_3
840 v.reset(OpAMD64CMPW)
841 v0 := b.NewValue0(v.Pos, OpAMD64MOVWloadidx2, typ.UInt16)
842 v0.AuxInt = int32ToAuxInt(off)
843 v0.Aux = symToAux(sym)
844 v0.AddArg3(ptr, idx, mem)
845 v.AddArg2(v0, x)
846 return true
847 }
848 }
849 func rewriteBlockAMD64splitload(b *Block) bool {
850 return false
851 }
852
View as plain text