From: Daniel Sanders Date: Wed, 26 Mar 2014 11:39:07 +0000 (+0000) Subject: [mips] The register names depend on the ABI being N32/N64 rather than the arch being... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=968ea7b82c313c182dd5b4f40b7cef5365b70d81;p=oota-llvm.git [mips] The register names depend on the ABI being N32/N64 rather than the arch being mips64 Summary: Added test cases for O32 and N32 on MIPS64. Reviewers: matheusalmeida Reviewed By: matheusalmeida Differential Revision: http://llvm-reviews.chandlerc.com/D3175 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204796 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index ca11e35a440..d733caae500 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -222,6 +222,7 @@ class MipsAsmParser : public MCTargetAsmParser { return (STI.getFeatureBits() & Mips::FeatureFP64Bit) != 0; } + bool isN32() const { return STI.getFeatureBits() & Mips::FeatureN32; } bool isN64() const { return STI.getFeatureBits() & Mips::FeatureN64; } bool isMicroMips() const { @@ -1035,21 +1036,23 @@ int MipsAsmParser::matchCPURegisterName(StringRef Name) { .Case("t9", 25) .Default(-1); - // Although SGI documentation just cuts out t0-t3 for n32/n64, - // GNU pushes the values of t0-t3 to override the o32/o64 values for t4-t7 - // We are supporting both cases, so for t0-t3 we'll just push them to t4-t7. - if (isMips64() && 8 <= CC && CC <= 11) - CC += 4; - - if (CC == -1 && isMips64()) - CC = StringSwitch(Name) - .Case("a4", 8) - .Case("a5", 9) - .Case("a6", 10) - .Case("a7", 11) - .Case("kt0", 26) - .Case("kt1", 27) - .Default(-1); + if (isN32() || isN64()) { + // Although SGI documentation just cuts out t0-t3 for n32/n64, + // GNU pushes the values of t0-t3 to override the o32/o64 values for t4-t7 + // We are supporting both cases, so for t0-t3 we'll just push them to t4-t7. + if (8 <= CC && CC <= 11) + CC += 4; + + if (CC == -1) + CC = StringSwitch(Name) + .Case("a4", 8) + .Case("a5", 9) + .Case("a6", 10) + .Case("a7", 11) + .Case("kt0", 26) + .Case("kt1", 27) + .Default(-1); + } warnIfAssemblerTemporary(CC); diff --git a/test/MC/Mips/mips-register-names-o32.s b/test/MC/Mips/mips-register-names-o32.s new file mode 100644 index 00000000000..c1e30240389 --- /dev/null +++ b/test/MC/Mips/mips-register-names-o32.s @@ -0,0 +1,40 @@ +# RUN: llvm-mc %s -triple=mips-unknown-freebsd -show-encoding | FileCheck %s + +# Check that the register names are mapped to their correct numbers for o32 +# Second byte of addiu with $zero at rt contains the number of the source +# register. + +.set noat +addiu $zero, $zero, 0 # CHECK: encoding: [0x24,0x00,0x00,0x00] +addiu $at, $zero, 0 # CHECK: encoding: [0x24,0x01,0x00,0x00] +addiu $v0, $zero, 0 # CHECK: encoding: [0x24,0x02,0x00,0x00] +addiu $v1, $zero, 0 # CHECK: encoding: [0x24,0x03,0x00,0x00] +addiu $a0, $zero, 0 # CHECK: encoding: [0x24,0x04,0x00,0x00] +addiu $a1, $zero, 0 # CHECK: encoding: [0x24,0x05,0x00,0x00] +addiu $a2, $zero, 0 # CHECK: encoding: [0x24,0x06,0x00,0x00] +addiu $a3, $zero, 0 # CHECK: encoding: [0x24,0x07,0x00,0x00] +addiu $t0, $zero, 0 # CHECK: encoding: [0x24,0x08,0x00,0x00] +addiu $t1, $zero, 0 # CHECK: encoding: [0x24,0x09,0x00,0x00] +addiu $t2, $zero, 0 # CHECK: encoding: [0x24,0x0a,0x00,0x00] +addiu $t3, $zero, 0 # CHECK: encoding: [0x24,0x0b,0x00,0x00] +addiu $t4, $zero, 0 # CHECK: encoding: [0x24,0x0c,0x00,0x00] +addiu $t5, $zero, 0 # CHECK: encoding: [0x24,0x0d,0x00,0x00] +addiu $t6, $zero, 0 # CHECK: encoding: [0x24,0x0e,0x00,0x00] +addiu $t7, $zero, 0 # CHECK: encoding: [0x24,0x0f,0x00,0x00] +addiu $s0, $zero, 0 # CHECK: encoding: [0x24,0x10,0x00,0x00] +addiu $s1, $zero, 0 # CHECK: encoding: [0x24,0x11,0x00,0x00] +addiu $s2, $zero, 0 # CHECK: encoding: [0x24,0x12,0x00,0x00] +addiu $s3, $zero, 0 # CHECK: encoding: [0x24,0x13,0x00,0x00] +addiu $s4, $zero, 0 # CHECK: encoding: [0x24,0x14,0x00,0x00] +addiu $s5, $zero, 0 # CHECK: encoding: [0x24,0x15,0x00,0x00] +addiu $s6, $zero, 0 # CHECK: encoding: [0x24,0x16,0x00,0x00] +addiu $s7, $zero, 0 # CHECK: encoding: [0x24,0x17,0x00,0x00] +addiu $t8, $zero, 0 # CHECK: encoding: [0x24,0x18,0x00,0x00] +addiu $t9, $zero, 0 # CHECK: encoding: [0x24,0x19,0x00,0x00] +addiu $k0, $zero, 0 # CHECK: encoding: [0x24,0x1a,0x00,0x00] +addiu $k1, $zero, 0 # CHECK: encoding: [0x24,0x1b,0x00,0x00] +addiu $gp, $zero, 0 # CHECK: encoding: [0x24,0x1c,0x00,0x00] +addiu $sp, $zero, 0 # CHECK: encoding: [0x24,0x1d,0x00,0x00] +addiu $fp, $zero, 0 # CHECK: encoding: [0x24,0x1e,0x00,0x00] +addiu $s8, $zero, 0 # CHECK: encoding: [0x24,0x1e,0x00,0x00] +addiu $ra, $zero, 0 # CHECK: encoding: [0x24,0x1f,0x00,0x00] diff --git a/test/MC/Mips/mips-register-names.s b/test/MC/Mips/mips-register-names.s deleted file mode 100644 index f737faa2e6a..00000000000 --- a/test/MC/Mips/mips-register-names.s +++ /dev/null @@ -1,39 +0,0 @@ -# RUN: llvm-mc %s -triple=mips-unknown-freebsd -show-encoding | FileCheck %s - -# Check that the register names are mapped to their correct numbers for o32 -# Second byte of addiu with $zero at rt contains the number of the source -# register. - -addiu $zero, $zero, 0 # CHECK: encoding: [0x24,0x00,0x00,0x00] -addiu $at, $zero, 0 # CHECK: encoding: [0x24,0x01,0x00,0x00] -addiu $v0, $zero, 0 # CHECK: encoding: [0x24,0x02,0x00,0x00] -addiu $v1, $zero, 0 # CHECK: encoding: [0x24,0x03,0x00,0x00] -addiu $a0, $zero, 0 # CHECK: encoding: [0x24,0x04,0x00,0x00] -addiu $a1, $zero, 0 # CHECK: encoding: [0x24,0x05,0x00,0x00] -addiu $a2, $zero, 0 # CHECK: encoding: [0x24,0x06,0x00,0x00] -addiu $a3, $zero, 0 # CHECK: encoding: [0x24,0x07,0x00,0x00] -addiu $t0, $zero, 0 # CHECK: encoding: [0x24,0x08,0x00,0x00] -addiu $t1, $zero, 0 # CHECK: encoding: [0x24,0x09,0x00,0x00] -addiu $t2, $zero, 0 # CHECK: encoding: [0x24,0x0a,0x00,0x00] -addiu $t3, $zero, 0 # CHECK: encoding: [0x24,0x0b,0x00,0x00] -addiu $t4, $zero, 0 # CHECK: encoding: [0x24,0x0c,0x00,0x00] -addiu $t5, $zero, 0 # CHECK: encoding: [0x24,0x0d,0x00,0x00] -addiu $t6, $zero, 0 # CHECK: encoding: [0x24,0x0e,0x00,0x00] -addiu $t7, $zero, 0 # CHECK: encoding: [0x24,0x0f,0x00,0x00] -addiu $s0, $zero, 0 # CHECK: encoding: [0x24,0x10,0x00,0x00] -addiu $s1, $zero, 0 # CHECK: encoding: [0x24,0x11,0x00,0x00] -addiu $s2, $zero, 0 # CHECK: encoding: [0x24,0x12,0x00,0x00] -addiu $s3, $zero, 0 # CHECK: encoding: [0x24,0x13,0x00,0x00] -addiu $s4, $zero, 0 # CHECK: encoding: [0x24,0x14,0x00,0x00] -addiu $s5, $zero, 0 # CHECK: encoding: [0x24,0x15,0x00,0x00] -addiu $s6, $zero, 0 # CHECK: encoding: [0x24,0x16,0x00,0x00] -addiu $s7, $zero, 0 # CHECK: encoding: [0x24,0x17,0x00,0x00] -addiu $t8, $zero, 0 # CHECK: encoding: [0x24,0x18,0x00,0x00] -addiu $t9, $zero, 0 # CHECK: encoding: [0x24,0x19,0x00,0x00] -addiu $k0, $zero, 0 # CHECK: encoding: [0x24,0x1a,0x00,0x00] -addiu $k1, $zero, 0 # CHECK: encoding: [0x24,0x1b,0x00,0x00] -addiu $gp, $zero, 0 # CHECK: encoding: [0x24,0x1c,0x00,0x00] -addiu $sp, $zero, 0 # CHECK: encoding: [0x24,0x1d,0x00,0x00] -addiu $fp, $zero, 0 # CHECK: encoding: [0x24,0x1e,0x00,0x00] -addiu $s8, $zero, 0 # CHECK: encoding: [0x24,0x1e,0x00,0x00] -addiu $ra, $zero, 0 # CHECK: encoding: [0x24,0x1f,0x00,0x00] diff --git a/test/MC/Mips/mips64-register-names-n32-n64.s b/test/MC/Mips/mips64-register-names-n32-n64.s new file mode 100644 index 00000000000..4533b5ff4ab --- /dev/null +++ b/test/MC/Mips/mips64-register-names-n32-n64.s @@ -0,0 +1,42 @@ +# RUN: llvm-mc %s -triple=mips64-unknown-freebsd -show-encoding | FileCheck %s +# RUN: llvm-mc %s -triple=mips64-unknown-freebsd -show-encoding \ +# RUN: -mattr=-n64,+n32 | FileCheck %s + +# Check that the register names are mapped to their correct numbers for n32/n64 +# Second byte of addiu with $zero at rt contains the number of the source +# register. + +.set noat +daddiu $zero, $zero, 0 # CHECK: encoding: [0x64,0x00,0x00,0x00] +daddiu $at, $zero, 0 # CHECK: encoding: [0x64,0x01,0x00,0x00] +daddiu $v0, $zero, 0 # CHECK: encoding: [0x64,0x02,0x00,0x00] +daddiu $v1, $zero, 0 # CHECK: encoding: [0x64,0x03,0x00,0x00] +daddiu $a0, $zero, 0 # CHECK: encoding: [0x64,0x04,0x00,0x00] +daddiu $a1, $zero, 0 # CHECK: encoding: [0x64,0x05,0x00,0x00] +daddiu $a2, $zero, 0 # CHECK: encoding: [0x64,0x06,0x00,0x00] +daddiu $a3, $zero, 0 # CHECK: encoding: [0x64,0x07,0x00,0x00] +daddiu $a4, $zero, 0 # CHECK: encoding: [0x64,0x08,0x00,0x00] +daddiu $a5, $zero, 0 # CHECK: encoding: [0x64,0x09,0x00,0x00] +daddiu $a6, $zero, 0 # CHECK: encoding: [0x64,0x0a,0x00,0x00] +daddiu $a7, $zero, 0 # CHECK: encoding: [0x64,0x0b,0x00,0x00] +daddiu $t4, $zero, 0 # CHECK: encoding: [0x64,0x0c,0x00,0x00] +daddiu $t5, $zero, 0 # CHECK: encoding: [0x64,0x0d,0x00,0x00] +daddiu $t6, $zero, 0 # CHECK: encoding: [0x64,0x0e,0x00,0x00] +daddiu $t7, $zero, 0 # CHECK: encoding: [0x64,0x0f,0x00,0x00] +daddiu $s0, $zero, 0 # CHECK: encoding: [0x64,0x10,0x00,0x00] +daddiu $s1, $zero, 0 # CHECK: encoding: [0x64,0x11,0x00,0x00] +daddiu $s2, $zero, 0 # CHECK: encoding: [0x64,0x12,0x00,0x00] +daddiu $s3, $zero, 0 # CHECK: encoding: [0x64,0x13,0x00,0x00] +daddiu $s4, $zero, 0 # CHECK: encoding: [0x64,0x14,0x00,0x00] +daddiu $s5, $zero, 0 # CHECK: encoding: [0x64,0x15,0x00,0x00] +daddiu $s6, $zero, 0 # CHECK: encoding: [0x64,0x16,0x00,0x00] +daddiu $s7, $zero, 0 # CHECK: encoding: [0x64,0x17,0x00,0x00] +daddiu $t8, $zero, 0 # CHECK: encoding: [0x64,0x18,0x00,0x00] +daddiu $t9, $zero, 0 # CHECK: encoding: [0x64,0x19,0x00,0x00] +daddiu $kt0, $zero, 0 # CHECK: encoding: [0x64,0x1a,0x00,0x00] +daddiu $kt1, $zero, 0 # CHECK: encoding: [0x64,0x1b,0x00,0x00] +daddiu $gp, $zero, 0 # CHECK: encoding: [0x64,0x1c,0x00,0x00] +daddiu $sp, $zero, 0 # CHECK: encoding: [0x64,0x1d,0x00,0x00] +daddiu $s8, $zero, 0 # CHECK: encoding: [0x64,0x1e,0x00,0x00] +daddiu $fp, $zero, 0 # CHECK: encoding: [0x64,0x1e,0x00,0x00] +daddiu $ra, $zero, 0 # CHECK: encoding: [0x64,0x1f,0x00,0x00] diff --git a/test/MC/Mips/mips64-register-names-o32.s b/test/MC/Mips/mips64-register-names-o32.s new file mode 100644 index 00000000000..c17057816ed --- /dev/null +++ b/test/MC/Mips/mips64-register-names-o32.s @@ -0,0 +1,41 @@ +# RUN: llvm-mc %s -triple=mips64-unknown-freebsd -show-encoding \ +# RUN: -mattr=-n64,+o32 | FileCheck %s + +# Check that the register names are mapped to their correct numbers for o32 +# Second byte of daddiu with $zero at rt contains the number of the source +# register. + +.set noat +daddiu $zero, $zero, 0 # CHECK: encoding: [0x64,0x00,0x00,0x00] +daddiu $at, $zero, 0 # CHECK: encoding: [0x64,0x01,0x00,0x00] +daddiu $v0, $zero, 0 # CHECK: encoding: [0x64,0x02,0x00,0x00] +daddiu $v1, $zero, 0 # CHECK: encoding: [0x64,0x03,0x00,0x00] +daddiu $a0, $zero, 0 # CHECK: encoding: [0x64,0x04,0x00,0x00] +daddiu $a1, $zero, 0 # CHECK: encoding: [0x64,0x05,0x00,0x00] +daddiu $a2, $zero, 0 # CHECK: encoding: [0x64,0x06,0x00,0x00] +daddiu $a3, $zero, 0 # CHECK: encoding: [0x64,0x07,0x00,0x00] +daddiu $t0, $zero, 0 # CHECK: encoding: [0x64,0x08,0x00,0x00] +daddiu $t1, $zero, 0 # CHECK: encoding: [0x64,0x09,0x00,0x00] +daddiu $t2, $zero, 0 # CHECK: encoding: [0x64,0x0a,0x00,0x00] +daddiu $t3, $zero, 0 # CHECK: encoding: [0x64,0x0b,0x00,0x00] +daddiu $t4, $zero, 0 # CHECK: encoding: [0x64,0x0c,0x00,0x00] +daddiu $t5, $zero, 0 # CHECK: encoding: [0x64,0x0d,0x00,0x00] +daddiu $t6, $zero, 0 # CHECK: encoding: [0x64,0x0e,0x00,0x00] +daddiu $t7, $zero, 0 # CHECK: encoding: [0x64,0x0f,0x00,0x00] +daddiu $s0, $zero, 0 # CHECK: encoding: [0x64,0x10,0x00,0x00] +daddiu $s1, $zero, 0 # CHECK: encoding: [0x64,0x11,0x00,0x00] +daddiu $s2, $zero, 0 # CHECK: encoding: [0x64,0x12,0x00,0x00] +daddiu $s3, $zero, 0 # CHECK: encoding: [0x64,0x13,0x00,0x00] +daddiu $s4, $zero, 0 # CHECK: encoding: [0x64,0x14,0x00,0x00] +daddiu $s5, $zero, 0 # CHECK: encoding: [0x64,0x15,0x00,0x00] +daddiu $s6, $zero, 0 # CHECK: encoding: [0x64,0x16,0x00,0x00] +daddiu $s7, $zero, 0 # CHECK: encoding: [0x64,0x17,0x00,0x00] +daddiu $t8, $zero, 0 # CHECK: encoding: [0x64,0x18,0x00,0x00] +daddiu $t9, $zero, 0 # CHECK: encoding: [0x64,0x19,0x00,0x00] +daddiu $k0, $zero, 0 # CHECK: encoding: [0x64,0x1a,0x00,0x00] +daddiu $k1, $zero, 0 # CHECK: encoding: [0x64,0x1b,0x00,0x00] +daddiu $gp, $zero, 0 # CHECK: encoding: [0x64,0x1c,0x00,0x00] +daddiu $sp, $zero, 0 # CHECK: encoding: [0x64,0x1d,0x00,0x00] +daddiu $fp, $zero, 0 # CHECK: encoding: [0x64,0x1e,0x00,0x00] +daddiu $s8, $zero, 0 # CHECK: encoding: [0x64,0x1e,0x00,0x00] +daddiu $ra, $zero, 0 # CHECK: encoding: [0x64,0x1f,0x00,0x00] diff --git a/test/MC/Mips/mips64-register-names.s b/test/MC/Mips/mips64-register-names.s deleted file mode 100644 index 3d47b6b71ef..00000000000 --- a/test/MC/Mips/mips64-register-names.s +++ /dev/null @@ -1,39 +0,0 @@ -# RUN: llvm-mc %s -triple=mips64-unknown-freebsd -show-encoding | FileCheck %s - -# Check that the register names are mapped to their correct numbers for n64 -# Second byte of addiu with $zero at rt contains the number of the source -# register. - -daddiu $zero, $zero, 0 # CHECK: encoding: [0x64,0x00,0x00,0x00] -daddiu $at, $zero, 0 # CHECK: encoding: [0x64,0x01,0x00,0x00] -daddiu $v0, $zero, 0 # CHECK: encoding: [0x64,0x02,0x00,0x00] -daddiu $v1, $zero, 0 # CHECK: encoding: [0x64,0x03,0x00,0x00] -daddiu $a0, $zero, 0 # CHECK: encoding: [0x64,0x04,0x00,0x00] -daddiu $a1, $zero, 0 # CHECK: encoding: [0x64,0x05,0x00,0x00] -daddiu $a2, $zero, 0 # CHECK: encoding: [0x64,0x06,0x00,0x00] -daddiu $a3, $zero, 0 # CHECK: encoding: [0x64,0x07,0x00,0x00] -daddiu $a4, $zero, 0 # CHECK: encoding: [0x64,0x08,0x00,0x00] -daddiu $a5, $zero, 0 # CHECK: encoding: [0x64,0x09,0x00,0x00] -daddiu $a6, $zero, 0 # CHECK: encoding: [0x64,0x0a,0x00,0x00] -daddiu $a7, $zero, 0 # CHECK: encoding: [0x64,0x0b,0x00,0x00] -daddiu $t4, $zero, 0 # CHECK: encoding: [0x64,0x0c,0x00,0x00] -daddiu $t5, $zero, 0 # CHECK: encoding: [0x64,0x0d,0x00,0x00] -daddiu $t6, $zero, 0 # CHECK: encoding: [0x64,0x0e,0x00,0x00] -daddiu $t7, $zero, 0 # CHECK: encoding: [0x64,0x0f,0x00,0x00] -daddiu $s0, $zero, 0 # CHECK: encoding: [0x64,0x10,0x00,0x00] -daddiu $s1, $zero, 0 # CHECK: encoding: [0x64,0x11,0x00,0x00] -daddiu $s2, $zero, 0 # CHECK: encoding: [0x64,0x12,0x00,0x00] -daddiu $s3, $zero, 0 # CHECK: encoding: [0x64,0x13,0x00,0x00] -daddiu $s4, $zero, 0 # CHECK: encoding: [0x64,0x14,0x00,0x00] -daddiu $s5, $zero, 0 # CHECK: encoding: [0x64,0x15,0x00,0x00] -daddiu $s6, $zero, 0 # CHECK: encoding: [0x64,0x16,0x00,0x00] -daddiu $s7, $zero, 0 # CHECK: encoding: [0x64,0x17,0x00,0x00] -daddiu $t8, $zero, 0 # CHECK: encoding: [0x64,0x18,0x00,0x00] -daddiu $t9, $zero, 0 # CHECK: encoding: [0x64,0x19,0x00,0x00] -daddiu $kt0, $zero, 0 # CHECK: encoding: [0x64,0x1a,0x00,0x00] -daddiu $kt1, $zero, 0 # CHECK: encoding: [0x64,0x1b,0x00,0x00] -daddiu $gp, $zero, 0 # CHECK: encoding: [0x64,0x1c,0x00,0x00] -daddiu $sp, $zero, 0 # CHECK: encoding: [0x64,0x1d,0x00,0x00] -daddiu $s8, $zero, 0 # CHECK: encoding: [0x64,0x1e,0x00,0x00] -daddiu $fp, $zero, 0 # CHECK: encoding: [0x64,0x1e,0x00,0x00] -daddiu $ra, $zero, 0 # CHECK: encoding: [0x64,0x1f,0x00,0x00]