@@ -368,13 +368,9 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
368
368
{
369
369
if (isRMW)
370
370
{
371
- if (targetReg != op1Reg)
372
- {
373
- assert (targetReg != op2Reg);
374
- assert (targetReg != op3Reg);
375
-
376
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
377
- }
371
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
372
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
373
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
378
374
379
375
HWIntrinsicImmOpHelper helper (this , intrin.op4 , node);
380
376
@@ -416,14 +412,9 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
416
412
{
417
413
if (isRMW)
418
414
{
419
- if (targetReg != op1Reg)
420
- {
421
- assert (targetReg != op2Reg);
422
- assert (targetReg != op3Reg);
423
-
424
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
425
- }
426
-
415
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
416
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
417
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
427
418
GetEmitter ()->emitIns_R_R_R_I (ins, emitSize, targetReg, op2Reg, op3Reg, 0 , opt);
428
419
}
429
420
else
@@ -773,21 +764,16 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
773
764
switch (intrinEmbMask.id )
774
765
{
775
766
case NI_Sve_CreateBreakPropagateMask:
776
- if (targetReg != embMaskOp1Reg)
777
- {
778
- GetEmitter ()->emitIns_Mov (INS_sve_mov, emitSize, targetReg, embMaskOp2Reg,
779
- /* canSkip */ true );
780
- }
767
+ assert ((targetReg == embMaskOp2Reg) || (targetReg != embMaskOp1Reg));
768
+ GetEmitter ()->emitIns_Mov (INS_sve_mov, emitSize, targetReg, embMaskOp2Reg,
769
+ /* canSkip */ true );
781
770
emitInsHelper (targetReg, maskReg, embMaskOp1Reg);
782
771
break ;
783
772
784
773
case NI_Sve_AddSequentialAcross:
785
- assert (targetReg != embMaskOp2Reg);
786
- if (targetReg != embMaskOp1Reg)
787
- {
788
- GetEmitter ()->emitIns_Mov (INS_fmov, GetEmitter ()->optGetSveElemsize (embOpt),
789
- targetReg, embMaskOp1Reg, /* canSkip */ true );
790
- }
774
+ assert ((targetReg == op1Reg) || (targetReg != embMaskOp2Reg));
775
+ GetEmitter ()->emitIns_Mov (INS_fmov, GetEmitter ()->optGetSveElemsize (embOpt), targetReg,
776
+ embMaskOp1Reg, /* canSkip */ true );
791
777
emitInsHelper (targetReg, maskReg, embMaskOp2Reg);
792
778
break ;
793
779
@@ -1063,15 +1049,10 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1063
1049
{
1064
1050
if (isRMW)
1065
1051
{
1066
- if (targetReg != op2Reg)
1067
- {
1068
- assert (targetReg != op1Reg);
1069
-
1070
- GetEmitter ()->emitIns_Mov (ins_Move_Extend (intrin.op2 ->TypeGet (), false ),
1071
- emitTypeSize (node), targetReg, op2Reg,
1072
- /* canSkip */ true );
1073
- }
1074
-
1052
+ assert ((targetReg == op2Reg) || (targetReg != op1Reg));
1053
+ GetEmitter ()->emitIns_Mov (ins_Move_Extend (intrin.op2 ->TypeGet (), false ),
1054
+ emitTypeSize (node), targetReg, op2Reg,
1055
+ /* canSkip */ true );
1075
1056
GetEmitter ()->emitIns_R_R (ins, emitSize, targetReg, op1Reg, opt);
1076
1057
}
1077
1058
else
@@ -1088,13 +1069,9 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1088
1069
}
1089
1070
else if (isRMW)
1090
1071
{
1091
- if (targetReg != op1Reg)
1092
- {
1093
- assert (targetReg != op2Reg);
1094
-
1095
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg,
1096
- /* canSkip */ true );
1097
- }
1072
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
1073
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg,
1074
+ /* canSkip */ true );
1098
1075
GetEmitter ()->emitIns_R_R (ins, emitSize, targetReg, op2Reg, opt);
1099
1076
}
1100
1077
else
@@ -1110,27 +1087,20 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1110
1087
{
1111
1088
if (HWIntrinsicInfo::IsExplicitMaskedOperation (intrin.id ))
1112
1089
{
1113
- if (targetReg != op2Reg)
1114
- {
1115
- assert (targetReg != op1Reg);
1116
- assert (targetReg != op3Reg);
1117
-
1118
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op2Reg,
1119
- /* canSkip */ true );
1120
- }
1090
+ assert ((targetReg == op1Reg) || (targetReg != op1Reg));
1091
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
1121
1092
1093
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op2Reg,
1094
+ /* canSkip */ true );
1122
1095
GetEmitter ()->emitIns_R_R_R (ins, emitSize, targetReg, op1Reg, op3Reg, opt);
1123
1096
}
1124
1097
else
1125
1098
{
1126
- if (targetReg != op1Reg)
1127
- {
1128
- assert (targetReg != op2Reg);
1129
- assert (targetReg != op3Reg);
1099
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
1100
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
1130
1101
1131
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg,
1132
- /* canSkip */ true );
1133
- }
1102
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg,
1103
+ /* canSkip */ true );
1134
1104
GetEmitter ()->emitIns_R_R_R (ins, emitSize, targetReg, op2Reg, op3Reg, opt);
1135
1105
}
1136
1106
}
@@ -1384,12 +1354,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1384
1354
case NI_AdvSimd_InsertScalar:
1385
1355
{
1386
1356
assert (isRMW);
1387
- if (targetReg != op1Reg)
1388
- {
1389
- assert (targetReg != op3Reg);
1390
-
1391
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
1392
- }
1357
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
1358
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
1393
1359
1394
1360
HWIntrinsicImmOpHelper helper (this , intrin.op2 , node);
1395
1361
@@ -1405,12 +1371,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1405
1371
case NI_AdvSimd_Arm64_InsertSelectedScalar:
1406
1372
{
1407
1373
assert (isRMW);
1408
- if (targetReg != op1Reg)
1409
- {
1410
- assert (targetReg != op3Reg);
1411
-
1412
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
1413
- }
1374
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
1375
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
1414
1376
1415
1377
const int resultIndex = (int )intrin.op2 ->AsIntCon ()->gtIconVal ;
1416
1378
const int valueIndex = (int )intrin.op4 ->AsIntCon ()->gtIconVal ;
@@ -1421,12 +1383,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1421
1383
case NI_AdvSimd_LoadAndInsertScalar:
1422
1384
{
1423
1385
assert (isRMW);
1424
- if (targetReg != op1Reg)
1425
- {
1426
- assert (targetReg != op3Reg);
1427
-
1428
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
1429
- }
1386
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
1387
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
1430
1388
1431
1389
HWIntrinsicImmOpHelper helper (this , intrin.op2 , node);
1432
1390
@@ -1466,11 +1424,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
1466
1424
targetFieldReg = node->GetRegByIndex (fieldIdx);
1467
1425
op1FieldReg = fieldNode->GetRegNum ();
1468
1426
1469
- if (targetFieldReg != op1FieldReg)
1470
- {
1471
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (fieldNode), targetFieldReg, op1FieldReg,
1472
- /* canSkip */ true );
1473
- }
1427
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (fieldNode), targetFieldReg, op1FieldReg,
1428
+ /* canSkip */ true );
1474
1429
fieldIdx++;
1475
1430
}
1476
1431
@@ -2000,11 +1955,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2000
1955
break ;
2001
1956
}
2002
1957
2003
- if (targetReg != op1Reg)
2004
- {
2005
- assert (targetReg != op3Reg);
2006
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2007
- }
1958
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
1959
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2008
1960
GetEmitter ()->emitIns_R_R_R (ins, emitSize, targetReg, op2Reg, op3Reg, opt);
2009
1961
break ;
2010
1962
}
@@ -2330,12 +2282,9 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2330
2282
case NI_Sve_SaturatingIncrementBy8BitElementCount:
2331
2283
{
2332
2284
assert (isRMW);
2333
- if (targetReg != op1Reg)
2334
- {
2335
- assert (targetReg != op2Reg);
2336
- assert (targetReg != op3Reg);
2337
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2338
- }
2285
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
2286
+ assert ((targetReg == op1Reg) || (targetReg != op3Reg));
2287
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2339
2288
2340
2289
if (intrin.op2 ->IsCnsIntOrI () && intrin.op3 ->IsCnsIntOrI ())
2341
2290
{
@@ -2387,11 +2336,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2387
2336
case NI_Sve_SaturatingIncrementByActiveElementCount:
2388
2337
{
2389
2338
// RMW semantics
2390
- if (targetReg != op1Reg)
2391
- {
2392
- assert (targetReg != op2Reg);
2393
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2394
- }
2339
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
2340
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2395
2341
2396
2342
// Switch instruction if arg1 is unsigned.
2397
2343
if (varTypeIsUnsigned (node->GetAuxiliaryType ()))
@@ -2430,13 +2376,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2430
2376
case NI_Sve_ExtractVector:
2431
2377
{
2432
2378
assert (isRMW);
2433
-
2434
- if (targetReg != op1Reg)
2435
- {
2436
- assert (targetReg != op2Reg);
2437
-
2438
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2439
- }
2379
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
2380
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg, /* canSkip */ true );
2440
2381
2441
2382
HWIntrinsicImmOpHelper helper (this , intrin.op3 , node);
2442
2383
@@ -2454,13 +2395,9 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2454
2395
{
2455
2396
assert (isRMW);
2456
2397
assert (emitter::isFloatReg (op2Reg) == varTypeIsFloating (intrin.baseType ));
2457
- if (targetReg != op1Reg)
2458
- {
2459
- assert (targetReg != op2Reg);
2460
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg,
2461
- /* canSkip */ true );
2462
- }
2463
-
2398
+ assert ((targetReg == op1Reg) || (targetReg != op2Reg));
2399
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op1Reg,
2400
+ /* canSkip */ true );
2464
2401
GetEmitter ()->emitInsSve_R_R (ins, emitSize, targetReg, op2Reg, opt);
2465
2402
break ;
2466
2403
}
@@ -2483,13 +2420,8 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2483
2420
{
2484
2421
assert (isRMW);
2485
2422
assert (HWIntrinsicInfo::IsExplicitMaskedOperation (intrin.id ));
2486
-
2487
- if (targetReg != op2Reg)
2488
- {
2489
- assert (targetReg != op1Reg);
2490
- GetEmitter ()->emitIns_Mov (INS_sve_mov, emitTypeSize (node), targetReg, op2Reg, /* canSkip */ true );
2491
- }
2492
-
2423
+ assert ((targetReg == op2Reg) || (targetReg != op1Reg));
2424
+ GetEmitter ()->emitIns_Mov (INS_sve_mov, emitTypeSize (node), targetReg, op2Reg, /* canSkip */ true );
2493
2425
GetEmitter ()->emitIns_R_R (ins, emitSize, targetReg, op1Reg, INS_OPTS_SCALABLE_B);
2494
2426
break ;
2495
2427
}
@@ -2543,14 +2475,10 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2543
2475
2544
2476
emitSize = emitTypeSize (node);
2545
2477
2546
- if (targetReg != op2Reg)
2547
- {
2548
- assert (targetReg != op1Reg);
2549
- assert (targetReg != op3Reg);
2550
- GetEmitter ()->emitIns_Mov (INS_mov, emitSize, targetReg, op2Reg,
2551
- /* canSkip */ true );
2552
- }
2553
-
2478
+ assert ((targetReg == op2Reg) || (targetReg != op1Reg));
2479
+ assert ((targetReg == op2Reg) || (targetReg != op3Reg));
2480
+ GetEmitter ()->emitIns_Mov (INS_mov, emitSize, targetReg, op2Reg,
2481
+ /* canSkip */ true );
2554
2482
GetEmitter ()->emitInsSve_R_R_R (ins, emitSize, targetReg, op1Reg, op3Reg, opt,
2555
2483
INS_SCALABLE_OPTS_NONE);
2556
2484
break ;
@@ -2564,14 +2492,10 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
2564
2492
{
2565
2493
assert (emitter::isFloatReg (targetReg));
2566
2494
assert (varTypeIsFloating (node->gtType ) || varTypeIsSIMD (node->gtType ));
2567
-
2568
- if (targetReg != op2Reg)
2569
- {
2570
- assert (targetReg != op1Reg);
2571
- assert (targetReg != op3Reg);
2572
- GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op2Reg,
2573
- /* canSkip */ true );
2574
- }
2495
+ assert ((targetReg == op2Reg) || (targetReg != op1Reg));
2496
+ assert ((targetReg == op2Reg) || (targetReg != op3Reg));
2497
+ GetEmitter ()->emitIns_Mov (INS_mov, emitTypeSize (node), targetReg, op2Reg,
2498
+ /* canSkip */ true );
2575
2499
GetEmitter ()->emitInsSve_R_R_R (ins, EA_SCALABLE, targetReg, op1Reg, op3Reg, opt,
2576
2500
INS_SCALABLE_OPTS_WITH_SIMD_SCALAR);
2577
2501
break ;
0 commit comments