diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 88e1407583a..36c4e2aa9ed 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -2629,6 +2629,11 @@ bool MipsAsmParser::parseDirectiveOption() { bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) { StringRef IDVal = DirectiveID.getString(); + if (IDVal == ".dword") { + parseDataDirective(8, DirectiveID.getLoc()); + return false; + } + if (IDVal == ".ent") { // Ignore this directive for now. Parser.Lex(); diff --git a/test/MC/Mips/mips-data-directives.s b/test/MC/Mips/mips-data-directives.s new file mode 100644 index 00000000000..630a807ca7b --- /dev/null +++ b/test/MC/Mips/mips-data-directives.s @@ -0,0 +1,36 @@ +# RUN: llvm-mc %s -arch=mips -mcpu=mips32r2 | \ +# RUN: FileCheck %s -check-prefix=CHECK-ASM +# +# RUN: llvm-mc %s -arch=mips -mcpu=mips32r2 -filetype=obj -o - | \ +# RUN: llvm-readobj -sections -section-data -section-relocations - | \ +# RUN: FileCheck %s -check-prefix=CHECK-OBJ + +# CHECK-ASM: .4byte 3735929054 +# CHECK-ASM: .8byte -2401050962867405073 +# CHECK-ASM: .4byte label +# CHECK-ASM: .8byte label + +# Checking if the data and reloations were correctly emitted +# CHECK-OBJ: Section { +# CHECK-OBJ: Name: .data (51) +# CHECK-OBJ: SectionData ( +# CHECK-OBJ: 0000: DEADC0DE DEADC0DE DEADBEEF 00000000 +# CHECK-OBJ: 0010: 00000000 00000000 +# CHECK-OBJ: ) +# CHECK-OBJ: } + +# CHECK-OBJ: Section { +# CHECK-OBJ: Name: .rel.data (47) +# CHECK-OBJ: Relocations [ +# CHECK-OBJ: 0xC R_MIPS_32 .data 0x0 +# CHECK-OBJ: 0x10 R_MIPS_64 .data 0x0 +# CHECK-OBJ: ] +# CHECK-OBJ: } + +.data +label: + .word 0xdeadc0de + .dword 0xdeadc0dedeadbeef + + .word label + .dword label