ARM IAS: support #:{lower,upper}16: for GNU compatibility

The GNU assembler supports prefixing the expression with a '#' to indiciate that
the value that is being moved is infact a constant.  This improves the
compatibility of the integrated assembler's parser for this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198916 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Saleem Abdulrasool 2014-01-10 04:38:40 +00:00
parent 003132d48c
commit 7ff05025b0
2 changed files with 48 additions and 0 deletions

View File

@ -4813,6 +4813,10 @@ bool ARMAsmParser::parseOperand(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) {
RefKind = ARMMCExpr::VK_ARM_None;
// consume an optional '#' (GNU compatibility)
if (getLexer().is(AsmToken::Hash))
Parser.Lex();
// :lower16: and :upper16: modifiers
assert(getLexer().is(AsmToken::Colon) && "expected a :");
Parser.Lex(); // Eat ':'

View File

@ -0,0 +1,44 @@
@ RUN: llvm-mc -triple armv7-eabi -filetype asm -o - %s | FileCheck %s
.syntax unified
.type function,%function
function:
bx lr
.set deadbeat, 0xdeadbea7
.type test,%function
test:
movw r0, :lower16:function
movt r0, :upper16:function
movw r1, #:lower16:function
movt r1, #:upper16:function
movw r2, :lower16:deadbeat
movt r2, :upper16:deadbeat
movw r3, #:lower16:deadbeat
movt r3, #:upper16:deadbeat
movw r4, :lower16:0xD1510D6E
movt r4, :upper16:0xD1510D6E
movw r5, #:lower16:0xD1510D6E
movt r5, #:upper16:0xD1510D6E
@ CHECK-LABEL: test:
@ CHECK: movw r0, :lower16:function
@ CHECK: movt r0, :upper16:function
@ CHECK: movw r1, :lower16:function
@ CHECK: movt r1, :upper16:function
@ CHECK: movw r2, :lower16:(3735928487)
@ CHECK: movt r2, :upper16:(3735928487)
@ CHECK: movw r3, :lower16:(3735928487)
@ CHECK: movt r3, :upper16:(3735928487)
@ CHECK: movw r4, :lower16:(3511749998)
@ CHECK: movt r4, :upper16:(3511749998)
@ CHECK: movw r5, :lower16:(3511749998)
@ CHECK: movt r5, :upper16:(3511749998)