10
10
//
11
11
//===----------------------------------------------------------------------===//
12
12
13
- def SDT_CMPFP : SDTypeProfile<1, 2, [
14
- SDTCisVT<0, FlagsVT>, // out flags
15
- SDTCisFP<1>, // lhs
16
- SDTCisSameAs<2, 1> // rhs
17
- ]>;
18
-
19
- def SDT_CMPFP0 : SDTypeProfile<1, 1, [
20
- SDTCisVT<0, FlagsVT>, // out flags
21
- SDTCisFP<1> // operand
22
- ]>;
23
-
13
+ def SDT_CMPFP0 : SDTypeProfile<0, 1, [SDTCisFP<0>]>;
24
14
def SDT_VMOVDRR : SDTypeProfile<1, 2, [SDTCisVT<0, f64>, SDTCisVT<1, i32>,
25
15
SDTCisSameAs<1, 2>]>;
26
16
def SDT_VMOVRRD : SDTypeProfile<2, 1, [SDTCisVT<0, i32>, SDTCisSameAs<0, 1>,
27
17
SDTCisVT<2, f64>]>;
28
18
29
19
def SDT_VMOVSR : SDTypeProfile<1, 1, [SDTCisVT<0, f32>, SDTCisVT<1, i32>]>;
30
20
31
- def arm_cmpfp : SDNode<"ARMISD::CMPFP", SDT_CMPFP>;
32
- def arm_cmpfp0 : SDNode<"ARMISD::CMPFPw0", SDT_CMPFP0>;
33
- def arm_cmpfpe : SDNode<"ARMISD::CMPFPE", SDT_CMPFP>;
34
- def arm_cmpfpe0 : SDNode<"ARMISD::CMPFPEw0", SDT_CMPFP0>;
35
-
36
- def arm_fmstat : SDNode<"ARMISD::FMSTAT",
37
- SDTypeProfile<0, 1, [
38
- SDTCisVT<0, FlagsVT> // in flags
39
- ]>,
40
- [SDNPOutGlue] // TODO: Change Glue to a normal result.
41
- >;
42
-
21
+ def arm_fmstat : SDNode<"ARMISD::FMSTAT", SDTNone, [SDNPInGlue, SDNPOutGlue]>;
22
+ def arm_cmpfp : SDNode<"ARMISD::CMPFP", SDT_ARMCmp, [SDNPOutGlue]>;
23
+ def arm_cmpfp0 : SDNode<"ARMISD::CMPFPw0", SDT_CMPFP0, [SDNPOutGlue]>;
24
+ def arm_cmpfpe : SDNode<"ARMISD::CMPFPE", SDT_ARMCmp, [SDNPOutGlue]>;
25
+ def arm_cmpfpe0: SDNode<"ARMISD::CMPFPEw0",SDT_CMPFP0, [SDNPOutGlue]>;
43
26
def arm_fmdrr : SDNode<"ARMISD::VMOVDRR", SDT_VMOVDRR>;
44
27
def arm_fmrrd : SDNode<"ARMISD::VMOVRRD", SDT_VMOVRRD>;
45
28
def arm_vmovsr : SDNode<"ARMISD::VMOVSR", SDT_VMOVSR>;
@@ -623,12 +606,12 @@ let Defs = [FPSCR_NZCV] in {
623
606
def VCMPED : ADuI<0b11101, 0b11, 0b0100, 0b11, 0,
624
607
(outs), (ins DPR:$Dd, DPR:$Dm),
625
608
IIC_fpCMP64, "vcmpe", ".f64\t$Dd, $Dm", "",
626
- [(set FPSCR_NZCV, ( arm_cmpfpe DPR:$Dd, (f64 DPR:$Dm) ))]>;
609
+ [(arm_cmpfpe DPR:$Dd, (f64 DPR:$Dm))]>;
627
610
628
611
def VCMPES : ASuI<0b11101, 0b11, 0b0100, 0b11, 0,
629
612
(outs), (ins SPR:$Sd, SPR:$Sm),
630
613
IIC_fpCMP32, "vcmpe", ".f32\t$Sd, $Sm", "",
631
- [(set FPSCR_NZCV, ( arm_cmpfpe SPR:$Sd, SPR:$Sm) )]> {
614
+ [(arm_cmpfpe SPR:$Sd, SPR:$Sm)]> {
632
615
// Some single precision VFP instructions may be executed on both NEON and
633
616
// VFP pipelines on A8.
634
617
let D = VFPNeonA8Domain;
@@ -637,17 +620,17 @@ def VCMPES : ASuI<0b11101, 0b11, 0b0100, 0b11, 0,
637
620
def VCMPEH : AHuI<0b11101, 0b11, 0b0100, 0b11, 0,
638
621
(outs), (ins HPR:$Sd, HPR:$Sm),
639
622
IIC_fpCMP16, "vcmpe", ".f16\t$Sd, $Sm",
640
- [(set FPSCR_NZCV, ( arm_cmpfpe (f16 HPR:$Sd), (f16 HPR:$Sm) ))]>;
623
+ [(arm_cmpfpe (f16 HPR:$Sd), (f16 HPR:$Sm))]>;
641
624
642
625
def VCMPD : ADuI<0b11101, 0b11, 0b0100, 0b01, 0,
643
626
(outs), (ins DPR:$Dd, DPR:$Dm),
644
627
IIC_fpCMP64, "vcmp", ".f64\t$Dd, $Dm", "",
645
- [(set FPSCR_NZCV, ( arm_cmpfp DPR:$Dd, (f64 DPR:$Dm) ))]>;
628
+ [(arm_cmpfp DPR:$Dd, (f64 DPR:$Dm))]>;
646
629
647
630
def VCMPS : ASuI<0b11101, 0b11, 0b0100, 0b01, 0,
648
631
(outs), (ins SPR:$Sd, SPR:$Sm),
649
632
IIC_fpCMP32, "vcmp", ".f32\t$Sd, $Sm", "",
650
- [(set FPSCR_NZCV, ( arm_cmpfp SPR:$Sd, SPR:$Sm) )]> {
633
+ [(arm_cmpfp SPR:$Sd, SPR:$Sm)]> {
651
634
// Some single precision VFP instructions may be executed on both NEON and
652
635
// VFP pipelines on A8.
653
636
let D = VFPNeonA8Domain;
@@ -656,7 +639,7 @@ def VCMPS : ASuI<0b11101, 0b11, 0b0100, 0b01, 0,
656
639
def VCMPH : AHuI<0b11101, 0b11, 0b0100, 0b01, 0,
657
640
(outs), (ins HPR:$Sd, HPR:$Sm),
658
641
IIC_fpCMP16, "vcmp", ".f16\t$Sd, $Sm",
659
- [(set FPSCR_NZCV, ( arm_cmpfp (f16 HPR:$Sd), (f16 HPR:$Sm) ))]>;
642
+ [(arm_cmpfp (f16 HPR:$Sd), (f16 HPR:$Sm))]>;
660
643
} // Defs = [FPSCR_NZCV]
661
644
662
645
//===----------------------------------------------------------------------===//
@@ -686,15 +669,15 @@ let Defs = [FPSCR_NZCV] in {
686
669
def VCMPEZD : ADuI<0b11101, 0b11, 0b0101, 0b11, 0,
687
670
(outs), (ins DPR:$Dd),
688
671
IIC_fpCMP64, "vcmpe", ".f64\t$Dd, #0", "",
689
- [(set FPSCR_NZCV, ( arm_cmpfpe0 (f64 DPR:$Dd) ))]> {
672
+ [(arm_cmpfpe0 (f64 DPR:$Dd))]> {
690
673
let Inst{3-0} = 0b0000;
691
674
let Inst{5} = 0;
692
675
}
693
676
694
677
def VCMPEZS : ASuI<0b11101, 0b11, 0b0101, 0b11, 0,
695
678
(outs), (ins SPR:$Sd),
696
679
IIC_fpCMP32, "vcmpe", ".f32\t$Sd, #0", "",
697
- [(set FPSCR_NZCV, ( arm_cmpfpe0 SPR:$Sd) )]> {
680
+ [(arm_cmpfpe0 SPR:$Sd)]> {
698
681
let Inst{3-0} = 0b0000;
699
682
let Inst{5} = 0;
700
683
@@ -706,23 +689,23 @@ def VCMPEZS : ASuI<0b11101, 0b11, 0b0101, 0b11, 0,
706
689
def VCMPEZH : AHuI<0b11101, 0b11, 0b0101, 0b11, 0,
707
690
(outs), (ins HPR:$Sd),
708
691
IIC_fpCMP16, "vcmpe", ".f16\t$Sd, #0",
709
- [(set FPSCR_NZCV, ( arm_cmpfpe0 (f16 HPR:$Sd) ))]> {
692
+ [(arm_cmpfpe0 (f16 HPR:$Sd))]> {
710
693
let Inst{3-0} = 0b0000;
711
694
let Inst{5} = 0;
712
695
}
713
696
714
697
def VCMPZD : ADuI<0b11101, 0b11, 0b0101, 0b01, 0,
715
698
(outs), (ins DPR:$Dd),
716
699
IIC_fpCMP64, "vcmp", ".f64\t$Dd, #0", "",
717
- [(set FPSCR_NZCV, ( arm_cmpfp0 (f64 DPR:$Dd) ))]> {
700
+ [(arm_cmpfp0 (f64 DPR:$Dd))]> {
718
701
let Inst{3-0} = 0b0000;
719
702
let Inst{5} = 0;
720
703
}
721
704
722
705
def VCMPZS : ASuI<0b11101, 0b11, 0b0101, 0b01, 0,
723
706
(outs), (ins SPR:$Sd),
724
707
IIC_fpCMP32, "vcmp", ".f32\t$Sd, #0", "",
725
- [(set FPSCR_NZCV, ( arm_cmpfp0 SPR:$Sd) )]> {
708
+ [(arm_cmpfp0 SPR:$Sd)]> {
726
709
let Inst{3-0} = 0b0000;
727
710
let Inst{5} = 0;
728
711
@@ -734,7 +717,7 @@ def VCMPZS : ASuI<0b11101, 0b11, 0b0101, 0b01, 0,
734
717
def VCMPZH : AHuI<0b11101, 0b11, 0b0101, 0b01, 0,
735
718
(outs), (ins HPR:$Sd),
736
719
IIC_fpCMP16, "vcmp", ".f16\t$Sd, #0",
737
- [(set FPSCR_NZCV, ( arm_cmpfp0 (f16 HPR:$Sd) ))]> {
720
+ [(arm_cmpfp0 (f16 HPR:$Sd))]> {
738
721
let Inst{3-0} = 0b0000;
739
722
let Inst{5} = 0;
740
723
}
@@ -2509,8 +2492,7 @@ let DecoderMethod = "DecodeForVMRSandVMSR" in {
2509
2492
let Defs = [CPSR], Uses = [FPSCR_NZCV], Predicates = [HasFPRegs],
2510
2493
Rt = 0b1111 /* apsr_nzcv */ in
2511
2494
def FMSTAT : MovFromVFP<0b0001 /* fpscr */, (outs), (ins),
2512
- "vmrs", "\tAPSR_nzcv, fpscr",
2513
- [(arm_fmstat FPSCR_NZCV)]>;
2495
+ "vmrs", "\tAPSR_nzcv, fpscr", [(arm_fmstat)]>;
2514
2496
2515
2497
// Application level FPSCR -> GPR
2516
2498
let hasSideEffects = 1, Uses = [FPSCR], Predicates = [HasFPRegs] in
0 commit comments