From 30e857fcdb77010a0a57bc86d2855e78c1842918 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 12 Nov 2004 12:27:05 +0000 Subject: Fix off by one negative offsets for conditional branches. Add a test of this fix. --- gas/ChangeLog | 5 +++++ gas/config/tc-mn10300.c | 6 +++--- gas/testsuite/ChangeLog | 7 +++++++ gas/testsuite/gas/mn10300/relax.d | 17 +++++++++++++++++ gas/testsuite/gas/mn10300/relax.s | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 gas/testsuite/gas/mn10300/relax.d create mode 100644 gas/testsuite/gas/mn10300/relax.s 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 + + * config/tc-mn10300.c (md_relax_table): Fix off by one negative + offsets for conditional branches. + 2004-11-11 Bob Wilson * 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 + + * 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 * 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 -- cgit v1.1