blob: d427fe31e993df4a9f13e675735414b31493dbe5 [file] [log] [blame]
<html lang="en">
<head>
<title>H8/300 - Untitled</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Untitled">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Machine-Dependent.html#Machine-Dependent" title="Machine Dependent">
<link rel="next" href="i960.html#i960" title="i960">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU linker LD
(Sourcery G++ Lite 2011.03-41)
version 2.20.51.
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included in the
section entitled ``GNU Free Documentation License''.-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="H8%2f300"></a>
<a name="H8_002f300"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="i960.html#i960">i960</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Machine-Dependent.html#Machine-Dependent">Machine Dependent</a>
<hr>
</div>
<h3 class="section">4.1 <samp><span class="command">ld</span></samp> and the H8/300</h3>
<p><a name="index-H8_002f300-support-559"></a>For the H8/300, <samp><span class="command">ld</span></samp> can perform these global optimizations when
you specify the &lsquo;<samp><span class="samp">--relax</span></samp>&rsquo; command-line option.
<a name="index-relaxing-on-H8_002f300-560"></a>
<dl><dt><em>relaxing address modes</em><dd><samp><span class="command">ld</span></samp> finds all <code>jsr</code> and <code>jmp</code> instructions whose
targets are within eight bits, and turns them into eight-bit
program-counter relative <code>bsr</code> and <code>bra</code> instructions,
respectively.
<p><a name="index-synthesizing-on-H8_002f300-561"></a><br><dt><em>synthesizing instructions</em><dd><!-- FIXME: specifically mov.b, or any mov instructions really? -->
<samp><span class="command">ld</span></samp> finds all <code>mov.b</code> 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.
(That is: the linker turns &lsquo;<samp><span class="samp">mov.b </span><code>@</code><var>aa</var><span class="samp">:16</span></samp>&rsquo; into
&lsquo;<samp><span class="samp">mov.b </span><code>@</code><var>aa</var><span class="samp">:8</span></samp>&rsquo; whenever the address <var>aa</var> is in the
top page of memory).
<br><dt><em>bit manipulation instructions</em><dd><samp><span class="command">ld</span></samp> finds all bit manipulation instructions like <code>band, bclr,
biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst, bxor</code>
which use 32 bit and 16 bit absolute address form, but refer to the top
page of memory, and changes them to use the 8 bit address form.
(That is: the linker turns &lsquo;<samp><span class="samp">bset #xx:3,</span><code>@</code><var>aa</var><span class="samp">:32</span></samp>&rsquo; into
&lsquo;<samp><span class="samp">bset #xx:3,</span><code>@</code><var>aa</var><span class="samp">:8</span></samp>&rsquo; whenever the address <var>aa</var> is in
the top page of memory).
<br><dt><em>system control instructions</em><dd><samp><span class="command">ld</span></samp> finds all <code>ldc.w, stc.w</code> instructions which use the
32 bit absolute address form, but refer to the top page of memory, and
changes them to use 16 bit address form.
(That is: the linker turns &lsquo;<samp><span class="samp">ldc.w </span><code>@</code><var>aa</var><span class="samp">:32,ccr</span></samp>&rsquo; into
&lsquo;<samp><span class="samp">ldc.w </span><code>@</code><var>aa</var><span class="samp">:16,ccr</span></samp>&rsquo; whenever the address <var>aa</var> is in
the top page of memory).
</dl>
</body></html>