[llvm] [M68k] Add remaining addressing modes for Atomic operations (PR #115523)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 17 11:07:07 PST 2024
================
@@ -36,17 +57,128 @@ class MxCASOp<bits<2> size_encoding, MxType type>
let mayStore = 1;
}
-def CAS8 : MxCASOp<0x1, MxType8d>;
-def CAS16 : MxCASOp<0x2, MxType16d>;
-def CAS32 : MxCASOp<0x3, MxType32d>;
+def CASARI8 : MxCASARIOp<0x1, MxType8d>;
+def CASARI16 : MxCASARIOp<0x2, MxType16d>;
+def CASARI32 : MxCASARIOp<0x3, MxType32d>;
+
+class MxCASARIDOp<bits<2> size_encoding, MxType type>
+ : MxInst<(outs type.ROp:$out),
+ (ins type.ROp:$dc, type.ROp:$du, !cast<MxMemOp>("MxARID"#type.Size):$mem),
+ "cas."#type.Prefix#" $dc, $du, $mem"> {
+ let Inst = (ascend
+ (descend 0b00001, size_encoding, 0b011, MxEncAddrMode_p<"mem">.EA),
+ (descend 0b0000000, (operand "$du", 3), 0b000, (operand "$dc", 3))
+ );
+ let Constraints = "$out = $dc";
+ let mayLoad = 1;
+ let mayStore = 1;
+}
+
+def CASARID8 : MxCASARIDOp<0x1, MxType8d>;
+def CASARID16 : MxCASARIDOp<0x2, MxType16d>;
+def CASARID32 : MxCASARIDOp<0x3, MxType32d>;
+
+class MxCASARIIOp<bits<2> size_encoding, MxType type>
----------------
knickish wrote:
On further investigation, looks like PC-relative and `ARD` addressing modes are not legal for `CAS`, will have to lower these to some different instruction sequences
https://github.com/llvm/llvm-project/pull/115523
More information about the llvm-commits
mailing list