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 {
.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<unsigned>(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<unsigned>(Name)
+ .Case("a4", 8)
+ .Case("a5", 9)
+ .Case("a6", 10)
+ .Case("a7", 11)
+ .Case("kt0", 26)
+ .Case("kt1", 27)
+ .Default(-1);
+ }
warnIfAssemblerTemporary(CC);
--- /dev/null
+# 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]
+++ /dev/null
-# 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]
--- /dev/null
+# 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]
--- /dev/null
+# 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]
+++ /dev/null
-# 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]