[PATCH] D49937: [ARM] Allow automatically deducing the thumb instruction size for .inst
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 31 02:27:50 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL338357: [ARM] Allow automatically deducing the thumb instruction size for .inst (authored by mstorsjo, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D49937?vs=157937&id=158192#toc
Repository:
rL LLVM
https://reviews.llvm.org/D49937
Files:
llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
llvm/trunk/test/MC/ARM/inst-thumb-suffixes-auto.s
llvm/trunk/test/MC/ARM/inst-thumb-suffixes.s
Index: llvm/trunk/test/MC/ARM/inst-thumb-suffixes-auto.s
===================================================================
--- llvm/trunk/test/MC/ARM/inst-thumb-suffixes-auto.s
+++ llvm/trunk/test/MC/ARM/inst-thumb-suffixes-auto.s
@@ -0,0 +1,16 @@
+@ RUN: llvm-mc %s -triple armv7-linux-gnueabi -filetype asm -o - \
+@ RUN: | FileCheck %s
+@ RUN: llvm-mc %s -triple armebv7-linux-gnueabi -filetype asm -o - \
+@ RUN: | FileCheck %s
+
+ .syntax unified
+ .thumb
+
+ .align 2
+ .global inst_n
+ .type inst_n,%function
+inst_n:
+ @ bx lr, mov.w r0, #42
+ .inst 0x4770, 0xf04f002a
+@ CHECK: .inst.n 0x4770
+@ CHECK: .inst.w 0xf04f002a
Index: llvm/trunk/test/MC/ARM/inst-thumb-suffixes.s
===================================================================
--- llvm/trunk/test/MC/ARM/inst-thumb-suffixes.s
+++ llvm/trunk/test/MC/ARM/inst-thumb-suffixes.s
@@ -8,6 +8,6 @@
.global suffixes_required_in_thumb
.type suffixes_required_in_thumb,%function
suffixes_required_in_thumb:
- .inst 0x0000
+ .inst 0xff00
@ CHECK-ERROR: cannot determine Thumb instruction size, use inst.n/inst.w instead
Index: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
===================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -10012,8 +10012,8 @@
case 'w':
break;
default:
- return Error(Loc, "cannot determine Thumb instruction size, "
- "use inst.n/inst.w instead");
+ Width = 0;
+ break;
}
} else {
if (Suffix)
@@ -10029,6 +10029,7 @@
return Error(Loc, "expected constant expression");
}
+ char CurSuffix = Suffix;
switch (Width) {
case 2:
if (Value->getValue() > 0xffff)
@@ -10039,11 +10040,21 @@
return Error(Loc, StringRef(Suffix ? "inst.w" : "inst") +
" operand is too big");
break;
+ case 0:
+ // Thumb mode, no width indicated. Guess from the opcode, if possible.
+ if (Value->getValue() < 0xe800)
+ CurSuffix = 'n';
+ else if (Value->getValue() >= 0xe8000000)
+ CurSuffix = 'w';
+ else
+ return Error(Loc, "cannot determine Thumb instruction size, "
+ "use inst.n/inst.w instead");
+ break;
default:
llvm_unreachable("only supported widths are 2 and 4");
}
- getTargetStreamer().emitInst(Value->getValue(), Suffix);
+ getTargetStreamer().emitInst(Value->getValue(), CurSuffix);
return false;
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49937.158192.patch
Type: text/x-patch
Size: 2579 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180731/1243584e/attachment.bin>
More information about the llvm-commits
mailing list