Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 6e204a966e8c42d976f99a1700ce5f20 > files > 2918

ghc-7.4.2-4.mga5.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Instruction</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Instruction.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Instruction</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span>  <a href="#t:RegUsage">RegUsage</a>  = <a href="#v:RU">RU</a> [<a href="Reg.html#t:Reg">Reg</a>] [<a href="Reg.html#t:Reg">Reg</a>]</li><li class="src short"><a href="#v:noUsage">noUsage</a> :: <a href="Instruction.html#t:RegUsage">RegUsage</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:NatCmm">NatCmm</a> instr = <a href="Cmm.html#t:GenCmmGroup">GenCmmGroup</a> <a href="Cmm.html#t:CmmStatics">CmmStatics</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Cmm.html#t:CmmStatics">CmmStatics</a>) (<a href="OldCmm.html#t:ListGraph">ListGraph</a> instr)</li><li class="src short"><span class="keyword">type</span> <a href="#t:NatCmmDecl">NatCmmDecl</a> statics instr = <a href="Cmm.html#t:GenCmmDecl">GenCmmDecl</a> statics (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Cmm.html#t:CmmStatics">CmmStatics</a>) (<a href="OldCmm.html#t:ListGraph">ListGraph</a> instr)</li><li class="src short"><span class="keyword">type</span> <a href="#t:NatBasicBlock">NatBasicBlock</a> instr = <a href="OldCmm.html#t:GenBasicBlock">GenBasicBlock</a> instr</li><li class="src short"><span class="keyword">class</span>  <a href="#t:Instruction">Instruction</a> instr  <span class="keyword">where</span><ul class="subs"><li><a href="#v:regUsageOfInstr">regUsageOfInstr</a> :: instr -&gt; <a href="Instruction.html#t:RegUsage">RegUsage</a></li><li><a href="#v:patchRegsOfInstr">patchRegsOfInstr</a> :: instr -&gt; (<a href="Reg.html#t:Reg">Reg</a> -&gt; <a href="Reg.html#t:Reg">Reg</a>) -&gt; instr</li><li><a href="#v:isJumpishInstr">isJumpishInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:jumpDestsOfInstr">jumpDestsOfInstr</a> :: instr -&gt; [<a href="BlockId.html#t:BlockId">BlockId</a>]</li><li><a href="#v:patchJumpInstr">patchJumpInstr</a> :: instr -&gt; (<a href="BlockId.html#t:BlockId">BlockId</a> -&gt; <a href="BlockId.html#t:BlockId">BlockId</a>) -&gt; instr</li><li><a href="#v:mkSpillInstr">mkSpillInstr</a> :: <a href="Platform.html#t:Platform">Platform</a> -&gt; <a href="Reg.html#t:Reg">Reg</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; instr</li><li><a href="#v:mkLoadInstr">mkLoadInstr</a> :: <a href="Platform.html#t:Platform">Platform</a> -&gt; <a href="Reg.html#t:Reg">Reg</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; instr</li><li><a href="#v:takeDeltaInstr">takeDeltaInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:isMetaInstr">isMetaInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:mkRegRegMoveInstr">mkRegRegMoveInstr</a> :: <a href="Platform.html#t:Platform">Platform</a> -&gt; <a href="Reg.html#t:Reg">Reg</a> -&gt; <a href="Reg.html#t:Reg">Reg</a> -&gt; instr</li><li><a href="#v:takeRegRegMoveInstr">takeRegRegMoveInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Reg.html#t:Reg">Reg</a>, <a href="Reg.html#t:Reg">Reg</a>)</li><li><a href="#v:mkJumpInstr">mkJumpInstr</a> :: <a href="BlockId.html#t:BlockId">BlockId</a> -&gt; [instr]</li></ul></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:RegUsage" class="def">RegUsage</a>  </p><div class="doc"><p>Holds a list of source and destination registers used by a
      particular instruction.
</p><p>Machine registers that are pre-allocated to stgRegs are filtered
      out, because they are uninteresting from a register allocation
      standpoint.  (We wouldn't want them to end up on the free list!)
</p><p>As far as we are concerned, the fixed registers simply don't exist
      (for allocation purposes, anyway).
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:RU" class="def">RU</a> [<a href="Reg.html#t:Reg">Reg</a>] [<a href="Reg.html#t:Reg">Reg</a>]</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:noUsage" class="def">noUsage</a> :: <a href="Instruction.html#t:RegUsage">RegUsage</a></p><div class="doc"><p>No regs read or written to.
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:NatCmm" class="def">NatCmm</a> instr = <a href="Cmm.html#t:GenCmmGroup">GenCmmGroup</a> <a href="Cmm.html#t:CmmStatics">CmmStatics</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Cmm.html#t:CmmStatics">CmmStatics</a>) (<a href="OldCmm.html#t:ListGraph">ListGraph</a> instr)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:NatCmmDecl" class="def">NatCmmDecl</a> statics instr = <a href="Cmm.html#t:GenCmmDecl">GenCmmDecl</a> statics (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Cmm.html#t:CmmStatics">CmmStatics</a>) (<a href="OldCmm.html#t:ListGraph">ListGraph</a> instr)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:NatBasicBlock" class="def">NatBasicBlock</a> instr = <a href="OldCmm.html#t:GenBasicBlock">GenBasicBlock</a> instr</p></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:Instruction" class="def">Instruction</a> instr  <span class="keyword">where</span></p><div class="doc"><p>Common things that we can do with instructions, on all architectures.
      These are used by the shared parts of the native code generator,
      specifically the register allocators.
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:regUsageOfInstr" class="def">regUsageOfInstr</a> :: instr -&gt; <a href="Instruction.html#t:RegUsage">RegUsage</a></p><div class="doc"><p>Get the registers that are being used by this instruction.
      regUsage doesn't need to do any trickery for jumps and such.
      Just state precisely the regs read and written by that insn.
      The consequences of control flow transfers, as far as register
      allocation goes, are taken care of by the register allocator.
</p></div><p class="src"><a name="v:patchRegsOfInstr" class="def">patchRegsOfInstr</a> :: instr -&gt; (<a href="Reg.html#t:Reg">Reg</a> -&gt; <a href="Reg.html#t:Reg">Reg</a>) -&gt; instr</p><div class="doc"><p>Apply a given mapping to all the register references in this
      instruction.
</p></div><p class="src"><a name="v:isJumpishInstr" class="def">isJumpishInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Checks whether this instruction is a jump/branch instruction.
      One that can change the flow of control in a way that the
      register allocator needs to worry about.
</p></div><p class="src"><a name="v:jumpDestsOfInstr" class="def">jumpDestsOfInstr</a> :: instr -&gt; [<a href="BlockId.html#t:BlockId">BlockId</a>]</p><div class="doc"><p>Give the possible destinations of this jump instruction.
      Must be defined for all jumpish instructions.
</p></div><p class="src"><a name="v:patchJumpInstr" class="def">patchJumpInstr</a> :: instr -&gt; (<a href="BlockId.html#t:BlockId">BlockId</a> -&gt; <a href="BlockId.html#t:BlockId">BlockId</a>) -&gt; instr</p><div class="doc"><p>Change the destination of this jump instruction.
      Used in the linear allocator when adding fixup blocks for join
      points.
</p></div><p class="src"><a name="v:mkSpillInstr" class="def">mkSpillInstr</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Platform.html#t:Platform">Platform</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Reg.html#t:Reg">Reg</a></td><td class="doc"><p>the reg to spill
</p></td></tr><tr><td class="src">-&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></td><td class="doc"><p>the current stack delta
</p></td></tr><tr><td class="src">-&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></td><td class="doc"><p>spill slot to use
</p></td></tr><tr><td class="src">-&gt; instr</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>An instruction to spill a register into a spill slot.
</p></div><p class="src"><a name="v:mkLoadInstr" class="def">mkLoadInstr</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Platform.html#t:Platform">Platform</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Reg.html#t:Reg">Reg</a></td><td class="doc"><p>the reg to reload.
</p></td></tr><tr><td class="src">-&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></td><td class="doc"><p>the current stack delta
</p></td></tr><tr><td class="src">-&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></td><td class="doc"><p>the spill slot to use
</p></td></tr><tr><td class="src">-&gt; instr</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>An instruction to reload a register from a spill slot.
</p></div><p class="src"><a name="v:takeDeltaInstr" class="def">takeDeltaInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><div class="doc"><p>See if this instruction is telling us the current C stack delta
</p></div><p class="src"><a name="v:isMetaInstr" class="def">isMetaInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Check whether this instruction is some meta thing inserted into
      the instruction stream for other purposes.
</p><p>Not something that has to be treated as a real machine instruction
      and have its registers allocated.
</p><p>eg, comments, delta, ldata, etc.
</p></div><p class="src"><a name="v:mkRegRegMoveInstr" class="def">mkRegRegMoveInstr</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Platform.html#t:Platform">Platform</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Reg.html#t:Reg">Reg</a></td><td class="doc"><p>source register
</p></td></tr><tr><td class="src">-&gt; <a href="Reg.html#t:Reg">Reg</a></td><td class="doc"><p>destination register
</p></td></tr><tr><td class="src">-&gt; instr</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Copy the value in a register to another one.
      Must work for all register classes.
</p></div><p class="src"><a name="v:takeRegRegMoveInstr" class="def">takeRegRegMoveInstr</a> :: instr -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Reg.html#t:Reg">Reg</a>, <a href="Reg.html#t:Reg">Reg</a>)</p><div class="doc"><p>Take the source and destination from this reg -&gt; reg move instruction
      or Nothing if it's not one
</p></div><p class="src"><a name="v:mkJumpInstr" class="def">mkJumpInstr</a> :: <a href="BlockId.html#t:BlockId">BlockId</a> -&gt; [instr]</p><div class="doc"><p>Make an unconditional jump instruction.
      For architectures with branch delay slots, its ok to put
      a NOP after the jump. Don't fill the delay slot with an
      instruction that references regs or you'll confuse the
      linear allocator.
</p></div></div><div class="subs instances"><p id="control.i:Instruction" class="caption collapser" onclick="toggleSection('i:Instruction')">Instances</p><div id="section.i:Instruction" class="show"><table><tr><td class="src"><a href="Instruction.html#t:Instruction">Instruction</a> <a href="X86-Instr.html#t:Instr">Instr</a></td><td class="doc"><p>Instruction instance for x86 instruction set.
</p></td></tr><tr><td class="src"><a href="Instruction.html#t:Instruction">Instruction</a> <a href="SPARC-Instr.html#t:Instr">Instr</a></td><td class="doc"><p>instance for sparc instruction set
</p></td></tr><tr><td class="src"><a href="Instruction.html#t:Instruction">Instruction</a> <a href="PPC-Instr.html#t:Instr">Instr</a></td><td class="doc"><p>Instruction instance for powerpc
</p></td></tr><tr><td class="src"><a href="Instruction.html#t:Instruction">Instruction</a> instr =&gt; <a href="Instruction.html#t:Instruction">Instruction</a> (<a href="RegAlloc-Liveness.html#t:InstrSR">InstrSR</a> instr)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>