@@ -10378,6 +10378,78 @@ defm : PromoteBinaryv8f16Tov4f32<any_fdiv, FDIVv4f32>;
1037810378defm : PromoteBinaryv8f16Tov4f32<any_fmul, FMULv4f32>;
1037910379defm : PromoteBinaryv8f16Tov4f32<any_fsub, FSUBv4f32>;
1038010380
10381+ //===----------------------------===//
10382+ // 2024 Architecture Extensions:
10383+ //===----------------------------===//
10384+
10385+ let Predicates = [HasLSFE] in {
10386+ // Floating-point Atomic Load
10387+ defm LDFADDA : AtomicFPLoad<0b10, 0b000, "ldfadda">;
10388+ defm LDFADDAL : AtomicFPLoad<0b11, 0b000, "ldfaddal">;
10389+ defm LDFADD : AtomicFPLoad<0b00, 0b000, "ldfadd">;
10390+ defm LDFADDL : AtomicFPLoad<0b01, 0b000, "ldfaddl">;
10391+ defm LDFMAXA : AtomicFPLoad<0b10, 0b100, "ldfmaxa">;
10392+ defm LDFMAXAL : AtomicFPLoad<0b11, 0b100, "ldfmaxal">;
10393+ defm LDFMAX : AtomicFPLoad<0b00, 0b100, "ldfmax">;
10394+ defm LDFMAXL : AtomicFPLoad<0b01, 0b100, "ldfmaxl">;
10395+ defm LDFMINA : AtomicFPLoad<0b10, 0b101, "ldfmina">;
10396+ defm LDFMINAL : AtomicFPLoad<0b11, 0b101, "ldfminal">;
10397+ defm LDFMIN : AtomicFPLoad<0b00, 0b101, "ldfmin">;
10398+ defm LDFMINL : AtomicFPLoad<0b01, 0b101, "ldfminl">;
10399+ defm LDFMAXNMA : AtomicFPLoad<0b10, 0b110, "ldfmaxnma">;
10400+ defm LDFMAXNMAL : AtomicFPLoad<0b11, 0b110, "ldfmaxnmal">;
10401+ defm LDFMAXNM : AtomicFPLoad<0b00, 0b110, "ldfmaxnm">;
10402+ defm LDFMAXNML : AtomicFPLoad<0b01, 0b110, "ldfmaxnml">;
10403+ defm LDFMINNMA : AtomicFPLoad<0b10, 0b111, "ldfminnma">;
10404+ defm LDFMINNMAL : AtomicFPLoad<0b11, 0b111, "ldfminnmal">;
10405+ defm LDFMINMN : AtomicFPLoad<0b00, 0b111, "ldfminnm">;
10406+ defm LDFMINNML : AtomicFPLoad<0b01, 0b111, "ldfminnml">;
10407+ // BFloat16
10408+ def LDBFADDA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b000, "ldbfadda">;
10409+ def LDBFADDAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b000, "ldbfaddal">;
10410+ def LDBFADD : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b000, "ldbfadd">;
10411+ def LDBFADDL : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b000, "ldbfaddl">;
10412+ def LDBFMAXA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b100, "ldbfmaxa">;
10413+ def LDBFMAXAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b100, "ldbfmaxal">;
10414+ def LDBFMAX : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b100, "ldbfmax">;
10415+ def LDBFMAXL : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b100, "ldbfmaxl">;
10416+ def LDBFMINA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b101, "ldbfmina">;
10417+ def LDBFMINAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b101, "ldbfminal">;
10418+ def LDBFMIN : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b101, "ldbfmin">;
10419+ def LDBFMINL : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b101, "ldbfminl">;
10420+ def LDBFMAXNMA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b110, "ldbfmaxnma">;
10421+ def LDBFMAXNMAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b110, "ldbfmaxnmal">;
10422+ def LDBFMAXNM : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b110, "ldbfmaxnm">;
10423+ def LDBFMAXNML : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b110, "ldbfmaxnml">;
10424+ def LDBFMINNMA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b111, "ldbfminnma">;
10425+ def LDBFMINNMAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b111, "ldbfminnmal">;
10426+ def LDBFMINNM : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b111, "ldbfminnm">;
10427+ def LDBFMINNML : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b111, "ldbfminnml">;
10428+
10429+ // Floating-point Atomic Store
10430+ defm STFADD : AtomicFPStore<0b0, 0b000, "stfadd">;
10431+ defm STFADDL : AtomicFPStore<0b1, 0b000, "stfaddl">;
10432+ defm STFMAX : AtomicFPStore<0b0, 0b100, "stfmax">;
10433+ defm STFMAXL : AtomicFPStore<0b1, 0b100, "stfmaxl">;
10434+ defm STFMIN : AtomicFPStore<0b0, 0b101, "stfmin">;
10435+ defm STFMINL : AtomicFPStore<0b1, 0b101, "stfminl">;
10436+ defm STFMAXNM : AtomicFPStore<0b0, 0b110, "stfmaxnm">;
10437+ defm STFMAXNML : AtomicFPStore<0b1, 0b110, "stfmaxnml">;
10438+ defm STFMINNM : AtomicFPStore<0b0, 0b111, "stfminnm">;
10439+ defm STFMINNML : AtomicFPStore<0b1, 0b111, "stfminnml">;
10440+ // BFloat16
10441+ def STBFADD : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b000, "stbfadd">;
10442+ def STBFADDL : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b000, "stbfaddl">;
10443+ def STBFMAX : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b100, "stbfmax">;
10444+ def STBFMAXL : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b100, "stbfmaxl">;
10445+ def STBFMIN : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b101, "stbfmin">;
10446+ def STBFMINL : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b101, "stbfminl">;
10447+ def STBFMAXNM : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b110, "stbfmaxnm">;
10448+ def STBFMAXNML : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b110, "stbfmaxnml">;
10449+ def STBFMINNM : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b111, "stbfminnm">;
10450+ def STBFMINNML : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b111, "stbfminnml">;
10451+ }
10452+
1038110453include "AArch64InstrAtomics.td"
1038210454include "AArch64SVEInstrInfo.td"
1038310455include "AArch64SMEInstrInfo.td"
0 commit comments