diff options
author | Simon Atanasyan <simon@atanasyan.com> | 2019-08-07 12:21:26 +0000 |
---|---|---|
committer | Simon Atanasyan <simon@atanasyan.com> | 2019-08-07 12:21:26 +0000 |
commit | 9f2e076f2730e9f855ef06bcdd47013ad70420b8 (patch) | |
tree | f480198d3c4256466f720edce058a5cd22260b3c /llvm/lib/Target/Mips/MipsTargetStreamer.h | |
parent | 8280730f96cf4869b6b3dfd2f5b27abf4f9a81a0 (diff) | |
download | bcm5719-llvm-9f2e076f2730e9f855ef06bcdd47013ad70420b8.tar.gz bcm5719-llvm-9f2e076f2730e9f855ef06bcdd47013ad70420b8.zip |
[Mips] Instruction `sc` now accepts symbol as an argument
Function MipsAsmParser::expandMemInst() did not properly handle
instruction `sc` with a symbol as an argument because first argument
would be counted twice. We add additional checks and handle this case
separately.
Patch by Mirko Brkusanin.
Differential Revision: https://reviews.llvm.org/D64252
llvm-svn: 368160
Diffstat (limited to 'llvm/lib/Target/Mips/MipsTargetStreamer.h')
-rw-r--r-- | llvm/lib/Target/Mips/MipsTargetStreamer.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsTargetStreamer.h b/llvm/lib/Target/Mips/MipsTargetStreamer.h index 1fa8ebadd64..91f26b2e4cd 100644 --- a/llvm/lib/Target/Mips/MipsTargetStreamer.h +++ b/llvm/lib/Target/Mips/MipsTargetStreamer.h @@ -130,6 +130,8 @@ public: SMLoc IDLoc, const MCSubtargetInfo *STI); void emitRRR(unsigned Opcode, unsigned Reg0, unsigned Reg1, unsigned Reg2, SMLoc IDLoc, const MCSubtargetInfo *STI); + void emitRRRX(unsigned Opcode, unsigned Reg0, unsigned Reg1, unsigned Reg2, + MCOperand Op3, SMLoc IDLoc, const MCSubtargetInfo *STI); void emitRRI(unsigned Opcode, unsigned Reg0, unsigned Reg1, int16_t Imm, SMLoc IDLoc, const MCSubtargetInfo *STI); void emitRRIII(unsigned Opcode, unsigned Reg0, unsigned Reg1, int16_t Imm0, @@ -158,6 +160,10 @@ public: unsigned BaseReg, MCOperand &HiOperand, MCOperand &LoOperand, unsigned ATReg, SMLoc IDLoc, const MCSubtargetInfo *STI); + void emitSCWithSymOffset(unsigned Opcode, unsigned SrcReg, unsigned BaseReg, + MCOperand &HiOperand, MCOperand &LoOperand, + unsigned ATReg, SMLoc IDLoc, + const MCSubtargetInfo *STI); void emitLoadWithImmOffset(unsigned Opcode, unsigned DstReg, unsigned BaseReg, int64_t Offset, unsigned TmpReg, SMLoc IDLoc, const MCSubtargetInfo *STI); @@ -185,6 +191,9 @@ public: return *ABI; } + bool isMipsR6(const MCSubtargetInfo *STI) const; + bool isMicroMips(const MCSubtargetInfo *STI) const; + protected: llvm::Optional<MipsABIInfo> ABI; MipsABIFlagsSection ABIFlagsSection; |