From 9c1887bef4af1924b0ae049c973867dcc1300b01 Mon Sep 17 00:00:00 2001 From: Zoran Jovanovic Date: Fri, 28 Feb 2014 18:22:56 +0000 Subject: [PATCH] Fixed operand of SC microMIPS instruction. llvm-svn: 202526 --- .../Mips/Disassembler/MipsDisassembler.cpp | 3 +++ lib/Target/Mips/MicroMipsInstrInfo.td | 3 ++- test/CodeGen/Mips/micromips-atomic.ll | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/Mips/micromips-atomic.ll diff --git a/lib/Target/Mips/Disassembler/MipsDisassembler.cpp b/lib/Target/Mips/Disassembler/MipsDisassembler.cpp index c574f549a18..a5438401323 100644 --- a/lib/Target/Mips/Disassembler/MipsDisassembler.cpp +++ b/lib/Target/Mips/Disassembler/MipsDisassembler.cpp @@ -611,6 +611,9 @@ static DecodeStatus DecodeMemMMImm12(MCInst &Inst, Reg = getReg(Decoder, Mips::GPR32RegClassID, Reg); Base = getReg(Decoder, Mips::GPR32RegClassID, Base); + if (Inst.getOpcode() == Mips::SC_MM) + Inst.addOperand(MCOperand::CreateReg(Reg)); + Inst.addOperand(MCOperand::CreateReg(Reg)); Inst.addOperand(MCOperand::CreateReg(Base)); Inst.addOperand(MCOperand::CreateImm(Offset)); diff --git a/lib/Target/Mips/MicroMipsInstrInfo.td b/lib/Target/Mips/MicroMipsInstrInfo.td index 639e3deb757..41474055711 100644 --- a/lib/Target/Mips/MicroMipsInstrInfo.td +++ b/lib/Target/Mips/MicroMipsInstrInfo.td @@ -53,10 +53,11 @@ class LLBaseMM : } class SCBaseMM : - InstSE<(outs), (ins RO:$rt, mem_mm_12:$addr), + InstSE<(outs RO:$dst), (ins RO:$rt, mem_mm_12:$addr), !strconcat(opstr, "\t$rt, $addr"), [], NoItinerary, FrmI> { let DecoderMethod = "DecodeMemMMImm12"; let mayStore = 1; + let Constraints = "$rt = $dst"; } class LoadMM