Skip to content

Commit

Permalink
[M68k] allow 16-bit registers for MOVE to/from CCR
Browse files Browse the repository at this point in the history
  • Loading branch information
TechnoElf authored and knickish committed Nov 3, 2024
1 parent eeb987f commit 0f92de6
Showing 1 changed file with 20 additions and 6 deletions.
26 changes: 20 additions & 6 deletions llvm/lib/Target/M68k/M68kInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -757,13 +757,27 @@ void M68kInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
bool ToSR = DstReg == M68k::SR;

if (FromCCR) {
assert(M68k::DR8RegClass.contains(DstReg) &&
"Need DR8 register to copy CCR");
Opc = M68k::MOV8dc;
if (M68k::DR8RegClass.contains(DstReg))
Opc = M68k::MOV8dc;
else if (M68k::DR16RegClass.contains(DstReg))
Opc = M68k::MOV16dc;
else if (M68k::DR32RegClass.contains(DstReg))
Opc = M68k::MOV16dc;
else {
LLVM_DEBUG(dbgs() << "Cannot copy CCR to " << RI.getName(DstReg) << '\n');
llvm_unreachable("Invalid register for MOVE from CCR");
}
} else if (ToCCR) {
assert(M68k::DR8RegClass.contains(SrcReg) &&
"Need DR8 register to copy CCR");
Opc = M68k::MOV8cd;
if (M68k::DR8RegClass.contains(SrcReg))
Opc = M68k::MOV8cd;
else if (M68k::DR16RegClass.contains(SrcReg))
Opc = M68k::MOV16cd;
else if (M68k::DR32RegClass.contains(SrcReg))
Opc = M68k::MOV16cd;
else {
LLVM_DEBUG(dbgs() << "Cannot copy " << RI.getName(SrcReg) << " to CCR\n");
llvm_unreachable("Invalid register for MOVE to CCR");
}
} else if (FromSR || ToSR)
llvm_unreachable("Cannot emit SR copy instruction");

Expand Down

0 comments on commit 0f92de6

Please sign in to comment.