Add ".dword" directive
authorBill Wendling <isanbard@gmail.com>
Thu, 9 May 2019 21:57:44 +0000 (21:57 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 9 May 2019 21:57:44 +0000 (21:57 +0000)
Summary:
The ".dword" directive is a synonym for ".xword" and is used used
by klibc, a minimalistic libc subset for initramfs.

Reviewers: t.p.northover, nickdesaulniers

Reviewed By: nickdesaulniers

Subscribers: nickdesaulniers, javed.absar, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D61719

llvm-svn: 360381

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
llvm/test/MC/AArch64/size-directive.s [new file with mode: 0644]

index 0a1e925..a6cf9f0 100644 (file)
@@ -241,11 +241,13 @@ public:
     if (S.getTargetStreamer() == nullptr)
       new AArch64TargetStreamer(S);
 
-    // Alias .hword/.word/xword to the target-independent .2byte/.4byte/.8byte
-    // directives as they have the same form and semantics:
-    ///  ::= (.hword | .word | .xword ) [ expression (, expression)* ]
+    // Alias .hword/.word/.[dx]word to the target-independent
+    // .2byte/.4byte/.8byte directives as they have the same form and
+    // semantics:
+    ///  ::= (.hword | .word | .dword | .xword ) [ expression (, expression)* ]
     Parser.addAliasForDirective(".hword", ".2byte");
     Parser.addAliasForDirective(".word", ".4byte");
+    Parser.addAliasForDirective(".dword", ".8byte");
     Parser.addAliasForDirective(".xword", ".8byte");
 
     // Initialize the set of available features.
diff --git a/llvm/test/MC/AArch64/size-directive.s b/llvm/test/MC/AArch64/size-directive.s
new file mode 100644 (file)
index 0000000..5c9ac26
--- /dev/null
@@ -0,0 +1,39 @@
+// RUN: llvm-mc %s -triple=aarch64-none-linux-gnu -filetype=asm -o - \
+// RUN:   | FileCheck %s --check-prefix=CHECK-ASM
+// RUN: llvm-mc %s -triple=aarch64-none-linux-gnu -filetype=obj -o %t
+// RUN: llvm-readobj -S --sd %t | FileCheck %s  --check-prefix=CHECK-OBJ
+// RUN: llvm-objdump -t %t | FileCheck %s  --check-prefix=CHECK-SYMS
+
+    .section    .size.aarch64_size
+
+    .p2align  2
+    .global aarch64_size
+    .type   aarch64_size,%function
+aarch64_size:
+    .hword half_word
+    .word  full_word
+    .dword double_word
+    .xword also_double_word
+
+// CHECK-ASM:        .p2align  2
+// CHECK-ASM:        .globl  aarch64_size
+// CHECK-ASM:        .type   aarch64_size,@function
+// CHECK-ASM: aarch64_size:
+// CHECK-ASM:        .hword half_word
+// CHECK-ASM:        .word  full_word
+// CHECK-ASM:        .xword double_word
+// CHECK-ASM:       .xword also_double_word
+
+// CHECK-OBJ: Section {
+// CHECK-OBJ:   Name: .size.aarch64_size
+// CHECK-OBJ:   SectionData (
+// CHECK-OBJ-NEXT:   0000: 00000000 00000000 00000000 00000000  |................|
+// CHECK-OBJ-NEXT:   0010: 00000000 0000                        |......|
+// CHECK-OBJ-NEXT: )
+
+// CHECK-SYMS:     0000000000000000         .size.aarch64_size  00000000 $d.0
+// CHECK-SYMS:     0000000000000000 g     F .size.aarch64_size  00000000 aarch64_size
+// CHECK-SYMS:     0000000000000000         *UND*               00000000 also_double_word
+// CHECK-SYMS:     0000000000000000         *UND*               00000000 double_word
+// CHECK-SYMS:     0000000000000000         *UND*               00000000 full_word
+// CHECK-SYMS:     0000000000000000         *UND*               00000000 half_word