[llvm] [M68k] Add Imm source for MOVE to CCR/SR (PR #207590)

via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 5 08:22:33 PDT 2026


https://github.com/knickish updated https://github.com/llvm/llvm-project/pull/207590

>From 6f65861cfa751cd328ec1660c20bbf47064572d7 Mon Sep 17 00:00:00 2001
From: kirk <knickish at gmail.com>
Date: Sun, 5 Jul 2026 15:09:38 +0000
Subject: [PATCH] [M68k] Add Imm source for MOVE to CCR/SR

---
 llvm/lib/Target/M68k/M68kInstrData.td      |  5 ++++-
 llvm/test/CodeGen/M68k/inline-asm.ll       | 16 ++++++++++++++++
 llvm/test/MC/M68k/Data/Classes/MxMoveCCR.s |  4 ++++
 llvm/test/MC/M68k/Data/Classes/MxMoveSR.s  |  4 ++++
 4 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/M68k/M68kInstrData.td b/llvm/lib/Target/M68k/M68kInstrData.td
index fd654be09dc97..95d5600ec9d1f 100644
--- a/llvm/lib/Target/M68k/M68kInstrData.td
+++ b/llvm/lib/Target/M68k/M68kInstrData.td
@@ -415,8 +415,9 @@ foreach AM = MxMoveSrcAMs in {
   def MOV8c # AM  : MxMoveToCCRPseudo<!cast<MxOpBundle>("MxOp8AddrMode_"#AM).Op>;
 } // foreach AM
 
-// Only data register is allowed.
+// Only data register or immediate is allowed.
 def MOV16cd : MxMoveToCCR<MxOp16AddrMode_d.Op, MxMoveSrcOpEnc_d>;
+def MOV16ci : MxMoveToCCR<MxOp16AddrMode_i.Op, MxEncAddrMode_i<"src", 16>>;
 
 /// Move from CCR
 /// --------------------------------------------------
@@ -482,7 +483,9 @@ foreach AM = MxMoveSrcAMs in {
                                 !cast<MxEncMemOp>("MxMoveSrcOpEnc_"#AM)>;
 } // foreach AM
 
+// Only data register or immediate is allowed.
 def MOV16sd : MxMoveToSR<MxOp16AddrMode_d.Op, MxMoveSrcOpEnc_d>;
+def MOV16si : MxMoveToSR<MxOp16AddrMode_i.Op, MxEncAddrMode_i<"src", 16>>;
 
 /// Move from SR
 /// --------------------------------------------------
diff --git a/llvm/test/CodeGen/M68k/inline-asm.ll b/llvm/test/CodeGen/M68k/inline-asm.ll
index dda943920788d..dc57d1428508b 100644
--- a/llvm/test/CodeGen/M68k/inline-asm.ll
+++ b/llvm/test/CodeGen/M68k/inline-asm.ll
@@ -152,3 +152,19 @@ entry:
   ret void
 }
 
+define void @move_immediate_to_status_registers() {
+; CHECK-LABEL: move_immediate_to_status_registers:
+; CHECK:         .cfi_startproc
+; CHECK-NEXT:  ; %bb.0: ; %entry
+; CHECK-NEXT:    ;APP
+; CHECK-NEXT:    move.w #9984, %sr
+; CHECK-NEXT:    ;NO_APP
+; CHECK-NEXT:    ;APP
+; CHECK-NEXT:    move.w #1235, %ccr
+; CHECK-NEXT:    ;NO_APP
+; CHECK-NEXT:    rts
+entry:
+  call void asm sideeffect "move.w #0x2700,%sr", ""()
+  call void asm sideeffect "move.w #1235,%ccr", ""()
+  ret void
+}
diff --git a/llvm/test/MC/M68k/Data/Classes/MxMoveCCR.s b/llvm/test/MC/M68k/Data/Classes/MxMoveCCR.s
index ffb602d401840..595027deed8de 100644
--- a/llvm/test/MC/M68k/Data/Classes/MxMoveCCR.s
+++ b/llvm/test/MC/M68k/Data/Classes/MxMoveCCR.s
@@ -4,6 +4,10 @@
 ; CHECK-SAME: encoding: [0x44,0xc1]
 move.w	%d1, %ccr
 
+; CHECK:      move.w  #1235, %ccr
+; CHECK-SAME: encoding: [0x44,0xfc,0x04,0xd3]
+move.w	#1235, %ccr
+
 ; CHECK:      move.w  %ccr, %d1
 ; CHECK-SAME: encoding: [0x42,0xc1]
 move.w	%ccr, %d1
diff --git a/llvm/test/MC/M68k/Data/Classes/MxMoveSR.s b/llvm/test/MC/M68k/Data/Classes/MxMoveSR.s
index e999345f43fc3..3ca3599d776d4 100644
--- a/llvm/test/MC/M68k/Data/Classes/MxMoveSR.s
+++ b/llvm/test/MC/M68k/Data/Classes/MxMoveSR.s
@@ -4,6 +4,10 @@
 ; CHECK-SAME: encoding: [0x46,0xc1]
 move.w	%d1, %sr
 
+; CHECK:      move.w  #9984, %sr
+; CHECK-SAME: encoding: [0x46,0xfc,0x27,0x00]
+move.w	#0x2700, %sr
+
 ; CHECK:      move.w  %sr, %d1
 ; CHECK-SAME: encoding: [0x40,0xc1]
 move.w	%sr, %d1



More information about the llvm-commits mailing list