This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[committed] Add a MIPS16 macro test
- From: Richard Sandiford <rdsandiford at googlemail dot com>
- To: binutils at sourceware dot org
- Date: Sat, 03 Aug 2013 11:41:59 +0100
- Subject: [committed] Add a MIPS16 macro test
It looks like we don't have a test for MIPS16 macros, so this patch adds
one and fixes the fallout. It's not the greatest test in the world but
it should at least be better than nothing.
The move_register bug was introduced by me 12 years ago...
Richard
gas/
* config/tc-mips.c (mips16_macro): Don't use move_register.
(mips16_ip): Allow macros to use 'p'.
gas/testsuite/
* gas/mips/mips16-macro.s, gas/mips/mips16-macro.d: New test.
* gas/mips/mips.exp: Run it.
Index: gas/config/tc-mips.c
===================================================================
--- gas/config/tc-mips.c 2013-08-03 09:20:13.914679187 +0100
+++ gas/config/tc-mips.c 2013-08-03 09:32:03.281522766 +0100
@@ -12060,10 +12060,11 @@ mips16_macro (struct mips_cl_insn *ip)
expr1.X_add_number = 0;
macro_build (&expr1, "slti", "x,8", yreg);
if (xreg != yreg)
- move_register (xreg, yreg);
+ macro_build (NULL, "move", "y,X", xreg, mips16_to_32_reg_map[yreg]);
expr1.X_add_number = 2;
macro_build (&expr1, "bteqz", "p");
macro_build (NULL, "neg", "x,w", xreg, xreg);
+ break;
}
}
@@ -12680,7 +12681,7 @@ mips16_ip (char *str, struct mips_cl_ins
we can. */
if (insn->pinfo == INSN_MACRO)
{
- gas_assert (relax_char == 0);
+ gas_assert (relax_char == 0 || relax_char == 'p');
gas_assert (*offset_reloc == BFD_RELOC_UNUSED);
}
else if (relax_char
Index: gas/testsuite/gas/mips/mips16-macro.s
===================================================================
--- /dev/null 2013-07-23 18:41:43.074412242 +0100
+++ gas/testsuite/gas/mips/mips16-macro.s 2013-08-03 09:51:13.680499243 +0100
@@ -0,0 +1,60 @@
+ .set mips64
+ .set mips16
+ .ent foo
+foo:
+ div $2,$3,$4
+ divu $3,$4,$5
+ ddiv $4,$5,$6
+ ddivu $5,$6,$7
+ rem $6,$7,$16
+ remu $6,$7,$17
+ drem $2,$3,$4
+ dremu $3,$4,$5
+ mul $4,$5,$6
+ dmul $5,$6,$7
+ subu $2,-32767
+ subu $3,16
+ subu $4,32768
+ subu $3,$7,-16383
+ subu $4,$16,4
+ subu $5,$17,16384
+ dsubu $4,-32767
+ dsubu $6,6
+ dsubu $7,32768
+ dsubu $2,$4,-16383
+ dsubu $3,$7,8
+ dsubu $4,$5,16384
+1: beq $2,$3,1b
+1: bne $4,$5,1b
+1: blt $6,$7,1b
+1: bltu $16,$17,1b
+1: ble $4,$7,1b
+1: bleu $5,$6,1b
+1: bge $4,$16,1b
+1: bgeu $5,$17,1b
+1: bgt $4,$6,1b
+1: bgtu $5,$7,1b
+1: beq $2,1,1b
+1: beq $3,65535,1b
+1: bne $4,1,1b
+1: bne $5,65535,1b
+1: blt $6,-32768,1b
+1: blt $7,32767,1b
+1: bltu $16,-32768,1b
+1: bltu $17,32767,1b
+1: ble $2,-32769,1b
+1: ble $3,32766,1b
+1: bleu $4,-32769,1b
+1: bleu $5,32766,1b
+1: bge $6,-32768,1b
+1: bge $7,32766,1b
+1: bgeu $16,-32768,1b
+1: bgeu $17,32767,1b
+1: bgt $2,-32769,1b
+1: bgt $3,32766,1b
+1: bgtu $4,-32769,1b
+1: bgtu $5,32766,1b
+ abs $2
+ abs $3,$3
+ abs $4,$5
+ .end foo
Index: gas/testsuite/gas/mips/mips16-macro.d
===================================================================
--- /dev/null 2013-07-23 18:41:43.074412242 +0100
+++ gas/testsuite/gas/mips/mips16-macro.d 2013-08-03 09:55:17.247812915 +0100
@@ -0,0 +1,129 @@
+#objdump: -dr -Mgpr-names=numeric
+#as: -mabi=o64
+#name: MIPS16 macros
+
+.*: +file format .*mips.*
+
+
+Disassembly of section \.text:
+
+[ 0-9a-f]+ <foo>:
+[ 0-9a-f]+: eb9a div \$0,\$3,\$4
+[ 0-9a-f]+: 2c01 bnez \$4,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: ea12 mflo \$2
+[ 0-9a-f]+: ecbb divu \$0,\$4,\$5
+[ 0-9a-f]+: 2d01 bnez \$5,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: eb12 mflo \$3
+[ 0-9a-f]+: edde ddiv \$0,\$5,\$6
+[ 0-9a-f]+: 2e01 bnez \$6,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: ec12 mflo \$4
+[ 0-9a-f]+: eeff ddivu \$0,\$6,\$7
+[ 0-9a-f]+: 2f01 bnez \$7,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: ed12 mflo \$5
+[ 0-9a-f]+: ef1a div \$0,\$7,\$16
+[ 0-9a-f]+: 2801 bnez \$16,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: ee10 mfhi \$6
+[ 0-9a-f]+: ef3b divu \$0,\$7,\$17
+[ 0-9a-f]+: 2901 bnez \$17,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: ee10 mfhi \$6
+[ 0-9a-f]+: eb9e ddiv \$0,\$3,\$4
+[ 0-9a-f]+: 2c01 bnez \$4,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: ea10 mfhi \$2
+[ 0-9a-f]+: ecbf ddivu \$0,\$4,\$5
+[ 0-9a-f]+: 2d01 bnez \$5,[0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e8e5 break 7
+[ 0-9a-f]+: eb10 mfhi \$3
+[ 0-9a-f]+: edd9 multu \$5,\$6
+[ 0-9a-f]+: ec12 mflo \$4
+[ 0-9a-f]+: eefd dmultu \$6,\$7
+[ 0-9a-f]+: ed12 mflo \$5
+[ 0-9a-f]+: f7ef 4a1f addiu \$2,32767
+[ 0-9a-f]+: 4bf0 addiu \$3,-16
+[ 0-9a-f]+: f010 4c00 addiu \$4,-32768
+[ 0-9a-f]+: f7f7 476f addiu \$3,\$7,16383
+[ 0-9a-f]+: 408c addiu \$4,\$16,-4
+[ 0-9a-f]+: f008 41a0 addiu \$5,\$17,-16384
+[ 0-9a-f]+: f7ef fd9f daddiu \$4,32767
+[ 0-9a-f]+: fdda daddiu \$6,-6
+[ 0-9a-f]+: f010 fde0 daddiu \$7,-32768
+[ 0-9a-f]+: f7f7 445f daddiu \$2,\$4,16383
+[ 0-9a-f]+: 4778 daddiu \$3,\$7,-8
+[ 0-9a-f]+: f008 4590 daddiu \$4,\$5,-16384
+[ 0-9a-f]+: ea6a cmp \$2,\$3
+[ 0-9a-f]+: 60fe bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ecaa cmp \$4,\$5
+[ 0-9a-f]+: 61fe btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: eee2 slt \$6,\$7
+[ 0-9a-f]+: 61fe btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: e823 sltu \$16,\$17
+[ 0-9a-f]+: 61fe btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ef82 slt \$7,\$4
+[ 0-9a-f]+: 60fe bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: eea3 sltu \$6,\$5
+[ 0-9a-f]+: 60fe bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ec02 slt \$4,\$16
+[ 0-9a-f]+: 60fe bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ed23 sltu \$5,\$17
+[ 0-9a-f]+: 60fe bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ee82 slt \$6,\$4
+[ 0-9a-f]+: 61fe btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: efa3 sltu \$7,\$5
+[ 0-9a-f]+: 61fe btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: 7201 cmpi \$2,1
+[ 0-9a-f]+: 60fe bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ff 731f cmpi \$3,65535
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: 7401 cmpi \$4,1
+[ 0-9a-f]+: 61fe btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ff 751f cmpi \$5,65535
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5600 slti \$6,-32768
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 571f slti \$7,32767
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5800 sltiu \$16,-32768
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 591f sltiu \$17,32767
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5200 slti \$2,-32768
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 531f slti \$3,32767
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5c00 sltiu \$4,-32768
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 5d1f sltiu \$5,32767
+[ 0-9a-f]+: 61fd btnez [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5600 slti \$6,-32768
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 571e slti \$7,32766
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5800 sltiu \$16,-32768
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 591f sltiu \$17,32767
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5200 slti \$2,-32768
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 531f slti \$3,32767
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f010 5c00 sltiu \$4,-32768
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: f7ef 5d1f sltiu \$5,32767
+[ 0-9a-f]+: 60fd bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: 5200 slti \$2,0
+[ 0-9a-f]+: 6001 bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ea4b neg \$2
+[ 0-9a-f]+: 5300 slti \$3,0
+[ 0-9a-f]+: 6001 bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: eb6b neg \$3
+[ 0-9a-f]+: 5500 slti \$5,0
+[ 0-9a-f]+: 6785 move \$4,\$5
+[ 0-9a-f]+: 6001 bteqz [0-9a-f]+ <[^>]*>
+[ 0-9a-f]+: ec8b neg \$4
+#pass
Index: gas/testsuite/gas/mips/mips.exp
===================================================================
--- gas/testsuite/gas/mips/mips.exp 2013-08-01 21:13:23.593826223 +0100
+++ gas/testsuite/gas/mips/mips.exp 2013-08-03 09:52:07.177007426 +0100
@@ -685,6 +685,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips16"
run_dump_test "mips16-64"
+ run_dump_test "mips16-macro"
# Check MIPS16e extensions
run_dump_test_arches "mips16e" [mips_arch_list_matching mips32 !micromips]
# Check jalx handling