@@ -700,57 +700,57 @@ class MVE_VMLAMLSDAV<string iname, string suffix, dag iops, string cstr,
700
700
let Inst{0} = bit_0;
701
701
}
702
702
703
- multiclass MVE_VMLAMLSDAV_X<string iname, string suffix, dag iops, string cstr,
704
- bit sz, bit bit_28, bit A, bit bit_8, bit bit_0,
705
- list<dag> pattern=[]> {
706
- def _noexch : MVE_VMLAMLSDAV<iname, suffix, iops, cstr, sz,
707
- bit_28, A, 0b0, bit_8, bit_0, pattern>;
708
- def _exch : MVE_VMLAMLSDAV<iname # "x", suffix, iops, cstr, sz,
709
- bit_28, A, 0b1, bit_8, bit_0, pattern>;
703
+ multiclass MVE_VMLAMLSDAV_A<string iname, string x, string suffix,
704
+ bit sz, bit bit_28, bit X, bit bit_8, bit bit_0,
705
+ list<dag> pattern=[]> {
706
+ def ""#x#suffix : MVE_VMLAMLSDAV<iname # x, suffix,
707
+ (ins MQPR:$Qn, MQPR:$Qm), "",
708
+ sz, bit_28, 0b0, X, bit_8, bit_0, pattern>;
709
+ def "a"#x#suffix : MVE_VMLAMLSDAV<iname # "a" # x, suffix,
710
+ (ins tGPREven:$RdaSrc, MQPR:$Qn, MQPR:$Qm),
711
+ "$RdaDest = $RdaSrc",
712
+ sz, bit_28, 0b1, X, bit_8, bit_0, pattern>;
713
+ }
714
+
715
+ multiclass MVE_VMLAMLSDAV_AX<string iname, string suffix, bit sz, bit bit_28,
716
+ bit bit_8, bit bit_0, list<dag> pattern=[]> {
717
+ defm "" : MVE_VMLAMLSDAV_A<iname, "", suffix, sz, bit_28,
718
+ 0b0, bit_8, bit_0, pattern>;
719
+ defm "" : MVE_VMLAMLSDAV_A<iname, "x", suffix, sz, bit_28,
720
+ 0b1, bit_8, bit_0, pattern>;
710
721
}
711
722
712
- multiclass MVE_VMLAMLSDAV_XA<string iname, string suffix, bit sz, bit bit_28,
713
- bit bit_8, bit bit_0, list<dag> pattern=[]> {
714
- defm _noacc : MVE_VMLAMLSDAV_X<iname, suffix, (ins MQPR:$Qn, MQPR:$Qm), "",
715
- sz, bit_28, 0b0, bit_8, bit_0, pattern>;
716
- defm _acc : MVE_VMLAMLSDAV_X<iname # "a", suffix,
717
- (ins tGPREven:$RdaSrc, MQPR:$Qn, MQPR:$Qm),
718
- "$RdaDest = $RdaSrc",
719
- sz, bit_28, 0b1, bit_8, bit_0, pattern>;
723
+ multiclass MVE_VMLADAV_multi<string suffix, bit sz, bit bit_8,
724
+ list<dag> pattern=[]> {
725
+ defm "" : MVE_VMLAMLSDAV_AX<"vmladav", "s"#suffix,
726
+ sz, 0b0, bit_8, 0b0, pattern>;
727
+ defm "" : MVE_VMLAMLSDAV_A<"vmladav", "", "u"#suffix,
728
+ sz, 0b1, 0b0, bit_8, 0b0, pattern>;
720
729
}
721
730
722
- multiclass MVE_VMLADAV_multi<string suffix, bit sz, bit U, bit bit_8,
723
- list<dag> pattern=[]> {
724
- defm "" : MVE_VMLAMLSDAV_XA<"vmladav", suffix, sz, U, bit_8, 0b0, pattern>;
731
+ multiclass MVE_VMLSDAV_multi<string suffix, bit sz, bit bit_28,
732
+ list<dag> pattern=[]> {
733
+ defm "" : MVE_VMLAMLSDAV_AX<"vmlsdav", "s"#suffix,
734
+ sz, bit_28, 0b0, 0b1, pattern>;
725
735
}
726
736
727
- defm MVE_VMLADAVs16 : MVE_VMLADAV_multi<"s16", 0b0, 0b0, 0b0>;
728
- defm MVE_VMLADAVs32 : MVE_VMLADAV_multi<"s32", 0b1, 0b0, 0b0>;
729
- defm MVE_VMLADAVu16 : MVE_VMLADAV_multi<"u16", 0b0, 0b1, 0b0>;
730
- defm MVE_VMLADAVu32 : MVE_VMLADAV_multi<"u32", 0b1, 0b1, 0b0>;
737
+ defm MVE_VMLADAV : MVE_VMLADAV_multi< "8", 0b0, 0b1>;
738
+ defm MVE_VMLADAV : MVE_VMLADAV_multi<"16", 0b0, 0b0>;
739
+ defm MVE_VMLADAV : MVE_VMLADAV_multi<"32", 0b1, 0b0>;
731
740
732
- defm MVE_VMLADAVs8 : MVE_VMLADAV_multi<"s8", 0b0, 0b0, 0b1>;
733
- defm MVE_VMLADAVu8 : MVE_VMLADAV_multi<"u8", 0b0, 0b1, 0b1>;
741
+ defm MVE_VMLSDAV : MVE_VMLSDAV_multi< "8", 0b0, 0b1>;
742
+ defm MVE_VMLSDAV : MVE_VMLSDAV_multi<"16", 0b0, 0b0>;
743
+ defm MVE_VMLSDAV : MVE_VMLSDAV_multi<"32", 0b1, 0b0>;
734
744
735
745
// vmlav aliases vmladav
736
- foreach acc = ["_acc ", "_noacc "] in {
746
+ foreach acc = ["", "a "] in {
737
747
foreach suffix = ["s8", "s16", "s32", "u8", "u16", "u32"] in {
738
- def : MVEInstAlias<!strconcat("vmlav", !if(!eq(acc, "_acc"), "a", ""),
739
- "${vp}.", suffix, "\t$RdaDest, $Qn, $Qm"),
740
- (!cast<Instruction>("MVE_VMLADAV"#suffix#acc#"_noexch")
748
+ def : MVEInstAlias<"vmlav"#acc#"${vp}."#suffix#"\t$RdaDest, $Qn, $Qm",
749
+ (!cast<Instruction>("MVE_VMLADAV"#acc#suffix)
741
750
tGPREven:$RdaDest, MQPR:$Qn, MQPR:$Qm, vpred_n:$vp)>;
742
751
}
743
752
}
744
753
745
- multiclass MVE_VMLSDAV_multi<string suffix, bit sz, bit bit_28,
746
- list<dag> pattern=[]> {
747
- defm "" : MVE_VMLAMLSDAV_XA<"vmlsdav", suffix, sz, bit_28, 0b0, 0b1, pattern>;
748
- }
749
-
750
- defm MVE_VMLSDAVs8 : MVE_VMLSDAV_multi<"s8", 0, 0b1>;
751
- defm MVE_VMLSDAVs16 : MVE_VMLSDAV_multi<"s16", 0, 0b0>;
752
- defm MVE_VMLSDAVs32 : MVE_VMLSDAV_multi<"s32", 1, 0b0>;
753
-
754
754
// Base class for VMLALDAV and VMLSLDAV, VRMLALDAVH, VRMLSLDAVH
755
755
class MVE_VMLALDAVBase<string iname, string suffix, dag iops, string cstr,
756
756
bit sz, bit bit_28, bit A, bit X, bit bit_8, bit bit_0,
@@ -775,82 +775,83 @@ class MVE_VMLALDAVBase<string iname, string suffix, dag iops, string cstr,
775
775
let Inst{0} = bit_0;
776
776
}
777
777
778
- multiclass MVE_VMLALDAVBase_X<string iname, string suffix, dag iops,
779
- string cstr, bit sz, bit bit_28, bit A,
780
- bit bit_8, bit bit_0, list<dag> pattern=[]> {
781
- def _noexch : MVE_VMLALDAVBase<iname, suffix, iops, cstr, sz,
782
- bit_28, A, 0b0, bit_8, bit_0, pattern>;
783
- def _exch : MVE_VMLALDAVBase<iname # "x", suffix, iops, cstr, sz,
784
- bit_28, A, 0b1, bit_8, bit_0, pattern>;
778
+ multiclass MVE_VMLALDAVBase_A<string iname, string x, string suffix,
779
+ bit sz, bit bit_28, bit X, bit bit_8, bit bit_0,
780
+ list<dag> pattern=[]> {
781
+ def ""#x#suffix : MVE_VMLALDAVBase<
782
+ iname # x, suffix, (ins MQPR:$Qn, MQPR:$Qm), "",
783
+ sz, bit_28, 0b0, X, bit_8, bit_0, pattern>;
784
+ def "a"#x#suffix : MVE_VMLALDAVBase<
785
+ iname # "a" # x, suffix,
786
+ (ins tGPREven:$RdaLoSrc, tGPROdd:$RdaHiSrc, MQPR:$Qn, MQPR:$Qm),
787
+ "$RdaLoDest = $RdaLoSrc,$RdaHiDest = $RdaHiSrc",
788
+ sz, bit_28, 0b1, X, bit_8, bit_0, pattern>;
785
789
}
786
790
787
- multiclass MVE_VMLALDAVBase_XA<string iname, string suffix, bit sz, bit bit_28,
788
- bit bit_8, bit bit_0, list<dag> pattern=[]> {
789
- defm _noacc : MVE_VMLALDAVBase_X<
790
- iname, suffix, (ins MQPR:$Qn, MQPR:$Qm), "",
791
- sz, bit_28, 0b0, bit_8, bit_0, pattern>;
792
- defm _acc : MVE_VMLALDAVBase_X<
793
- iname # "a", suffix, (ins tGPREven:$RdaLoSrc, tGPROdd:$RdaHiSrc,
794
- MQPR:$Qn, MQPR:$Qm),
795
- "$RdaLoDest = $RdaLoSrc,$RdaHiDest = $RdaHiSrc",
796
- sz, bit_28, 0b1, bit_8, bit_0, pattern>;
791
+
792
+ multiclass MVE_VMLALDAVBase_AX<string iname, string suffix, bit sz, bit bit_28,
793
+ bit bit_8, bit bit_0, list<dag> pattern=[]> {
794
+ defm "" : MVE_VMLALDAVBase_A<iname, "", suffix, sz,
795
+ bit_28, 0b0, bit_8, bit_0, pattern>;
796
+ defm "" : MVE_VMLALDAVBase_A<iname, "x", suffix, sz,
797
+ bit_28, 0b1, bit_8, bit_0, pattern>;
797
798
}
798
799
799
- multiclass MVE_VRMLALDAVH_multi<string suffix, bit U, list<dag> pattern=[]> {
800
- defm "" : MVE_VMLALDAVBase_XA<
801
- "vrmlaldavh", suffix, 0b0, U, 0b1, 0b0, pattern>;
800
+ multiclass MVE_VRMLALDAVH_multi<string suffix, list<dag> pattern=[]> {
801
+ defm "" : MVE_VMLALDAVBase_AX<"vrmlaldavh", "s"#suffix,
802
+ 0b0, 0b0, 0b1, 0b0, pattern>;
803
+ defm "" : MVE_VMLALDAVBase_A<"vrmlaldavh", "", "u"#suffix,
804
+ 0b0, 0b1, 0b0, 0b1, 0b0, pattern>;
802
805
}
803
806
804
- defm MVE_VRMLALDAVHs32 : MVE_VRMLALDAVH_multi<"s32", 0>;
805
- defm MVE_VRMLALDAVHu32 : MVE_VRMLALDAVH_multi<"u32", 1>;
807
+ defm MVE_VRMLALDAVH : MVE_VRMLALDAVH_multi<"32">;
806
808
807
809
// vrmlalvh aliases for vrmlaldavh
808
810
def : MVEInstAlias<"vrmlalvh${vp}.s32\t$RdaLo, $RdaHi, $Qn, $Qm",
809
- (MVE_VRMLALDAVHs32_noacc_noexch
811
+ (MVE_VRMLALDAVHs32
810
812
tGPREven:$RdaLo, tGPROdd:$RdaHi,
811
813
MQPR:$Qn, MQPR:$Qm, vpred_n:$vp)>;
812
814
def : MVEInstAlias<"vrmlalvha${vp}.s32\t$RdaLo, $RdaHi, $Qn, $Qm",
813
- (MVE_VRMLALDAVHs32_acc_noexch
815
+ (MVE_VRMLALDAVHas32
814
816
tGPREven:$RdaLo, tGPROdd:$RdaHi,
815
817
MQPR:$Qn, MQPR:$Qm, vpred_n:$vp)>;
816
818
def : MVEInstAlias<"vrmlalvh${vp}.u32\t$RdaLo, $RdaHi, $Qn, $Qm",
817
- (MVE_VRMLALDAVHu32_noacc_noexch
819
+ (MVE_VRMLALDAVHu32
818
820
tGPREven:$RdaLo, tGPROdd:$RdaHi,
819
821
MQPR:$Qn, MQPR:$Qm, vpred_n:$vp)>;
820
822
def : MVEInstAlias<"vrmlalvha${vp}.u32\t$RdaLo, $RdaHi, $Qn, $Qm",
821
- (MVE_VRMLALDAVHu32_acc_noexch
823
+ (MVE_VRMLALDAVHau32
822
824
tGPREven:$RdaLo, tGPROdd:$RdaHi,
823
825
MQPR:$Qn, MQPR:$Qm, vpred_n:$vp)>;
824
826
825
- multiclass MVE_VMLALDAV_multi<string suffix, bit sz, bit U,
826
- list<dag> pattern=[]> {
827
- defm "" : MVE_VMLALDAVBase_XA<"vmlaldav", suffix, sz, U, 0b0, 0b0, pattern>;
827
+ multiclass MVE_VMLALDAV_multi<string suffix, bit sz, list<dag> pattern=[]> {
828
+ defm "" : MVE_VMLALDAVBase_AX<"vmlaldav", "s"#suffix, sz, 0b0, 0b0, 0b0, pattern>;
829
+ defm "" : MVE_VMLALDAVBase_A<"vmlaldav", "", "u"#suffix,
830
+ sz, 0b1, 0b0, 0b0, 0b0, pattern>;
828
831
}
829
832
830
- defm MVE_VMLALDAVs16 : MVE_VMLALDAV_multi<"s16", 0b0, 0b0>;
831
- defm MVE_VMLALDAVs32 : MVE_VMLALDAV_multi<"s32", 0b1, 0b0>;
832
- defm MVE_VMLALDAVu16 : MVE_VMLALDAV_multi<"u16", 0b0, 0b1>;
833
- defm MVE_VMLALDAVu32 : MVE_VMLALDAV_multi<"u32", 0b1, 0b1>;
833
+ defm MVE_VMLALDAV : MVE_VMLALDAV_multi<"16", 0b0>;
834
+ defm MVE_VMLALDAV : MVE_VMLALDAV_multi<"32", 0b1>;
834
835
835
836
// vmlalv aliases vmlaldav
836
- foreach acc = ["_acc ", "_noacc "] in {
837
+ foreach acc = ["", "a "] in {
837
838
foreach suffix = ["s16", "s32", "u16", "u32"] in {
838
- def : MVEInstAlias<!strconcat( "vmlalv", !if(!eq( acc, "_acc"), "a", ""),
839
- "${vp}.", suffix, "\t$RdaLoDest, $RdaHiDest, $Qn, $Qm") ,
840
- (!cast<Instruction>("MVE_VMLALDAV"#suffix# acc#"_noexch" )
839
+ def : MVEInstAlias<"vmlalv" # acc # "${vp}." # suffix #
840
+ "\t$RdaLoDest, $RdaHiDest, $Qn, $Qm",
841
+ (!cast<Instruction>("MVE_VMLALDAV"#acc#suffix )
841
842
tGPREven:$RdaLoDest, tGPROdd:$RdaHiDest,
842
843
MQPR:$Qn, MQPR:$Qm, vpred_n:$vp)>;
843
844
}
844
845
}
845
846
846
847
multiclass MVE_VMLSLDAV_multi<string iname, string suffix, bit sz,
847
- bit bit_28, list<dag> pattern=[]> {
848
- defm "" : MVE_VMLALDAVBase_XA <iname, suffix, sz, bit_28, 0b0, 0b1, pattern>;
848
+ bit bit_28, list<dag> pattern=[]> {
849
+ defm "" : MVE_VMLALDAVBase_AX <iname, suffix, sz, bit_28, 0b0, 0b1, pattern>;
849
850
}
850
851
851
- defm MVE_VMLSLDAVs16 : MVE_VMLSLDAV_multi<"vmlsldav", "s16", 0b0, 0b0>;
852
- defm MVE_VMLSLDAVs32 : MVE_VMLSLDAV_multi<"vmlsldav", "s32", 0b1, 0b0>;
853
- defm MVE_VRMLSLDAVHs32 : MVE_VMLSLDAV_multi<"vrmlsldavh", "s32", 0b0, 0b1>;
852
+ defm MVE_VMLSLDAV : MVE_VMLSLDAV_multi<"vmlsldav", "s16", 0b0, 0b0>;
853
+ defm MVE_VMLSLDAV : MVE_VMLSLDAV_multi<"vmlsldav", "s32", 0b1, 0b0>;
854
+ defm MVE_VRMLSLDAVH : MVE_VMLSLDAV_multi<"vrmlsldavh", "s32", 0b0, 0b1>;
854
855
855
856
// end of mve_rDest instructions
856
857
0 commit comments