@@ -202,9 +202,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
202
202
p .From = obj.Addr {Type : obj .TYPE_REG , Reg : v .Args [2 ].Reg ()}
203
203
p .To = obj.Addr {Type : obj .TYPE_REG , Reg : v .Reg ()}
204
204
p .SetFrom3 (obj.Addr {Type : obj .TYPE_REG , Reg : v .Args [1 ].Reg ()})
205
- if v .Reg () != v .Args [0 ].Reg () {
206
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
207
- }
208
205
case ssa .OpAMD64ADDQ , ssa .OpAMD64ADDL :
209
206
r := v .Reg ()
210
207
r1 := v .Args [0 ].Reg ()
@@ -254,11 +251,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
254
251
ssa .OpAMD64BTSL , ssa .OpAMD64BTSQ ,
255
252
ssa .OpAMD64BTCL , ssa .OpAMD64BTCQ ,
256
253
ssa .OpAMD64BTRL , ssa .OpAMD64BTRQ :
257
- r := v .Reg ()
258
- if r != v .Args [0 ].Reg () {
259
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
260
- }
261
- opregreg (s , v .Op .Asm (), r , v .Args [1 ].Reg ())
254
+ opregreg (s , v .Op .Asm (), v .Reg (), v .Args [1 ].Reg ())
262
255
263
256
case ssa .OpAMD64DIVQU , ssa .OpAMD64DIVLU , ssa .OpAMD64DIVWU :
264
257
// Arg[0] (the dividend) is in AX.
@@ -401,20 +394,16 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
401
394
// compute (x+y)/2 unsigned.
402
395
// Do a 64-bit add, the overflow goes into the carry.
403
396
// Shift right once and pull the carry back into the 63rd bit.
404
- r := v .Reg ()
405
- if r != v .Args [0 ].Reg () {
406
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
407
- }
408
397
p := s .Prog (x86 .AADDQ )
409
398
p .From .Type = obj .TYPE_REG
410
399
p .To .Type = obj .TYPE_REG
411
- p .To .Reg = r
400
+ p .To .Reg = v . Reg ()
412
401
p .From .Reg = v .Args [1 ].Reg ()
413
402
p = s .Prog (x86 .ARCRQ )
414
403
p .From .Type = obj .TYPE_CONST
415
404
p .From .Offset = 1
416
405
p .To .Type = obj .TYPE_REG
417
- p .To .Reg = r
406
+ p .To .Reg = v . Reg ()
418
407
419
408
case ssa .OpAMD64ADDQcarry , ssa .OpAMD64ADCQ :
420
409
r := v .Reg0 ()
@@ -530,21 +519,13 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
530
519
ssa .OpAMD64CMOVQCS , ssa .OpAMD64CMOVLCS , ssa .OpAMD64CMOVWCS ,
531
520
ssa .OpAMD64CMOVQGTF , ssa .OpAMD64CMOVLGTF , ssa .OpAMD64CMOVWGTF ,
532
521
ssa .OpAMD64CMOVQGEF , ssa .OpAMD64CMOVLGEF , ssa .OpAMD64CMOVWGEF :
533
- r := v .Reg ()
534
- if r != v .Args [0 ].Reg () {
535
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
536
- }
537
522
p := s .Prog (v .Op .Asm ())
538
523
p .From .Type = obj .TYPE_REG
539
524
p .From .Reg = v .Args [1 ].Reg ()
540
525
p .To .Type = obj .TYPE_REG
541
- p .To .Reg = r
526
+ p .To .Reg = v . Reg ()
542
527
543
528
case ssa .OpAMD64CMOVQNEF , ssa .OpAMD64CMOVLNEF , ssa .OpAMD64CMOVWNEF :
544
- r := v .Reg ()
545
- if r != v .Args [0 ].Reg () {
546
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
547
- }
548
529
// Flag condition: ^ZERO || PARITY
549
530
// Generate:
550
531
// CMOV*NE SRC,DST
@@ -553,7 +534,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
553
534
p .From .Type = obj .TYPE_REG
554
535
p .From .Reg = v .Args [1 ].Reg ()
555
536
p .To .Type = obj .TYPE_REG
556
- p .To .Reg = r
537
+ p .To .Reg = v . Reg ()
557
538
var q * obj.Prog
558
539
if v .Op == ssa .OpAMD64CMOVQNEF {
559
540
q = s .Prog (x86 .ACMOVQPS )
@@ -565,14 +546,9 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
565
546
q .From .Type = obj .TYPE_REG
566
547
q .From .Reg = v .Args [1 ].Reg ()
567
548
q .To .Type = obj .TYPE_REG
568
- q .To .Reg = r
549
+ q .To .Reg = v . Reg ()
569
550
570
551
case ssa .OpAMD64CMOVQEQF , ssa .OpAMD64CMOVLEQF , ssa .OpAMD64CMOVWEQF :
571
- r := v .Reg ()
572
- if r != v .Args [0 ].Reg () {
573
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
574
- }
575
-
576
552
// Flag condition: ZERO && !PARITY
577
553
// Generate:
578
554
// MOV SRC,AX
@@ -589,7 +565,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
589
565
}
590
566
p := s .Prog (v .Op .Asm ())
591
567
p .From .Type = obj .TYPE_REG
592
- p .From .Reg = r
568
+ p .From .Reg = v . Reg ()
593
569
p .To .Type = obj .TYPE_REG
594
570
p .To .Reg = x86 .REG_AX
595
571
var q * obj.Prog
@@ -603,7 +579,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
603
579
q .From .Type = obj .TYPE_REG
604
580
q .From .Reg = x86 .REG_AX
605
581
q .To .Type = obj .TYPE_REG
606
- q .To .Reg = r
582
+ q .To .Reg = v . Reg ()
607
583
608
584
case ssa .OpAMD64MULQconst , ssa .OpAMD64MULLconst :
609
585
r := v .Reg ()
@@ -622,15 +598,11 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
622
598
ssa .OpAMD64SHRQconst , ssa .OpAMD64SHRLconst , ssa .OpAMD64SHRWconst , ssa .OpAMD64SHRBconst ,
623
599
ssa .OpAMD64SARQconst , ssa .OpAMD64SARLconst , ssa .OpAMD64SARWconst , ssa .OpAMD64SARBconst ,
624
600
ssa .OpAMD64ROLQconst , ssa .OpAMD64ROLLconst , ssa .OpAMD64ROLWconst , ssa .OpAMD64ROLBconst :
625
- r := v .Reg ()
626
- if r != v .Args [0 ].Reg () {
627
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
628
- }
629
601
p := s .Prog (v .Op .Asm ())
630
602
p .From .Type = obj .TYPE_CONST
631
603
p .From .Offset = v .AuxInt
632
604
p .To .Type = obj .TYPE_REG
633
- p .To .Reg = r
605
+ p .To .Reg = v . Reg ()
634
606
case ssa .OpAMD64SBBQcarrymask , ssa .OpAMD64SBBLcarrymask :
635
607
r := v .Reg ()
636
608
p := s .Prog (v .Op .Asm ())
@@ -913,9 +885,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
913
885
ssagen .AddAux (& p .From , v )
914
886
p .To .Type = obj .TYPE_REG
915
887
p .To .Reg = v .Reg ()
916
- if v .Reg () != v .Args [0 ].Reg () {
917
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
918
- }
919
888
case ssa .OpAMD64ADDLloadidx1 , ssa .OpAMD64ADDLloadidx4 , ssa .OpAMD64ADDLloadidx8 , ssa .OpAMD64ADDQloadidx1 , ssa .OpAMD64ADDQloadidx8 ,
920
889
ssa .OpAMD64SUBLloadidx1 , ssa .OpAMD64SUBLloadidx4 , ssa .OpAMD64SUBLloadidx8 , ssa .OpAMD64SUBQloadidx1 , ssa .OpAMD64SUBQloadidx8 ,
921
890
ssa .OpAMD64ANDLloadidx1 , ssa .OpAMD64ANDLloadidx4 , ssa .OpAMD64ANDLloadidx8 , ssa .OpAMD64ANDQloadidx1 , ssa .OpAMD64ANDQloadidx8 ,
@@ -939,9 +908,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
939
908
ssagen .AddAux (& p .From , v )
940
909
p .To .Type = obj .TYPE_REG
941
910
p .To .Reg = v .Reg ()
942
- if v .Reg () != v .Args [0 ].Reg () {
943
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
944
- }
945
911
case ssa .OpAMD64DUFFZERO :
946
912
if s .ABI != obj .ABIInternal {
947
913
v .Fatalf ("MOVOconst can be only used in ABIInternal functions" )
@@ -1078,22 +1044,14 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
1078
1044
case ssa .OpAMD64NEGQ , ssa .OpAMD64NEGL ,
1079
1045
ssa .OpAMD64BSWAPQ , ssa .OpAMD64BSWAPL ,
1080
1046
ssa .OpAMD64NOTQ , ssa .OpAMD64NOTL :
1081
- r := v .Reg ()
1082
- if r != v .Args [0 ].Reg () {
1083
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
1084
- }
1085
1047
p := s .Prog (v .Op .Asm ())
1086
1048
p .To .Type = obj .TYPE_REG
1087
- p .To .Reg = r
1049
+ p .To .Reg = v . Reg ()
1088
1050
1089
1051
case ssa .OpAMD64NEGLflags :
1090
- r := v .Reg0 ()
1091
- if r != v .Args [0 ].Reg () {
1092
- v .Fatalf ("input[0] and output not in same register %s" , v .LongString ())
1093
- }
1094
1052
p := s .Prog (v .Op .Asm ())
1095
1053
p .To .Type = obj .TYPE_REG
1096
- p .To .Reg = r
1054
+ p .To .Reg = v . Reg0 ()
1097
1055
1098
1056
case ssa .OpAMD64BSFQ , ssa .OpAMD64BSRQ , ssa .OpAMD64BSFL , ssa .OpAMD64BSRL , ssa .OpAMD64SQRTSD :
1099
1057
p := s .Prog (v .Op .Asm ())
@@ -1214,25 +1172,17 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
1214
1172
p .To .Type = obj .TYPE_REG
1215
1173
p .To .Reg = v .Reg0 ()
1216
1174
case ssa .OpAMD64XCHGB , ssa .OpAMD64XCHGL , ssa .OpAMD64XCHGQ :
1217
- r := v .Reg0 ()
1218
- if r != v .Args [0 ].Reg () {
1219
- v .Fatalf ("input[0] and output[0] not in same register %s" , v .LongString ())
1220
- }
1221
1175
p := s .Prog (v .Op .Asm ())
1222
1176
p .From .Type = obj .TYPE_REG
1223
- p .From .Reg = r
1177
+ p .From .Reg = v . Reg0 ()
1224
1178
p .To .Type = obj .TYPE_MEM
1225
1179
p .To .Reg = v .Args [1 ].Reg ()
1226
1180
ssagen .AddAux (& p .To , v )
1227
1181
case ssa .OpAMD64XADDLlock , ssa .OpAMD64XADDQlock :
1228
- r := v .Reg0 ()
1229
- if r != v .Args [0 ].Reg () {
1230
- v .Fatalf ("input[0] and output[0] not in same register %s" , v .LongString ())
1231
- }
1232
1182
s .Prog (x86 .ALOCK )
1233
1183
p := s .Prog (v .Op .Asm ())
1234
1184
p .From .Type = obj .TYPE_REG
1235
- p .From .Reg = r
1185
+ p .From .Reg = v . Reg0 ()
1236
1186
p .To .Type = obj .TYPE_MEM
1237
1187
p .To .Reg = v .Args [1 ].Reg ()
1238
1188
ssagen .AddAux (& p .To , v )
0 commit comments