diff options
author | Anton Korobeynikov <anton@korobeynikov.info> | 2019-01-10 22:59:50 +0000 |
---|---|---|
committer | Anton Korobeynikov <anton@korobeynikov.info> | 2019-01-10 22:59:50 +0000 |
commit | 0681d6bc90fe80a1c7534d5f4da96820b5da2037 (patch) | |
tree | cd768395b0460381275d08d52e4f531a81e01389 /llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp | |
parent | 29ffb6d5580356dc4a7fa6201c051d2ec760193c (diff) | |
download | bcm5719-llvm-0681d6bc90fe80a1c7534d5f4da96820b5da2037.tar.gz bcm5719-llvm-0681d6bc90fe80a1c7534d5f4da96820b5da2037.zip |
[MSP430] Minor fixes/improvements for assembler/disassembler
* Teach AsmParser to recognize @rn in distination operand as 0(rn).
* Do not allow Disassembler decoding instructions that have size more
than a number of input bytes.
* Fix UB in MSP430MCCodeEmitter.
Patch by Kristina Bessonova!
Differential Revision: https://reviews.llvm.org/D56547
llvm-svn: 350903
Diffstat (limited to 'llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp index 3cc6da2c21a..1ad70ac72c7 100644 --- a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp +++ b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp @@ -497,7 +497,11 @@ bool MSP430AsmParser::ParseOperand(OperandVector &Operands) { getLexer().Lex(); // Eat '+' return false; } - Operands.push_back(MSP430Operand::CreateIndReg(RegNo, StartLoc, EndLoc)); + if (Operands.size() > 1) // Emulate @rd in destination position as 0(rd) + Operands.push_back(MSP430Operand::CreateMem(RegNo, + MCConstantExpr::create(0, getContext()), StartLoc, EndLoc)); + else + Operands.push_back(MSP430Operand::CreateIndReg(RegNo, StartLoc, EndLoc)); return false; } case AsmToken::Hash: |