[mips] [IAS] Implement the .asciiz directive.

Summary:
This directive is exactly the same as .asciz, except it's only used by MIPS.
It is used to store null terminated strings in object files.

Reviewers: rafael, dsanders, echristo

Reviewed By: dsanders, echristo

Subscribers: echristo, llvm-commits

Differential Revision: http://reviews.llvm.org/D7530

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235382 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Toma Tabacu
2015-04-21 11:50:52 +00:00
parent c589d1b3bc
commit 203a9224ff
5 changed files with 44 additions and 0 deletions

View File

@@ -84,6 +84,8 @@ public:
virtual void addDirectiveHandler(StringRef Directive,
ExtensionDirectiveHandler Handler) = 0;
virtual void addAliasForDirective(StringRef Directive, StringRef Alias) = 0;
virtual SourceMgr &getSourceManager() = 0;
virtual MCAsmLexer &getLexer() = 0;

View File

@@ -184,6 +184,10 @@ public:
ExtensionDirectiveMap[Directive] = Handler;
}
void addAliasForDirective(StringRef Directive, StringRef Alias) override {
DirectiveKindMap[Directive] = DirectiveKindMap[Alias];
}
public:
/// @name MCAsmParser Interface
/// {

View File

@@ -349,6 +349,8 @@ public:
sti.getCPU(), Options)) {
MCAsmParserExtension::Initialize(parser);
parser.addAliasForDirective(".asciiz", ".asciz");
// Initialize the set of available features.
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));

View File

@@ -0,0 +1,8 @@
# RUN: not llvm-mc -triple mips-unknown-linux %s 2>&1 | FileCheck %s
.asciiz 12
# CHECK: :[[@LINE-1]]:11: error: expected string in '.asciiz' directive
.asciiz "a"3
# CHECK: :[[@LINE-1]]:14: error: unexpected token in '.asciiz' directive
.asciiz "a",
# CHECK: :[[@LINE-1]]:15: error: expected string in '.asciiz' directive

View File

@@ -0,0 +1,28 @@
# RUN: llvm-mc -triple mips-unknown-linux %s | FileCheck %s
# .asciiz is exactly the same as .asciz, except it's MIPS-specific.
t1:
.asciiz
# CHECK-LABEL: t1
t2:
.asciiz "a"
# CHECK-LABEL: t2
# CHECK: .byte 97
# CHECK: .byte 0
t3:
.asciiz "a", "b", "c"
# CHECK-LABEL: t3
# CHECK: .byte 97
# CHECK: .byte 0
# CHECK: .byte 98
# CHECK: .byte 0
# CHECK: .byte 99
# CHECK: .byte 0
t4:
.asciiz "abcdefghijklmnop"
# CHECK-LABEL: t4
# CHECK: .ascii "abcdefghijklmnop"
# CHECK: .byte 0