mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-28 07:17:32 +00:00
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:
@@ -4813,6 +4813,10 @@ bool ARMAsmParser::parseOperand(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
|
|||||||
bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) {
|
bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) {
|
||||||
RefKind = ARMMCExpr::VK_ARM_None;
|
RefKind = ARMMCExpr::VK_ARM_None;
|
||||||
|
|
||||||
|
// consume an optional '#' (GNU compatibility)
|
||||||
|
if (getLexer().is(AsmToken::Hash))
|
||||||
|
Parser.Lex();
|
||||||
|
|
||||||
// :lower16: and :upper16: modifiers
|
// :lower16: and :upper16: modifiers
|
||||||
assert(getLexer().is(AsmToken::Colon) && "expected a :");
|
assert(getLexer().is(AsmToken::Colon) && "expected a :");
|
||||||
Parser.Lex(); // Eat ':'
|
Parser.Lex(); // Eat ':'
|
||||||
|
44
test/MC/ARM/target-expressions.s
Normal file
44
test/MC/ARM/target-expressions.s
Normal 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)
|
||||||
|
|
Reference in New Issue
Block a user