Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -521,6 +521,9 @@ if (getSTI().getCPU() == "mips64r6" && inMicroMipsMode()) report_fatal_error("microMIPS64R6 is not supported", false); + + if (!isABI_O32() && inMicroMipsMode()) + report_fatal_error("microMIPS64 is not supported", false); } /// True if all of $fcc0 - $fcc7 exist for the current ISA. Index: lib/Target/Mips/MipsSubtarget.cpp =================================================================== --- lib/Target/Mips/MipsSubtarget.cpp +++ lib/Target/Mips/MipsSubtarget.cpp @@ -116,6 +116,8 @@ if (hasMips64r6() && InMicroMipsMode) report_fatal_error("microMIPS64R6 is not supported", false); + if (InMicroMipsMode && (isABI_N32() || isABI_N64())) + report_fatal_error("microMIPS64 is not supported.", false); if (UseIndirectJumpsHazard) { if (InMicroMipsMode) Index: test/CodeGen/Mips/micromips64-unsupported.ll =================================================================== --- /dev/null +++ test/CodeGen/Mips/micromips64-unsupported.ll @@ -0,0 +1,7 @@ +; RUN: not llc -mtriple=mips64-unknown-linux -mcpu=mips64r6 -mattr=+micromips %s 2>&1 | FileCheck %s --check-prefix=MICROMIPS64R6 +; RUN: not llc -mtriple=mips64-unknown-linux -mcpu=mips64r6 -mattr=+micromips %s 2>&1 | FileCheck %s --check-prefix=MICROMIPS64 + +; Test that microMIPS64(R6) is not supported. + +; MICROMIPS64R6: LLVM ERROR: microMIPS64R6 is not supported +; MICROMIPS64: LLVM ERROR: microMIPS64 is not supported Index: test/CodeGen/Mips/micromips64r6-unsupported.ll =================================================================== --- test/CodeGen/Mips/micromips64r6-unsupported.ll +++ /dev/null @@ -1,5 +0,0 @@ -; RUN: not llc -mtriple=mips64-unknown-linux -mcpu=mips64r6 -mattr=+micromips %s 2>&1 | FileCheck %s - -; Test that microMIPS64R6 is not supported. - -; CHECK: LLVM ERROR: microMIPS64R6 is not supported Index: test/MC/Mips/expansion-j-sym-pic.s =================================================================== --- test/MC/Mips/expansion-j-sym-pic.s +++ test/MC/Mips/expansion-j-sym-pic.s @@ -10,12 +10,6 @@ # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\ # RUN: FileCheck %s -check-prefix=MICRO -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefix=MICRO - -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefix=MICRO - # Repeat the tests using ELF output. # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -filetype=obj | \ Index: test/MC/Mips/expansion-jal-sym-pic.s =================================================================== --- test/MC/Mips/expansion-jal-sym-pic.s +++ test/MC/Mips/expansion-jal-sym-pic.s @@ -10,12 +10,6 @@ # RUN: llvm-mc %s -arch=mips -mcpu=mips32 -mattr=micromips -show-encoding |\ # RUN: FileCheck %s -check-prefixes=ALL,MM,O32-MM -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefixes=ALL,MM,N32-MM - -# RUN: llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 -mattr=micromips -show-encoding |\ -# RUN: FileCheck %s -check-prefixes=ALL,MM,N64-MM - # Repeat the tests but using ELF output. An initial version of this patch did # this as the output different depending on whether it went through # MCAsmStreamer or MCELFStreamer. This ensures that the assembly expansion and @@ -68,12 +62,6 @@ # O32-MM: addiu $25, $25, %lo(local_label) # encoding: [0x33,0x39,A,A] # O32-MM: # fixup A - offset: 0, value: %lo(local_label), kind: fixup_MICROMIPS_LO16 -# N32-MM: lw $25, %got_disp(local_label)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM: ld $25, %got_disp(local_label)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %got_disp(local_label), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -103,12 +91,6 @@ # O32-MM: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A] # O32-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 -# N32-MM: lw $25, %call16(weak_label)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 - -# N64-MM: ld $25, %call16(weak_label)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %call16(weak_label), kind: fixup_MICROMIPS_CALL16 - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -138,12 +120,6 @@ # O32-MM: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A] # O32-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 -# N32-MM: lw $25, %call16(global_label)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 - -# N64-MM: ld $25, %call16(global_label)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %call16(global_label), kind: fixup_MICROMIPS_CALL16 - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -175,12 +151,6 @@ # O32-MM-NEXT: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A] # O32-MM-NEXT: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16 -# N32-MM: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -217,12 +187,6 @@ # O32-MM: addiu $25, $25, %lo($tmp0) # encoding: [0x33,0x39,A,A] # O32-MM: # fixup A - offset: 0, value: %lo($tmp0), kind: fixup_MICROMIPS_LO16 -# N32-MM: lw $25, %got_disp(.Ltmp0)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM: ld $25, %got_disp(.Ltmp0)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM: # fixup A - offset: 0, value: %got_disp(.Ltmp0), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] @@ -259,12 +223,6 @@ # O32-MM-FIXME: addiu $25, $25, %lo(forward_local) # encoding: [0x33,0x39,A,A] # O32-MM-FIXME: # fixup A - offset: 0, value: %lo(forward_local), kind: fixup_MICROMIPS_LO16 -# N32-MM-FIXME: lw $25, %got_disp(forward_local)($gp) # encoding: [0xff,0x3c,A,A] -# N32-MM-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP - -# N64-MM-FIXME: ld $25, %got_disp(forward_local)($gp) # encoding: [0xdf,0x99,A,A] -# N64-MM-FIXME: # fixup A - offset: 0, value: %got_disp(forward_local), kind: fixup_MICROMIPS_GOT_DISP - # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09] # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c] # ALL: nop # encoding: [0x00,0x00,0x00,0x00] Index: test/MC/Mips/micromips64-unsupported.s =================================================================== --- /dev/null +++ test/MC/Mips/micromips64-unsupported.s @@ -0,0 +1,8 @@ +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64r6 -target-abi n64 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64R6 +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64r6 -target-abi n32 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64R6 + +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n64 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64 +# RUN: not llvm-mc %s -arch=mips64 -mcpu=mips64 -target-abi n32 2>&1 -mattr=+micromips | FileCheck %s --check-prefix=64 + +# 64R6: microMIPS64R6 is not supported +# 64: microMIPS64 is not supported