@@ -467,22 +467,6 @@ multiclass LoadA<string OpcStr, bits<6> Op3Val, bits<6> LoadAOp3Val,
467
467
defm A : LoadASI<OpcStr, LoadAOp3Val, RC>;
468
468
}
469
469
470
-
471
- // The LDSTUB instruction is supported for asm only.
472
- // It is unlikely that general-purpose code could make use of it.
473
- // CAS is preferred for sparc v9.
474
- def LDSTUBrr : F3_1<3, 0b001101, (outs IntRegs:$rd), (ins (MEMrr $rs1, $rs2):$addr),
475
- "ldstub [$addr], $rd", []>;
476
- def LDSTUBri : F3_2<3, 0b001101, (outs IntRegs:$rd), (ins (MEMri $rs1, $simm13):$addr),
477
- "ldstub [$addr], $rd", []>;
478
- def LDSTUBArr : F3_1_asi<3, 0b011101, (outs IntRegs:$rd),
479
- (ins (MEMrr $rs1, $rs2):$addr, ASITag:$asi),
480
- "ldstuba [$addr] $asi, $rd", []>;
481
- let Predicates = [HasV9], Uses = [ASR3] in
482
- def LDSTUBAri : F3_2<3, 0b011101, (outs IntRegs:$rd),
483
- (ins (MEMri $rs1, $simm13):$addr),
484
- "ldstuba [$addr] %asi, $rd", []>;
485
-
486
470
// Store multiclass - Define both Reg+Reg/Reg+Imm patterns in one shot.
487
471
multiclass Store<string OpcStr, bits<6> Op3Val, SDPatternOperator OpNode,
488
472
RegisterClass RC, ValueType Ty, InstrItinClass itin = IIC_st> {
@@ -740,6 +724,22 @@ let rd = 1, mayStore = 1, Uses = [FSR] in {
740
724
"stx %fsr, [$addr]", []>, Requires<[HasV9]>;
741
725
}
742
726
727
+ // B.7. Atomic Load-Store Unsigned Byte Instructions
728
+ // (Atomic test-and-set)
729
+ // TODO look into the possibility to use this to implment `atomic_flag`.
730
+ // If it's possible, then LDSTUB is the preferred way to do it.
731
+ def LDSTUBrr : F3_1<3, 0b001101, (outs IntRegs:$rd), (ins (MEMrr $rs1, $rs2):$addr),
732
+ "ldstub [$addr], $rd", []>;
733
+ def LDSTUBri : F3_2<3, 0b001101, (outs IntRegs:$rd), (ins (MEMri $rs1, $simm13):$addr),
734
+ "ldstub [$addr], $rd", []>;
735
+ def LDSTUBArr : F3_1_asi<3, 0b011101, (outs IntRegs:$rd),
736
+ (ins (MEMrr $rs1, $rs2):$addr, ASITag:$asi),
737
+ "ldstuba [$addr] $asi, $rd", []>;
738
+ let Predicates = [HasV9], Uses = [ASR3] in
739
+ def LDSTUBAri : F3_2<3, 0b011101, (outs IntRegs:$rd),
740
+ (ins (MEMri $rs1, $simm13):$addr),
741
+ "ldstuba [$addr] %asi, $rd", []>;
742
+
743
743
// Section B.8 - SWAP Register with Memory Instruction
744
744
// (Atomic swap)
745
745
let Constraints = "$val = $rd" in {
0 commit comments