summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2012-09-25 00:08:13 +0000
committerJim Grosbach <grosbach@apple.com>2012-09-25 00:08:13 +0000
commite974a6afaffba87e4ca086a9e6cbb4c54209b814 (patch)
tree3091b5099c08bd6152c7eefc4142a3c61581b289 /llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
parent627d21772708a26ec5412e7a2fa362949816bc76 (diff)
downloadbcm5719-llvm-e974a6afaffba87e4ca086a9e6cbb4c54209b814.tar.gz
bcm5719-llvm-e974a6afaffba87e4ca086a9e6cbb4c54209b814.zip
ARM: 'add Rd, pc, #imm' is an alias for 'adr Rd, #imm'.
rdar://9795790 llvm-svn: 164577
Diffstat (limited to 'llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp')
-rw-r--r--llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index a7997d5e276..aa5ba46ab21 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -5666,6 +5666,20 @@ bool ARMAsmParser::
processInstruction(MCInst &Inst,
const SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
switch (Inst.getOpcode()) {
+ // Alias for alternate form of 'ADR Rd, #imm' instruction.
+ case ARM::ADDri: {
+ if (Inst.getOperand(1).getReg() != ARM::PC ||
+ Inst.getOperand(5).getReg() != 0)
+ return false;
+ MCInst TmpInst;
+ TmpInst.setOpcode(ARM::ADR);
+ TmpInst.addOperand(Inst.getOperand(0));
+ TmpInst.addOperand(Inst.getOperand(2));
+ TmpInst.addOperand(Inst.getOperand(3));
+ TmpInst.addOperand(Inst.getOperand(4));
+ Inst = TmpInst;
+ return true;
+ }
// Aliases for alternate PC+imm syntax of LDR instructions.
case ARM::t2LDRpcrel:
Inst.setOpcode(ARM::t2LDRpci);
OpenPOWER on IntegriCloud