diff options
author | Nick Clifton <nickc@redhat.com> | 2013-03-21 16:08:05 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2013-03-21 16:08:05 +0000 |
commit | 93585c782510a1c5c9010b5e330c2ee3483df692 (patch) | |
tree | 7e6f73a8dc4c6f4aea43f08f74b7966a654fbbf3 /ld/testsuite/ld-h8300 | |
parent | 4cd726045dc9e2c336f96fddbad4662f6ffba536 (diff) | |
download | binutils-redhat-93585c782510a1c5c9010b5e330c2ee3483df692.tar.gz |
* 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/testsuite/ld-h8300')
-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 |
6 files changed, 194 insertions, 5 deletions
diff --git a/ld/testsuite/ld-h8300/h8300.exp b/ld/testsuite/ld-h8300/h8300.exp index 3604dfad8e..240c7c3ec2 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 963139d3c9..b79f5c20fc 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 aa82dba2bb..8e096b8386 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 0000000000..ecf1a106ca --- /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 0000000000..915fb79cae --- /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 0000000000..eea9cfdf4a --- /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 |