diff options
author | Nick Clifton <nickc@redhat.com> | 2013-03-21 16:08:07 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-03-21 16:08:07 +0000 |
commit | 81f5558e3d93654ed79b6ea28850a4798ea1404f (patch) | |
tree | 09a020b2f58cf3b34739e07297561af0184b61ba /ld | |
parent | b2f83c08372136fe9fe7d1df2feb5566c8b883fb (diff) | |
download | gdb-81f5558e3d93654ed79b6ea28850a4798ea1404f.zip gdb-81f5558e3d93654ed79b6ea28850a4798ea1404f.tar.gz gdb-81f5558e3d93654ed79b6ea28850a4798ea1404f.tar.bz2 |
* elf32-h8300 (h8_relax_section): Add new relaxation of mov
@(disp:32,ERx) to mov @(disp:16,ERx).
(R_H8_DISP32A16): New reloc.
Comments added and corrected.
* reloc.c (BFD_RELOC_H8_DISP32A16): New reloc.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* ld.texinfo (H8/300): Add description of relaxation of
mov @(disp:32,ERx) to mov @(disp:16,ERx).
* ld-h8300/h8300.exp: Add new relax-7 test on ELF.
* ld-h8300/relax-2.s: Add other direction and .w/.l variants of
mov insns.
* ld-h8300/relax-2.d: Update expected disassembly.
* ld-h8300/relax-7a.s: New: tests for mov @(disp:32,ERx) -> mov
@(disp:16,ERx).
* ld-h8300/relax-7b.s: New: Likewise.
* ld-h8300/relax-7.d: New: expected disassembly.
* config/tc-h8300.c (do_a_fix_imm): Add relaxation of mov
@(disp:32,ERx) to mov @(disp:16,ERx) insns by new reloc
R_H8_DISP32A16.
* config/tc-h8300.h: Remove duplicated defines.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/ld.texinfo | 10 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-h8300/h8300.exp | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-h8300/relax-2.d | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-h8300/relax-2.s | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-h8300/relax-7.d | 81 | ||||
-rw-r--r-- | ld/testsuite/ld-h8300/relax-7a.s | 66 | ||||
-rw-r--r-- | ld/testsuite/ld-h8300/relax-7b.s | 19 |
9 files changed, 219 insertions, 6 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index e733147..93a52dc 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2013-03-21 Michael Schewe <michael.schewe@gmx.net> + + * ld.texinfo (H8/300): Add description of relaxation of + mov @(disp:32,ERx) to mov @(disp:16,ERx). + 2013-03-21 Kai Tietz <ktietz@redhat.com> * pe-dll.c (process_def_file_and_drectve): Don't handle VC diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 1f8e34d..7fae2c2 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -6078,7 +6078,7 @@ respectively. @cindex synthesizing on H8/300 @item synthesizing instructions -@c FIXME: specifically mov.b, or any mov instructions really? +@c FIXME: specifically mov.b, or any mov instructions really? -> mov.b only, at least on H8, H8H, H8S @command{ld} finds all @code{mov.b} instructions which use the sixteen-bit absolute address form, but refer to the top page of memory, and changes them to use the eight-bit address form. @@ -6086,6 +6086,14 @@ page of memory, and changes them to use the eight-bit address form. @samp{mov.b @code{@@}@var{aa}:8} whenever the address @var{aa} is in the top page of memory). +@command{ld} finds all @code{mov} instructions which use the register +indirect with 32-bit displacement addressing mode, but use a small +displacement inside 16-bit displacement range, and changes them to use +the 16-bit displacement form. (That is: the linker turns @samp{mov.b +@code{@@}@var{d}:32,ERx} into @samp{mov.b @code{@@}@var{d}:16,ERx} +whenever the displacement @var{d} is in the 16 bit signed integer +range. Only implemented in ELF-format ld). + @item bit manipulation instructions @command{ld} finds all bit manipulation instructions like @code{band, bclr, biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, bxor} diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c30e3cd..4c1cac7 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2013-02-02 Michael Schewe <michael.schewe@gmx.net> + + * ld-h8300/h8300.exp: Add new relax-7 test on ELF. + * ld-h8300/relax-2.s: Add other direction and .w/.l variants of + mov insns. + * ld-h8300/relax-2.d: Update expected disassembly. + * ld-h8300/relax-7a.s: New: tests for mov @(disp:32,ERx) -> mov + @(disp:16,ERx). + * ld-h8300/relax-7b.s: New: Likewise. + * ld-h8300/relax-7.d: New: expected disassembly. + 2013-03-20 Venkataramanan Kumar <venkataramanan.kumar@linaro.org> * ld-elf/group8a.d (notarget): Remove aarch64*-*-*. diff --git a/ld/testsuite/ld-h8300/h8300.exp b/ld/testsuite/ld-h8300/h8300.exp index 3604dfa..240c7c3 100644 --- a/ld/testsuite/ld-h8300/h8300.exp +++ b/ld/testsuite/ld-h8300/h8300.exp @@ -1,5 +1,5 @@ # Expect script for ld-h8300 tests -# Copyright 2002, 2003, 2004, 2005, 2007, 2010 Free Software Foundation, Inc. +# Copyright 2002-2013 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -35,6 +35,7 @@ if [is_elf_format] { run_dump_test relax-4 run_dump_test relax-5 run_dump_test relax-6 + run_dump_test relax-7 run_dump_test gcsection } else { run_dump_test relax-3-coff diff --git a/ld/testsuite/ld-h8300/relax-2.d b/ld/testsuite/ld-h8300/relax-2.d index 963139d..b79f5c2 100644 --- a/ld/testsuite/ld-h8300/relax-2.d +++ b/ld/testsuite/ld-h8300/relax-2.d @@ -7,5 +7,15 @@ Disassembly of section .text: 00000100 <_start>: - *100: mov.b @0x67:8,r0l - *102: mov.b @0x4321:16,r0l + 100: mov.b @0x64:8,r0l + 102: mov.b r0l,@0x64:8 + 104: mov.b @0x4320:16,r0l + 108: mov.b r0l,@0x4320:16 + 10c: mov.w @0xff64:16,r0 + 110: mov.w r0,@0xff64:16 + 114: mov.w @0x4320:16,r0 + 118: mov.w r0,@0x4320:16 + 11c: mov.l @0xff64:16,er0 + 122: mov.l er0,@0xff64:16 + 128: mov.l @0x4320:16,er0 + 12e: mov.l er0,@0x4320:16 diff --git a/ld/testsuite/ld-h8300/relax-2.s b/ld/testsuite/ld-h8300/relax-2.s index aa82dba..8e096b8 100644 --- a/ld/testsuite/ld-h8300/relax-2.s +++ b/ld/testsuite/ld-h8300/relax-2.s @@ -2,7 +2,19 @@ .globl _start _start: mov.b @foo:16,r0l + mov.b r0l,@foo:16 mov.b @bar:32,r0l + mov.b r0l,@bar:32 - .equ foo,0xffff67 - .equ bar,0x4321 + mov.w @foo:16,r0 + mov.w r0,@foo:16 + mov.w @bar:32,r0 + mov.w r0,@bar:32 + + mov.l @foo:16,er0 + mov.l er0,@foo:16 + mov.l @bar:32,er0 + mov.l er0,@bar:32 + + .equ foo,0xffff64 + .equ bar,0x4320 diff --git a/ld/testsuite/ld-h8300/relax-7.d b/ld/testsuite/ld-h8300/relax-7.d new file mode 100644 index 0000000..ecf1a10 --- /dev/null +++ b/ld/testsuite/ld-h8300/relax-7.d @@ -0,0 +1,81 @@ +# name: H8300 Relaxation Test 7 +# source: relax-7?.s +# ld: --relax -m h8300self +# objdump: -d -s --no-show-raw-insn + +.*: file format .*-h8300 + +Contents of section .text: + 0100 1a801aa2 7a01ffff 80000100 6f2201d0 [^\000]* + 0110 59206e0a ff016e8a ff016e1a 00016e9a [^\000]* + 0120 00015470 6f02fff2 6f82fff2 6f120002 [^\000]* + 0130 6f920002 54700100 6f028004 01006f82 [^\000]* + 0140 80040100 6f120004 01006f92 00045470 [^\000]* + 0150 7a000100 78006b01 fff25470 78006a2a [^\000]* + 0160 ffff7ff1 78006aaa ffff7ff1 78106a2a [^\000]* + 0170 00008000 78106aaa 00008000 54707800 [^\000]* + 0180 6b22ffff 7ffa7800 6ba2ffff 7ffa7810 [^\000]* + 0190 6b220000 80007810 6ba20000 80005470 [^\000]* + 01a0 01007800 6b2200ff ff040100 78806ba2 [^\000]* + 01b0 00ffff04 01007810 6b220000 80000100 [^\000]* + 01c0 78906ba2 00008000 5470 [^\000]* +Contents of section .rodata: + 01cc 00000112 00000124 00000136 0000015c [^\000]* + 01dc 0000017e 000001a0 00000150 01007800 [^\000]* + 01ec 6b200000 01e80000 [^\000]* + +Disassembly of section .text: + +00000100 <_start>: + 100: sub.l er0,er0 + 102: sub.l er2,er2 + 104: mov.l #0xffff8000,er1 + 10a: mov.l @\(0x1d0:16,er2\),er2 + 110: jmp @er2 + +00000112 <.L20>: + 112: mov.b @\(0xff01:16,er0\),r2l + 116: mov.b r2l,@\(0xff01:16,er0\) + 11a: mov.b @\(0x1:16,er1\),r2l + 11e: mov.b r2l,@\(0x1:16,er1\) + 122: rts[\t]* + +00000124 <.L21>: + 124: mov.w @\(0xfff2:16,er0\),r2 + 128: mov.w r2,@\(0xfff2:16,er0\) + 12c: mov.w @\(0x2:16,er1\),r2 + 130: mov.w r2,@\(0x2:16,er1\) + 134: rts[\t]* + +00000136 <.L22>: + 136: mov.l @\(0x8004:16,er0\),er2 + 13c: mov.l er2,@\(0x8004:16,er0\) + 142: mov.l @\(0x4:16,er1\),er2 + 148: mov.l er2,@\(0x4:16,er1\) + 14e: rts[\t]* + +00000150 <.L100Relax>: + 150: mov.l #0x1007800,er0 + 156: mov.w @0xfff2:16,r1 + 15a: rts[\t]* + +0000015c <.L30noRelax>: + 15c: mov.b @\(0xffff7ff1:32,er0\),r2l + 164: mov.b r2l,@\(0xffff7ff1:32,er0\) + 16c: mov.b @\(0x8000:32,er1\),r2l + 174: mov.b r2l,@\(0x8000:32,er1\) + 17c: rts[\t]* + +0000017e <.L31noRelax>: + 17e: mov.w @\(0xffff7ffa:32,er0\),r2 + 186: mov.w r2,@\(0xffff7ffa:32,er0\) + 18e: mov.w @\(0x8000:32,er1\),r2 + 196: mov.w r2,@\(0x8000:32,er1\) + 19e: rts[\t]* + +000001a0 <.L32noRelax>: + 1a0: mov.l @\(0xffff04:32,er0\),er2 + 1aa: mov.l er2,@\(0xffff04:32,er0\) + 1b4: mov.l @\(0x8000:32,er1\),er2 + 1be: mov.l er2,@\(0x8000:32,er1\) + 1c8: rts[\t]* diff --git a/ld/testsuite/ld-h8300/relax-7a.s b/ld/testsuite/ld-h8300/relax-7a.s new file mode 100644 index 0000000..915fb79 --- /dev/null +++ b/ld/testsuite/ld-h8300/relax-7a.s @@ -0,0 +1,66 @@ + .h8300s +# relax expected + .global _start + .section .text.func1,"ax",@progbits + .align 1 +_start: + sub.l er0,er0 + sub.l er2,er2 + mov.l #var3,er1 + mov.l @(table+4:32,er2),er2 + jmp @er2 + .section .rodata.tab,"a",@progbits + .align 2 +table: + .long .L20 + .long .L21 + .long .L22 + .long .L30noRelax + .long .L31noRelax + .long .L32noRelax + .long .L100Relax + .section .text.func1 +.L20: + mov.b @(var1+1:32,er0), r2l + mov.b r2l,@(var1+1:32,er0) + mov.b @(1:32,er1), r2l + mov.b r2l,@(1:32,er1) + rts +.L21: + mov.w @(var2+2:32,er0), r2 + mov.w r2,@(var2+2:32,er0) + mov.w @(2:32,er1), r2 + mov.w r2,@(2:32,er1) + rts +.L22: + mov.l @(var3+4:32,er0), er2 + mov.l er2,@(var3+4:32,er0) + mov.l @(4:32,er1), er2 + mov.l er2,@(4:32,er1) + rts + +.L100Relax: + mov.l #0x01007800,er0 +# part of MOV.L @(d:24,ERs),ERd opcode + mov.w @var2+2:32,r1 + rts + +# no relax allowed: +.L30noRelax: + mov.b @(var4+1:32,er0), r2l + mov.b r2l,@(var4+1:32,er0) + mov.b @(0x8000:32,er1), r2l + mov.b r2l,@(0x8000:32,er1) + rts +.L31noRelax: + mov.w @(var5+2:32,er0), r2 + mov.w r2,@(var5+2:32,er0) + mov.w @(0x8000:32,er1), r2 + mov.w r2,@(0x8000:32,er1) + rts +.L32noRelax: + mov.l @(var6+4:32,er0), er2 + mov.l er2,@(var6+4:32,er0) + mov.l @(0x8000:32,er1), er2 + mov.l er2,@(0x8000:32,er1) + rts diff --git a/ld/testsuite/ld-h8300/relax-7b.s b/ld/testsuite/ld-h8300/relax-7b.s new file mode 100644 index 0000000..eea9cfd --- /dev/null +++ b/ld/testsuite/ld-h8300/relax-7b.s @@ -0,0 +1,19 @@ + .h8300s + .global var1,var2,var3,var4,var5,var6 + + .equ var1,0xffffff00 + .equ var2,0xfffffff0 + .equ var3,0xffff8000 + + .equ var4,0xffff7ff0 + .equ var5,0xffff7ff8 + .equ var6,0x00ffff00 + + .section .rodata.tab2,"a",@progbits + .align 2 +table2: # no relax in sections other than text expected: + .short 0x0100 + # MOV.L @(d:24,ERs),ERd opcodes + .short 0x7800 + .short 0x6b20 + .long table2 |