aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2004-11-12 12:27:05 +0000
committerNick Clifton <nickc@redhat.com>2004-11-12 12:27:05 +0000
commit30e857fcdb77010a0a57bc86d2855e78c1842918 (patch)
tree992db7b4234c3ce3b94aacd4f789a6822c5ff44a /gas
parent9b098f24af69b10358b2254bd1a71f070d3e2514 (diff)
downloadfsf-binutils-gdb-30e857fcdb77010a0a57bc86d2855e78c1842918.zip
fsf-binutils-gdb-30e857fcdb77010a0a57bc86d2855e78c1842918.tar.gz
fsf-binutils-gdb-30e857fcdb77010a0a57bc86d2855e78c1842918.tar.bz2
Fix off by one negative offsets for conditional branches.
Add a test of this fix.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-mn10300.c6
-rw-r--r--gas/testsuite/ChangeLog7
-rw-r--r--gas/testsuite/gas/mn10300/relax.d17
-rw-r--r--gas/testsuite/gas/mn10300/relax.s32
5 files changed, 64 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c2ade55..bda1a36 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-12 Nick Clifton <nickc@redhat.com>
+
+ * config/tc-mn10300.c (md_relax_table): Fix off by one negative
+ offsets for conditional branches.
+
2004-11-11 Bob Wilson <bob.wilson@acm.org>
* config/tc-xtensa.c (MAX_IMMED6): Change value to 65.
diff --git a/gas/config/tc-mn10300.c b/gas/config/tc-mn10300.c
index ea5b533..e2fcf75 100644
--- a/gas/config/tc-mn10300.c
+++ b/gas/config/tc-mn10300.c
@@ -57,12 +57,12 @@ const char FLT_CHARS[] = "dD";
const relax_typeS md_relax_table[] = {
/* bCC relaxing */
{0x7f, -0x80, 2, 1},
- {0x7fff, -0x8000, 5, 2},
+ {0x7fff, -0x8000 + 1, 5, 2},
{0x7fffffff, -0x80000000, 7, 0},
/* bCC relaxing (uncommon cases) */
{0x7f, -0x80, 3, 4},
- {0x7fff, -0x8000, 6, 5},
+ {0x7fff, -0x8000 + 1, 6, 5},
{0x7fffffff, -0x80000000, 8, 0},
/* call relaxing */
@@ -80,7 +80,7 @@ const relax_typeS md_relax_table[] = {
/* fbCC relaxing */
{0x7f, -0x80, 3, 14},
- {0x7fff, -0x8000, 6, 15},
+ {0x7fff, -0x8000 + 1, 6, 15},
{0x7fffffff, -0x80000000, 8, 0},
};
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index b5c94fc..9de9798 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2004-11-12 Nick Clifton <nickc@redhat.com>
+
+ * gas/mn10300/basic.exp: Add relax test.
+ * gas/mn10300/relax.s: New test.
+ * gas/mn10300/relax.d: Expected results. Make sure that the
+ correct size of instruction has been selected.
+
2004-11-11 Bob Wilson <bob.wilson@acm.org>
* gas/xtensa/short_branch_offset.s: New.
diff --git a/gas/testsuite/gas/mn10300/relax.d b/gas/testsuite/gas/mn10300/relax.d
new file mode 100644
index 0000000..069e8b6
--- /dev/null
+++ b/gas/testsuite/gas/mn10300/relax.d
@@ -0,0 +1,17 @@
+#objdump: -r
+#name: Relaxation of conditional branches
+
+.*: +file format.*elf32-[am33lin|mn10300].*
+
+RELOCATION RECORDS FOR \[.rlcb\]:
+OFFSET TYPE VALUE
+0+8003 R_MN10300_PCREL8 .L0._0\+0x00000001
+0+8005 R_MN10300_PCREL32 .L2\+0x00000001
+
+
+RELOCATION RECORDS FOR \[.rsflb\]:
+OFFSET TYPE VALUE
+0+8004 R_MN10300_PCREL8 .L0._1\+0x00000002
+0+8006 R_MN10300_PCREL32 .L4\+0x00000001
+
+
diff --git a/gas/testsuite/gas/mn10300/relax.s b/gas/testsuite/gas/mn10300/relax.s
new file mode 100644
index 0000000..2ef3f60
--- /dev/null
+++ b/gas/testsuite/gas/mn10300/relax.s
@@ -0,0 +1,32 @@
+ .am33_2
+
+ .section .rlcb, "ax"
+ .global relax_long_cond_branch
+relax_long_cond_branch:
+ clr d0
+ clr d1
+.L2:
+ add d1,d0
+ inc d1
+
+ .fill 32764, 1, 0xcb
+
+ cmp 9,d1
+ ble .L2
+ rets
+
+
+ .section .rsflb, "ax"
+ .global relax_long_float_cond_branch
+relax_long_float_cond_branch:
+ clr d0
+ clr d1
+.L4:
+ add d1,d0
+ inc d1
+
+ .fill 32764, 1, 0xcb
+
+ cmp 9,d1
+ fble .L4
+ rets