Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -6216,6 +6216,11 @@ return false; } + if (IDVal == ".hword") { + parseDataDirective(2, DirectiveID.getLoc()); + return false; + } + if (IDVal == ".option") return parseDirectiveOption(); Index: lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp =================================================================== --- lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp +++ lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp @@ -412,6 +412,7 @@ case ELF::R_MICROMIPS_LO16: return true; + case ELF::R_MIPS_16: case ELF::R_MIPS_32: if (cast(Sym).getOther() & ELF::STO_MIPS_MICROMIPS) return true; Index: test/MC/Mips/mips-data-directives.s =================================================================== --- test/MC/Mips/mips-data-directives.s +++ test/MC/Mips/mips-data-directives.s @@ -7,14 +7,16 @@ # CHECK-ASM: .4byte 3735929054 # CHECK-ASM: .8byte -2401050962867405073 +# CHECK-ASM: .2byte 49374 # CHECK-ASM: .4byte label # CHECK-ASM: .8byte label +# CHECK-ASM: .2byte label # Checking if the data and reloations were correctly emitted # CHECK-OBJ: Section { # CHECK-OBJ: Name: .data # CHECK-OBJ: SectionData ( -# CHECK-OBJ: 0000: DEADC0DE DEADC0DE DEADBEEF 00000000 +# CHECK-OBJ: 0000: DEADC0DE DEADC0DE DEADBEEF C0DE0000 # CHECK-OBJ: 0010: 00000000 00000000 # CHECK-OBJ: ) # CHECK-OBJ: } @@ -22,8 +24,9 @@ # CHECK-OBJ: Section { # CHECK-OBJ: Name: .rel.data # CHECK-OBJ: Relocations [ -# CHECK-OBJ: 0xC R_MIPS_32 .data 0x0 -# CHECK-OBJ: 0x10 R_MIPS_64 .data 0x0 +# CHECK-OBJ: 0xE R_MIPS_32 .data 0x0 +# CHECK-OBJ: 0x12 R_MIPS_64 .data 0x0 +# CHECK-OBJ: 0x1A R_MIPS_16 .data 0x0 # CHECK-OBJ: ] # CHECK-OBJ: } @@ -31,6 +34,8 @@ label: .word 0xdeadc0de .dword 0xdeadc0dedeadbeef + .hword 0xc0de .word label .dword label + .hword label