@@ -10299,6 +10299,78 @@ defm : PromoteBinaryv8f16Tov4f32<any_fdiv, FDIVv4f32>;
1029910299defm : PromoteBinaryv8f16Tov4f32<any_fmul, FMULv4f32>;
1030010300defm : PromoteBinaryv8f16Tov4f32<any_fsub, FSUBv4f32>;
1030110301
10302+ //===-----------------------------------------------------===//
10303+ // Atomic floating-point in-memory instructions (FEAT_LSFE)
10304+ //===-----------------------------------------------------===//
10305+
10306+ let Predicates = [HasLSFE] in {
10307+ // Floating-point Atomic Load
10308+ defm LDFADDA : AtomicFPLoad<0b10, 0b000, "ldfadda">;
10309+ defm LDFADDAL : AtomicFPLoad<0b11, 0b000, "ldfaddal">;
10310+ defm LDFADD : AtomicFPLoad<0b00, 0b000, "ldfadd">;
10311+ defm LDFADDL : AtomicFPLoad<0b01, 0b000, "ldfaddl">;
10312+ defm LDFMAXA : AtomicFPLoad<0b10, 0b100, "ldfmaxa">;
10313+ defm LDFMAXAL : AtomicFPLoad<0b11, 0b100, "ldfmaxal">;
10314+ defm LDFMAX : AtomicFPLoad<0b00, 0b100, "ldfmax">;
10315+ defm LDFMAXL : AtomicFPLoad<0b01, 0b100, "ldfmaxl">;
10316+ defm LDFMINA : AtomicFPLoad<0b10, 0b101, "ldfmina">;
10317+ defm LDFMINAL : AtomicFPLoad<0b11, 0b101, "ldfminal">;
10318+ defm LDFMIN : AtomicFPLoad<0b00, 0b101, "ldfmin">;
10319+ defm LDFMINL : AtomicFPLoad<0b01, 0b101, "ldfminl">;
10320+ defm LDFMAXNMA : AtomicFPLoad<0b10, 0b110, "ldfmaxnma">;
10321+ defm LDFMAXNMAL : AtomicFPLoad<0b11, 0b110, "ldfmaxnmal">;
10322+ defm LDFMAXNM : AtomicFPLoad<0b00, 0b110, "ldfmaxnm">;
10323+ defm LDFMAXNML : AtomicFPLoad<0b01, 0b110, "ldfmaxnml">;
10324+ defm LDFMINNMA : AtomicFPLoad<0b10, 0b111, "ldfminnma">;
10325+ defm LDFMINNMAL : AtomicFPLoad<0b11, 0b111, "ldfminnmal">;
10326+ defm LDFMINMN : AtomicFPLoad<0b00, 0b111, "ldfminnm">;
10327+ defm LDFMINNML : AtomicFPLoad<0b01, 0b111, "ldfminnml">;
10328+ // BFloat16
10329+ def LDBFADDA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b000, "ldbfadda">;
10330+ def LDBFADDAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b000, "ldbfaddal">;
10331+ def LDBFADD : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b000, "ldbfadd">;
10332+ def LDBFADDL : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b000, "ldbfaddl">;
10333+ def LDBFMAXA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b100, "ldbfmaxa">;
10334+ def LDBFMAXAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b100, "ldbfmaxal">;
10335+ def LDBFMAX : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b100, "ldbfmax">;
10336+ def LDBFMAXL : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b100, "ldbfmaxl">;
10337+ def LDBFMINA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b101, "ldbfmina">;
10338+ def LDBFMINAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b101, "ldbfminal">;
10339+ def LDBFMIN : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b101, "ldbfmin">;
10340+ def LDBFMINL : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b101, "ldbfminl">;
10341+ def LDBFMAXNMA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b110, "ldbfmaxnma">;
10342+ def LDBFMAXNMAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b110, "ldbfmaxnmal">;
10343+ def LDBFMAXNM : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b110, "ldbfmaxnm">;
10344+ def LDBFMAXNML : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b110, "ldbfmaxnml">;
10345+ def LDBFMINNMA : BaseAtomicFPLoad<FPR16, 0b00, 0b10, 0b111, "ldbfminnma">;
10346+ def LDBFMINNMAL : BaseAtomicFPLoad<FPR16, 0b00, 0b11, 0b111, "ldbfminnmal">;
10347+ def LDBFMINNM : BaseAtomicFPLoad<FPR16, 0b00, 0b00, 0b111, "ldbfminnm">;
10348+ def LDBFMINNML : BaseAtomicFPLoad<FPR16, 0b00, 0b01, 0b111, "ldbfminnml">;
10349+
10350+ // Floating-point Atomic Store
10351+ defm STFADD : AtomicFPStore<0b0, 0b000, "stfadd">;
10352+ defm STFADDL : AtomicFPStore<0b1, 0b000, "stfaddl">;
10353+ defm STFMAX : AtomicFPStore<0b0, 0b100, "stfmax">;
10354+ defm STFMAXL : AtomicFPStore<0b1, 0b100, "stfmaxl">;
10355+ defm STFMIN : AtomicFPStore<0b0, 0b101, "stfmin">;
10356+ defm STFMINL : AtomicFPStore<0b1, 0b101, "stfminl">;
10357+ defm STFMAXNM : AtomicFPStore<0b0, 0b110, "stfmaxnm">;
10358+ defm STFMAXNML : AtomicFPStore<0b1, 0b110, "stfmaxnml">;
10359+ defm STFMINNM : AtomicFPStore<0b0, 0b111, "stfminnm">;
10360+ defm STFMINNML : AtomicFPStore<0b1, 0b111, "stfminnml">;
10361+ // BFloat16
10362+ def STBFADD : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b000, "stbfadd">;
10363+ def STBFADDL : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b000, "stbfaddl">;
10364+ def STBFMAX : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b100, "stbfmax">;
10365+ def STBFMAXL : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b100, "stbfmaxl">;
10366+ def STBFMIN : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b101, "stbfmin">;
10367+ def STBFMINL : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b101, "stbfminl">;
10368+ def STBFMAXNM : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b110, "stbfmaxnm">;
10369+ def STBFMAXNML : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b110, "stbfmaxnml">;
10370+ def STBFMINNM : BaseAtomicFPStore<FPR16, 0b00, 0b0, 0b111, "stbfminnm">;
10371+ def STBFMINNML : BaseAtomicFPStore<FPR16, 0b00, 0b1, 0b111, "stbfminnml">;
10372+ }
10373+
1030210374include "AArch64InstrAtomics.td"
1030310375include "AArch64SVEInstrInfo.td"
1030410376include "AArch64SMEInstrInfo.td"
0 commit comments