@@ -10299,6 +10299,78 @@ defm : PromoteBinaryv8f16Tov4f32<any_fdiv, FDIVv4f32>;
10299
10299
defm : PromoteBinaryv8f16Tov4f32<any_fmul, FMULv4f32>;
10300
10300
defm : PromoteBinaryv8f16Tov4f32<any_fsub, FSUBv4f32>;
10301
10301
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
+
10302
10374
include "AArch64InstrAtomics.td"
10303
10375
include "AArch64SVEInstrInfo.td"
10304
10376
include "AArch64SMEInstrInfo.td"
0 commit comments