@@ -628,6 +628,10 @@ multiclass CVTm<string opcStr, bits<8> opc,
628
628
629
629
//===----------------------------------------------------------------------===//
630
630
// Instructions
631
+ //
632
+ // Define all scalar instructions defined in SX-Aurora TSUBASA Architecture
633
+ // Guide here. As those mnemonics, we use mnemonics defined in Vector Engine
634
+ // Assembly Language Reference Manual.
631
635
//===----------------------------------------------------------------------===//
632
636
633
637
//-----------------------------------------------------------------------------
@@ -773,6 +777,21 @@ defm ST2B : STOREm<"st2b", 0x14, I32, i32, truncstorei16>;
773
777
let DecoderMethod = "DecodeStoreI8" in
774
778
defm ST1B : STOREm<"st1b", 0x15, I32, i32, truncstorei8>;
775
779
780
+ // Section 8.2.12 - DLDS
781
+ // Section 8.2.13 - DLDU
782
+ // Section 8.2.14 - DLDL
783
+ // Section 8.2.15 - PFCH
784
+ // Section 8.2.16 - TS1AM (Test and Set 1 AM)
785
+ // Section 8.2.17 - TS2AM (Test and Set 2 AM)
786
+ // Section 8.2.18 - TS3AM (Test and Set 3 AM)
787
+ // Section 8.2.19 - ATMAM (Atomic AM)
788
+ // Section 8.2.20 - CAS (Compare and Swap)
789
+ //-----------------------------------------------------------------------------
790
+ // Section 8.3 - Transfer Control Instructions
791
+ //-----------------------------------------------------------------------------
792
+ // Section 8.3.1 - FENCE (Fence)
793
+ // Section 8.3.2 - SVOB (Set Vector Out-of-order memory access Boundary)
794
+
776
795
// CMOV instructions
777
796
let cx = 0, cw = 0, cw2 = 0 in
778
797
defm CMOVL : RRCMOVm<"cmov.l.${cf}", 0x3B, I64, i64, simm7, uimm6>;
@@ -786,102 +805,78 @@ defm CMOVD : RRCMOVm<"cmov.d.${cf}", 0x3B, I64, f64, simm7, uimm6>;
786
805
let cx = 0, cw = 1, cw2 = 1 in
787
806
defm CMOVS : RRCMOVm<"cmov.s.${cf}", 0x3B, F32, f32, simm7, uimm6>;
788
807
808
+ //-----------------------------------------------------------------------------
809
+ // Section 8.4 - Fixed-point Operation Instructions
810
+ //-----------------------------------------------------------------------------
789
811
790
- // 5.3.2.2. Fixed-Point Arithmetic Operation Instructions
812
+ // Section 8.4.1 - ADD (Add)
813
+ defm ADDUL : RRm<"addu.l", 0x48, I64, i64>;
814
+ let cx = 1 in defm ADDUW : RRm<"addu.w", 0x48, I32, i32>;
791
815
792
- // ADD instruction
793
- let cx = 0 in
794
- defm ADD : RRm<"addu.l", 0x48, I64, i64>;
795
- let cx = 1 in
796
- defm ADDUW : RRm<"addu.w", 0x48, I32, i32>;
816
+ // Section 8.4.2 - ADS (Add Single)
817
+ defm ADDSWSX : RRm<"adds.w.sx", 0x4A, I32, i32, add>;
818
+ let cx = 1 in defm ADDSWZX : RRm<"adds.w.zx", 0x4A, I32, i32>;
797
819
798
- // ADS instruction
799
- let cx = 0 in
800
- defm ADS : RRm<"adds.w.sx", 0x4A, I32, i32, add>;
801
- let cx = 1 in
802
- defm ADSU : RRm<"adds.w.zx", 0x4A, I32, i32>;
820
+ // Section 8.4.3 - ADX (Add)
821
+ defm ADDSL : RRm<"adds.l", 0x59, I64, i64, add>;
803
822
804
- // ADX instruction
805
- let cx = 0 in
806
- defm ADX : RRm<"adds.l ", 0x59, I64, i64, add >;
823
+ // Section 8.4.4 - SUB (Subtract)
824
+ defm SUBUL : RRNCm<"subu.l", 0x58, I64, i64>;
825
+ let cx = 1 in defm SUBUW : RRNCm<"subu.w ", 0x58, I32, i32 >;
807
826
808
- // SUB instruction
809
- let cx = 0 in
810
- defm SUB : RRm<"subu.l", 0x58, I64, i64>;
811
- let cx = 1 in
812
- defm SUBUW : RRm<"subu.w", 0x58, I32, i32>;
827
+ // Section 8.4.5 - SBS (Subtract Single)
828
+ defm SUBSWSX : RRNCm<"subs.w.sx", 0x5A, I32, i32, sub>;
829
+ let cx = 1 in defm SUBSWZX : RRNCm<"subs.w.zx", 0x5A, I32, i32>;
813
830
814
- // SBS instruction
815
- let cx = 0 in
816
- defm SBS : RRNCm<"subs.w.sx", 0x5A, I32, i32, sub>;
817
- let cx = 1 in
818
- defm SBSU : RRm<"subs.w.zx", 0x5A, I32, i32>;
831
+ // Section 8.4.6 - SBX (Subtract)
832
+ defm SUBSL : RRNCm<"subs.l", 0x5B, I64, i64, sub>;
819
833
820
- // SBX instruction
821
- let cx = 0 in
822
- defm SBX : RRNCm<"subs.l ", 0x5B, I64, i64, sub >;
834
+ // Section 8.4.7 - MPY (Multiply)
835
+ defm MULUL : RRm<"mulu.l", 0x49, I64, i64>;
836
+ let cx = 1 in defm MULUW : RRm<"mulu.w ", 0x49, I32, i32 >;
823
837
824
- // MPY instruction
825
- let cx = 0 in
826
- defm MPY : RRm<"mulu.l", 0x49, I64, i64>;
827
- let cx = 1 in
828
- defm MPYUW : RRm<"mulu.w", 0x49, I32, i32>;
838
+ // Section 8.4.8 - MPS (Multiply Single)
839
+ defm MULSWSX : RRm<"muls.w.sx", 0x4B, I32, i32, mul>;
840
+ let cx = 1 in defm MULSWZX : RRm<"muls.w.zx", 0x4B, I32, i32>;
829
841
830
- // MPS instruction
831
- let cx = 0 in
832
- defm MPS : RRm<"muls.w.sx", 0x4B, I32, i32, mul>;
833
- let cx = 1 in
834
- defm MPSU : RRm<"muls.w.zx", 0x4B, I32, i32>;
842
+ // Section 8.4.9 - MPX (Multiply)
843
+ defm MULSL : RRm<"muls.l", 0x6E, I64, i64, mul>;
835
844
836
- // MPX instruction
837
- let cx = 0 in
838
- defm MPX : RRm<"muls.l", 0x6E, I64, i64, mul>;
845
+ // Section 8.4.10 - MPD (Multiply)
839
846
840
- // DIV instruction
841
- let cx = 0 in
842
- defm DIV : RRNCm<"divu.l", 0x6F, I64, i64, udiv>;
843
- let cx = 1 in
844
- defm DIVUW : RRNCm<"divu.w", 0x6F, I32, i32, udiv>;
847
+ // Section 8.4.11 - DIV (Divide)
848
+ defm DIVUL : RRNCm<"divu.l", 0x6F, I64, i64, udiv>;
849
+ let cx = 1 in defm DIVUW : RRNCm<"divu.w", 0x6F, I32, i32, udiv>;
845
850
846
- // DVS instruction
847
- let cx = 0 in
848
- defm DVS : RRNCm<"divs.w.sx", 0x7B, I32, i32, sdiv>;
849
- let cx = 1 in
850
- defm DVSU : RRm<"divs.w.zx", 0x7B, I32, i32>;
851
+ // Section 8.4.12 - DVS (Divide Single)
852
+ defm DIVSWSX : RRNCm<"divs.w.sx", 0x7B, I32, i32, sdiv>;
853
+ let cx = 1 in defm DIVSWZX : RRNCm<"divs.w.zx", 0x7B, I32, i32>;
851
854
852
- // DVX instruction
853
- let cx = 0 in
854
- defm DVX : RRNCm<"divs.l", 0x7F, I64, i64, sdiv>;
855
+ // Section 8.4.13 - DVX (Divide)
856
+ defm DIVSL : RRNCm<"divs.l", 0x7F, I64, i64, sdiv>;
855
857
856
- // CMP instruction
857
- let cx = 0 in
858
- defm CMP : RRm<"cmpu.l", 0x55, I64, i64>;
859
- let cx = 1 in
860
- defm CMPUW : RRm<"cmpu.w", 0x55, I32, i32>;
858
+ // Section 8.4.14 - CMP (Compare)
859
+ defm CMPUL : RRNCm<"cmpu.l", 0x55, I64, i64>;
860
+ let cx = 1 in defm CMPUW : RRNCm<"cmpu.w", 0x55, I32, i32>;
861
861
862
- // CPS instruction
863
- let cx = 0 in
864
- defm CPS : RRm<"cmps.w.sx", 0x7A, I32, i32>;
865
- let cx = 1 in
866
- defm CPSU : RRm<"cmps.w.zx", 0x7A, I32, i32>;
862
+ // Section 8.4.15 - CPS (Compare Single)
863
+ defm CMPSWSX : RRNCm<"cmps.w.sx", 0x7A, I32, i32>;
864
+ let cx = 1 in defm CMPSWZX : RRNCm<"cmps.w.zx", 0x7A, I32, i32>;
867
865
868
- // CPX instruction
869
- let cx = 0 in
870
- defm CPX : RRm<"cmps.l", 0x6A, I64, i64>;
866
+ // Section 8.4.16 - CPX (Compare)
867
+ defm CMPSL : RRNCm<"cmps.l", 0x6A, I64, i64>;
871
868
869
+ // Section 8.4.17 - CMS (Compare and Select Maximum/Minimum Single)
872
870
// cx: sx/zx, cw: max/min
871
+ defm MAXSWSX : RRm<"maxs.w.sx", 0x78, I32, i32>;
872
+ let cx = 1 in defm MAXSWZX : RRm<"maxs.w.zx", 0x78, I32, i32>;
873
+ let cw = 1 in defm MINSWSX : RRm<"mins.w.sx", 0x78, I32, i32>;
874
+ let cx = 1, cw = 1 in defm MINSWZX : RRm<"mins.w.zx", 0x78, I32, i32>;
873
875
874
- let cw = 0 in defm CMXa :
875
- RRm<"maxs.l", 0x68, I64, i64>;
876
-
877
- let cx = 0, cw = 0 in defm CMSa :
878
- RRm<"maxs.w.zx", 0x78, I32, i32>;
879
-
880
- let cw = 1 in defm CMXi :
881
- RRm<"mins.l", 0x68, I64, i64>;
876
+ // Section 8.4.18 - CMX (Compare and Select Maximum/Minimum)
877
+ defm MAXSL : RRm<"maxs.l", 0x68, I64, i64>;
878
+ let cw = 1 in defm MINSL : RRm<"mins.l", 0x68, I64, i64>;
882
879
883
- let cx = 1, cw = 0 in defm CMSi :
884
- RRm<"mins.w.zx", 0x78, I32, i32>;
885
880
886
881
// 5.3.2.3. Logical Arithmetic Operation Instructions
887
882
@@ -1148,16 +1143,16 @@ def : Pat<(and (trunc i64:$src), 0xffff),
1148
1143
1149
1144
// Cast to i32
1150
1145
def : Pat<(i32 (trunc i64:$src)),
1151
- (ADSrm (EXTRACT_SUBREG $src, sub_i32), 0)>;
1146
+ (ADDSWSXrm (EXTRACT_SUBREG $src, sub_i32), 0)>;
1152
1147
1153
1148
// Cast to i64
1154
1149
def : Pat<(sext_inreg I64:$src, i32),
1155
1150
(INSERT_SUBREG (i64 (IMPLICIT_DEF)),
1156
- (ADSrm (EXTRACT_SUBREG $src, sub_i32), 0), sub_i32)>;
1151
+ (ADDSWSXrm (EXTRACT_SUBREG $src, sub_i32), 0), sub_i32)>;
1157
1152
def : Pat<(i64 (sext i32:$sy)),
1158
- (INSERT_SUBREG (i64 (IMPLICIT_DEF)), (ADSrm $sy, 0), sub_i32)>;
1153
+ (INSERT_SUBREG (i64 (IMPLICIT_DEF)), (ADDSWSXrm $sy, 0), sub_i32)>;
1159
1154
def : Pat<(i64 (zext i32:$sy)),
1160
- (INSERT_SUBREG (i64 (IMPLICIT_DEF)), (ADSUrm $sy, 0), sub_i32)>;
1155
+ (INSERT_SUBREG (i64 (IMPLICIT_DEF)), (ADDSWZXrm $sy, 0), sub_i32)>;
1161
1156
def : Pat<(i64 (fp_to_sint f32:$sy)), (FIXXr (CVDr $sy))>;
1162
1157
1163
1158
// Cast to f32
@@ -1270,7 +1265,7 @@ def : Pat<(brcc CCUIOp:$cond, i32:$l, i32:$r, bb:$addr),
1270
1265
def : Pat<(brcc CCSIOp:$cond, i64:$l, i64:$r, bb:$addr),
1271
1266
(BCRLrr (icond2cc $cond), $l, $r, bb:$addr)>;
1272
1267
def : Pat<(brcc CCUIOp:$cond, i64:$l, i64:$r, bb:$addr),
1273
- (BCRLir (icond2cc $cond), 0, (CMPrr $r, $l), bb:$addr)>;
1268
+ (BCRLir (icond2cc $cond), 0, (CMPULrr $r, $l), bb:$addr)>;
1274
1269
def : Pat<(brcc cond:$cond, f32:$l, f32:$r, bb:$addr),
1275
1270
(BCRSrr (fcond2cc $cond), $l, $r, bb:$addr)>;
1276
1271
def : Pat<(brcc cond:$cond, f64:$l, f64:$r, bb:$addr),
@@ -1332,21 +1327,21 @@ def EXTEND_STACK_GUARD : Pseudo<(outs), (ins),
1332
1327
def : Pat<(i32 (setcc i64:$LHS, i64:$RHS, CCSIOp:$cond)),
1333
1328
(EXTRACT_SUBREG
1334
1329
(CMOVLrm0 (icond2cc $cond),
1335
- (CPXrr i64:$LHS, i64:$RHS),
1330
+ (CMPSLrr i64:$LHS, i64:$RHS),
1336
1331
63,
1337
1332
(ORim 0, 0)), sub_i32)>;
1338
1333
1339
1334
def : Pat<(i32 (setcc i64:$LHS, i64:$RHS, CCUIOp:$cond)),
1340
1335
(EXTRACT_SUBREG
1341
1336
(CMOVLrm0 (icond2cc $cond),
1342
- (CMPrr i64:$LHS, i64:$RHS),
1337
+ (CMPULrr i64:$LHS, i64:$RHS),
1343
1338
63,
1344
1339
(ORim 0, 0)), sub_i32)>;
1345
1340
1346
1341
def : Pat<(i32 (setcc i32:$LHS, i32:$RHS, CCSIOp:$cond)),
1347
1342
(EXTRACT_SUBREG
1348
1343
(CMOVWrm0 (icond2cc $cond),
1349
- (CPSrr i32:$LHS, i32:$RHS),
1344
+ (CMPSWSXrr i32:$LHS, i32:$RHS),
1350
1345
63,
1351
1346
(ORim 0, 0)), sub_i32)>;
1352
1347
@@ -1381,34 +1376,34 @@ def : Pat<(f64 (selectcc f64:$LHS, f64:$RHS, f64:$LHS, f64:$RHS, SETOGT)),
1381
1376
def : Pat<(f32 (selectcc f32:$LHS, f32:$RHS, f32:$LHS, f32:$RHS, SETOGT)),
1382
1377
(FCMASrr $LHS, $RHS)>;
1383
1378
def : Pat<(i64 (selectcc i64:$LHS, i64:$RHS, i64:$LHS, i64:$RHS, SETGT)),
1384
- (CMXarr $LHS, $RHS)>;
1379
+ (MAXSLrr $LHS, $RHS)>;
1385
1380
def : Pat<(i32 (selectcc i32:$LHS, i32:$RHS, i32:$LHS, i32:$RHS, SETGT)),
1386
- (CMSarr $LHS, $RHS)>;
1381
+ (MAXSWSXrr $LHS, $RHS)>;
1387
1382
def : Pat<(f64 (selectcc f64:$LHS, f64:$RHS, f64:$LHS, f64:$RHS, SETOGE)),
1388
1383
(FCMArr $LHS, $RHS)>;
1389
1384
def : Pat<(f32 (selectcc f32:$LHS, f32:$RHS, f32:$LHS, f32:$RHS, SETOGE)),
1390
1385
(FCMASrr $LHS, $RHS)>;
1391
1386
def : Pat<(i64 (selectcc i64:$LHS, i64:$RHS, i64:$LHS, i64:$RHS, SETGE)),
1392
- (CMXarr $LHS, $RHS)>;
1387
+ (MAXSLrr $LHS, $RHS)>;
1393
1388
def : Pat<(i32 (selectcc i32:$LHS, i32:$RHS, i32:$LHS, i32:$RHS, SETGE)),
1394
- (CMSarr $LHS, $RHS)>;
1389
+ (MAXSWSXrr $LHS, $RHS)>;
1395
1390
1396
1391
def : Pat<(f64 (selectcc f64:$LHS, f64:$RHS, f64:$LHS, f64:$RHS, SETOLT)),
1397
1392
(FCMIrr $LHS, $RHS)>;
1398
1393
def : Pat<(f32 (selectcc f32:$LHS, f32:$RHS, f32:$LHS, f32:$RHS, SETOLT)),
1399
1394
(FCMISrr $LHS, $RHS)>;
1400
1395
def : Pat<(i64 (selectcc i64:$LHS, i64:$RHS, i64:$LHS, i64:$RHS, SETLT)),
1401
- (CMXirr $LHS, $RHS)>;
1396
+ (MINSLrr $LHS, $RHS)>;
1402
1397
def : Pat<(i32 (selectcc i32:$LHS, i32:$RHS, i32:$LHS, i32:$RHS, SETLT)),
1403
- (CMSirr $LHS, $RHS)>;
1398
+ (MINSWSXrr $LHS, $RHS)>;
1404
1399
def : Pat<(f64 (selectcc f64:$LHS, f64:$RHS, f64:$LHS, f64:$RHS, SETOLE)),
1405
1400
(FCMIrr $LHS, $RHS)>;
1406
1401
def : Pat<(f32 (selectcc f32:$LHS, f32:$RHS, f32:$LHS, f32:$RHS, SETOLE)),
1407
1402
(FCMISrr $LHS, $RHS)>;
1408
1403
def : Pat<(i64 (selectcc i64:$LHS, i64:$RHS, i64:$LHS, i64:$RHS, SETLE)),
1409
- (CMXirr $LHS, $RHS)>;
1404
+ (MINSLrr $LHS, $RHS)>;
1410
1405
def : Pat<(i32 (selectcc i32:$LHS, i32:$RHS, i32:$LHS, i32:$RHS, SETLE)),
1411
- (CMSirr $LHS, $RHS)>;
1406
+ (MINSWSXrr $LHS, $RHS)>;
1412
1407
1413
1408
// Generic SELECTCC pattern matches
1414
1409
//
@@ -1418,13 +1413,13 @@ def : Pat<(i32 (selectcc i32:$LHS, i32:$RHS, i32:$LHS, i32:$RHS, SETLE)),
1418
1413
1419
1414
// selectcc for i64 result
1420
1415
def : Pat<(i64 (selectcc i32:$l, i32:$r, i64:$t, i64:$f, CCSIOp:$cond)),
1421
- (CMOVWrr (icond2cc $cond), (CPSrr $l, $r), $t, $f)>;
1416
+ (CMOVWrr (icond2cc $cond), (CMPSWSXrr $l, $r), $t, $f)>;
1422
1417
def : Pat<(i64 (selectcc i32:$l, i32:$r, i64:$t, i64:$f, CCUIOp:$cond)),
1423
1418
(CMOVWrr (icond2cc $cond), (CMPUWrr $l, $r), $t, $f)>;
1424
1419
def : Pat<(i64 (selectcc i64:$l, i64:$r, i64:$t, i64:$f, CCSIOp:$cond)),
1425
- (CMOVLrr (icond2cc $cond), (CPXrr $l, $r), $t, $f)>;
1420
+ (CMOVLrr (icond2cc $cond), (CMPSLrr $l, $r), $t, $f)>;
1426
1421
def : Pat<(i64 (selectcc i64:$l, i64:$r, i64:$t, i64:$f, CCUIOp:$cond)),
1427
- (CMOVLrr (icond2cc $cond), (CMPrr $l, $r), $t, $f)>;
1422
+ (CMOVLrr (icond2cc $cond), (CMPULrr $l, $r), $t, $f)>;
1428
1423
def : Pat<(i64 (selectcc f32:$l, f32:$r, i64:$t, i64:$f, cond:$cond)),
1429
1424
(CMOVSrr (fcond2cc $cond), (FCPSrr $l, $r), $t, $f)>;
1430
1425
def : Pat<(i64 (selectcc f64:$l, f64:$r, i64:$t, i64:$f, cond:$cond)),
@@ -1434,7 +1429,7 @@ def : Pat<(i64 (selectcc f64:$l, f64:$r, i64:$t, i64:$f, cond:$cond)),
1434
1429
def : Pat<(i32 (selectcc i32:$l, i32:$r, i32:$t, i32:$f, CCSIOp:$cond)),
1435
1430
(EXTRACT_SUBREG
1436
1431
(CMOVWrr (icond2cc $cond),
1437
- (CPSrr $l, $r),
1432
+ (CMPSWSXrr $l, $r),
1438
1433
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), $t, sub_i32),
1439
1434
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), $f, sub_i32)),
1440
1435
sub_i32)>;
@@ -1448,14 +1443,14 @@ def : Pat<(i32 (selectcc i32:$l, i32:$r, i32:$t, i32:$f, CCUIOp:$cond)),
1448
1443
def : Pat<(i32 (selectcc i64:$l, i64:$r, i32:$t, i32:$f, CCSIOp:$cond)),
1449
1444
(EXTRACT_SUBREG
1450
1445
(CMOVLrr (icond2cc $cond),
1451
- (CPXrr $l, $r),
1446
+ (CMPSLrr $l, $r),
1452
1447
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), $t, sub_i32),
1453
1448
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), $f, sub_i32)),
1454
1449
sub_i32)>;
1455
1450
def : Pat<(i32 (selectcc i64:$l, i64:$r, i32:$t, i32:$f, CCUIOp:$cond)),
1456
1451
(EXTRACT_SUBREG
1457
1452
(CMOVLrr (icond2cc $cond),
1458
- (CMPrr $l, $r),
1453
+ (CMPULrr $l, $r),
1459
1454
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), $t, sub_i32),
1460
1455
(INSERT_SUBREG (i64 (IMPLICIT_DEF)), $f, sub_i32)),
1461
1456
sub_i32)>;
@@ -1476,13 +1471,13 @@ def : Pat<(i32 (selectcc f64:$l, f64:$r, i32:$t, i32:$f, cond:$cond)),
1476
1471
1477
1472
// selectcc for f64 result
1478
1473
def : Pat<(f64 (selectcc i32:$l, i32:$r, f64:$t, f64:$f, CCSIOp:$cond)),
1479
- (CMOVWrr (icond2cc $cond), (CPSrr $l, $r), $t, $f)>;
1474
+ (CMOVWrr (icond2cc $cond), (CMPSWSXrr $l, $r), $t, $f)>;
1480
1475
def : Pat<(f64 (selectcc i32:$l, i32:$r, f64:$t, f64:$f, CCUIOp:$cond)),
1481
1476
(CMOVWrr (icond2cc $cond), (CMPUWrr $l, $r), $t, $f)>;
1482
1477
def : Pat<(f64 (selectcc i64:$l, i64:$r, f64:$t, f64:$f, CCSIOp:$cond)),
1483
- (CMOVLrr (icond2cc $cond), (CPXrr $l, $r), $t, $f)>;
1478
+ (CMOVLrr (icond2cc $cond), (CMPSLrr $l, $r), $t, $f)>;
1484
1479
def : Pat<(f64 (selectcc i64:$l, i64:$r, f64:$t, f64:$f, CCUIOp:$cond)),
1485
- (CMOVLrr (icond2cc $cond), (CMPrr $l, $r), $t, $f)>;
1480
+ (CMOVLrr (icond2cc $cond), (CMPULrr $l, $r), $t, $f)>;
1486
1481
def : Pat<(f64 (selectcc f32:$l, f32:$r, f64:$t, f64:$f, cond:$cond)),
1487
1482
(CMOVSrr (fcond2cc $cond), (FCPSrr $l, $r), $t, $f)>;
1488
1483
def : Pat<(f64 (selectcc f64:$l, f64:$r, f64:$t, f64:$f, cond:$cond)),
@@ -1492,7 +1487,7 @@ def : Pat<(f64 (selectcc f64:$l, f64:$r, f64:$t, f64:$f, cond:$cond)),
1492
1487
def : Pat<(f32 (selectcc i32:$l, i32:$r, f32:$t, f32:$f, CCSIOp:$cond)),
1493
1488
(EXTRACT_SUBREG
1494
1489
(CMOVWrr (icond2cc $cond),
1495
- (CPSrr $l, $r),
1490
+ (CMPSWSXrr $l, $r),
1496
1491
(INSERT_SUBREG (f64 (IMPLICIT_DEF)), $t, sub_f32),
1497
1492
(INSERT_SUBREG (f64 (IMPLICIT_DEF)), $f, sub_f32)),
1498
1493
sub_f32)>;
@@ -1506,14 +1501,14 @@ def : Pat<(f32 (selectcc i32:$l, i32:$r, f32:$t, f32:$f, CCUIOp:$cond)),
1506
1501
def : Pat<(f32 (selectcc i64:$l, i64:$r, f32:$t, f32:$f, CCSIOp:$cond)),
1507
1502
(EXTRACT_SUBREG
1508
1503
(CMOVLrr (icond2cc $cond),
1509
- (CPXrr $l, $r),
1504
+ (CMPSLrr $l, $r),
1510
1505
(INSERT_SUBREG (f64 (IMPLICIT_DEF)), $t, sub_f32),
1511
1506
(INSERT_SUBREG (f64 (IMPLICIT_DEF)), $f, sub_f32)),
1512
1507
sub_f32)>;
1513
1508
def : Pat<(f32 (selectcc i64:$l, i64:$r, f32:$t, f32:$f, CCUIOp:$cond)),
1514
1509
(EXTRACT_SUBREG
1515
1510
(CMOVLrr (icond2cc $cond),
1516
- (CMPrr $l, $r),
1511
+ (CMPULrr $l, $r),
1517
1512
(INSERT_SUBREG (f64 (IMPLICIT_DEF)), $t, sub_f32),
1518
1513
(INSERT_SUBREG (f64 (IMPLICIT_DEF)), $f, sub_f32)),
1519
1514
sub_f32)>;
0 commit comments