aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2011-06-23 20:21:38 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2011-06-23 20:21:38 +0000
commitf77ef3e29a6246edee20b5908e99b2c92f245a6b (patch)
tree41bdae0929facb1bad3db39be83435385315050b /gas
parent6e586cc56592f85535f788391b4f48025311b465 (diff)
downloadgdb-f77ef3e29a6246edee20b5908e99b2c92f245a6b.zip
gdb-f77ef3e29a6246edee20b5908e99b2c92f245a6b.tar.gz
gdb-f77ef3e29a6246edee20b5908e99b2c92f245a6b.tar.bz2
gas/
PR gas/12915 * config/tc-mips.c (append_insn): Only consider hazards between the pre-noreorder block and ip. gas/testsuite/ * gas/mips/pr12915.s, gas/mips/pr12915.d: New test. * gas/mips/mips.exp: Run it.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-mips.c14
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/mips/mips.exp2
-rw-r--r--gas/testsuite/gas/mips/pr12915.d15
-rw-r--r--gas/testsuite/gas/mips/pr12915.s5
6 files changed, 45 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index be2b8f5..2abdf3e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2011-06-23 Richard Sandiford <rdsandiford@googlemail.com>
+
+ PR gas/12915
+ * config/tc-mips.c (append_insn): Only consider hazards between the
+ pre-noreorder block and ip.
+
2011-06-21 Sameera Deshpande <sameera.deshpande@arm.com>
* config/tc-arm.c (vfp_conv): Add check on range of immediate operand
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 33d8896..8430883 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -3154,8 +3154,18 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
}
else if (mips_relax.sequence != 2 && prev_nop_frag != NULL)
{
- /* Work out how many nops in prev_nop_frag are needed by IP. */
- int nops = nops_for_insn_or_target (history, ip);
+ struct mips_cl_insn stubbed_history[ARRAY_SIZE (history)];
+ int nops, i;
+
+ /* Work out how many nops in prev_nop_frag are needed by IP.
+ Base this on a history in which all insns since prev_nop_frag
+ are stubbed out with nops. */
+ for (i = 0; i < (int) ARRAY_SIZE (history); i++)
+ if (i < prev_nop_frag_since)
+ stubbed_history[i] = *NOP_INSN;
+ else
+ stubbed_history[i] = history[i];
+ nops = nops_for_insn_or_target (stubbed_history, ip);
gas_assert (nops <= prev_nop_frag_holds);
/* Enforce NOPS as a minimum. */
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 087e778..ca62de9 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-23 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gas/mips/pr12915.s, gas/mips/pr12915.d: New test.
+ * gas/mips/mips.exp: Run it.
+
2011-06-21 Sameera Deshpande <sameera.deshpande@arm.com>
* gas/arm/vcvt-bad.d: New test.
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 8995518..d51ac43 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -1000,4 +1000,6 @@ if { [istarget mips*-*-vxworks*] } {
[mips_arch_list_matching mips32r2] ] ]
if $has_newabi { run_dump_test "cfi-n64-1" }
+
+ run_dump_test "pr12915"
}
diff --git a/gas/testsuite/gas/mips/pr12915.d b/gas/testsuite/gas/mips/pr12915.d
new file mode 100644
index 0000000..95e4e2d
--- /dev/null
+++ b/gas/testsuite/gas/mips/pr12915.d
@@ -0,0 +1,15 @@
+#as: -32 -mips1
+#objdump: -dr
+
+.*
+
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 3c1b0000 lui k1,0x0
+ 0: R_MIPS_HI16 kernelsp
+ 4: 8f7b0000 lw k1,0\(k1\)
+ 4: R_MIPS_LO16 kernelsp
+ 8: 401c7000 mfc0 gp,c0_epc
+ c: 279c0004 addiu gp,gp,4
diff --git a/gas/testsuite/gas/mips/pr12915.s b/gas/testsuite/gas/mips/pr12915.s
new file mode 100644
index 0000000..6de26ca
--- /dev/null
+++ b/gas/testsuite/gas/mips/pr12915.s
@@ -0,0 +1,5 @@
+ lui $27, %hi(kernelsp)
+ lw $27, %lo(kernelsp)($27)
+ .set noreorder
+ mfc0 $28, $14
+ addu $28, 4