From 7ff05025b01e33d58cecd376d4fc9a73afe9d2a6 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 10 Jan 2014 04:38:40 +0000 Subject: [PATCH] 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 --- lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 4 +++ test/MC/ARM/target-expressions.s | 44 +++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 test/MC/ARM/target-expressions.s diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index bebbab5327b..77cdb756330 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -4813,6 +4813,10 @@ bool ARMAsmParser::parseOperand(SmallVectorImpl &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 ':' diff --git a/test/MC/ARM/target-expressions.s b/test/MC/ARM/target-expressions.s new file mode 100644 index 00000000000..350408c0793 --- /dev/null +++ b/test/MC/ARM/target-expressions.s @@ -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) + -- 2.34.1