<!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>Reg</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_Reg.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">Reg</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>An architecture independent description of a register. This needs to stay architecture independent because it is used by NCGMonad and the register allocators, which are shared by all architectures. </p></div></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">type</span> <a href="#t:RegNo">RegNo</a> = <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:Reg">Reg</a> <ul class="subs"><li>= <a href="#v:RegVirtual">RegVirtual</a> !<a href="Reg.html#t:VirtualReg">VirtualReg</a> </li><li>| <a href="#v:RegReal">RegReal</a> !<a href="Reg.html#t:RealReg">RealReg</a> </li></ul></li><li class="src short"><a href="#v:regPair">regPair</a> :: <a href="Reg.html#t:RegNo">RegNo</a> -> <a href="Reg.html#t:RegNo">RegNo</a> -> <a href="Reg.html#t:Reg">Reg</a></li><li class="src short"><a href="#v:regSingle">regSingle</a> :: <a href="Reg.html#t:RegNo">RegNo</a> -> <a href="Reg.html#t:Reg">Reg</a></li><li class="src short"><a href="#v:isRealReg">isRealReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:takeRealReg">takeRealReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Reg.html#t:RealReg">RealReg</a></li><li class="src short"><a href="#v:isVirtualReg">isVirtualReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:takeVirtualReg">takeVirtualReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:VirtualReg">VirtualReg</a> <ul class="subs"><li>= <a href="#v:VirtualRegI">VirtualRegI</a> !<a href="Unique.html#t:Unique">Unique</a> </li><li>| <a href="#v:VirtualRegHi">VirtualRegHi</a> !<a href="Unique.html#t:Unique">Unique</a> </li><li>| <a href="#v:VirtualRegF">VirtualRegF</a> !<a href="Unique.html#t:Unique">Unique</a> </li><li>| <a href="#v:VirtualRegD">VirtualRegD</a> !<a href="Unique.html#t:Unique">Unique</a> </li><li>| <a href="#v:VirtualRegSSE">VirtualRegSSE</a> !<a href="Unique.html#t:Unique">Unique</a> </li></ul></li><li class="src short"><a href="#v:renameVirtualReg">renameVirtualReg</a> :: <a href="Unique.html#t:Unique">Unique</a> -> <a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="Reg.html#t:VirtualReg">VirtualReg</a></li><li class="src short"><a href="#v:classOfVirtualReg">classOfVirtualReg</a> :: <a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="RegClass.html#t:RegClass">RegClass</a></li><li class="src short"><a href="#v:getHiVirtualRegFromLo">getHiVirtualRegFromLo</a> :: <a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="Reg.html#t:VirtualReg">VirtualReg</a></li><li class="src short"><a href="#v:getHiVRegFromLo">getHiVRegFromLo</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="Reg.html#t:Reg">Reg</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:RealReg">RealReg</a> <ul class="subs"><li>= <a href="#v:RealRegSingle">RealRegSingle</a> !<a href="Reg.html#t:RegNo">RegNo</a> </li><li>| <a href="#v:RealRegPair">RealRegPair</a> !<a href="Reg.html#t:RegNo">RegNo</a> !<a href="Reg.html#t:RegNo">RegNo</a> </li></ul></li><li class="src short"><a href="#v:regNosOfRealReg">regNosOfRealReg</a> :: <a href="Reg.html#t:RealReg">RealReg</a> -> [<a href="Reg.html#t:RegNo">RegNo</a>]</li><li class="src short"><a href="#v:realRegsAlias">realRegsAlias</a> :: <a href="Reg.html#t:RealReg">RealReg</a> -> <a href="Reg.html#t:RealReg">RealReg</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:liftPatchFnToRegReg">liftPatchFnToRegReg</a> :: (<a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="Reg.html#t:RealReg">RealReg</a>) -> <a href="Reg.html#t:Reg">Reg</a> -> <a href="Reg.html#t:Reg">Reg</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:RegNo" class="def">RegNo</a> = <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><div class="doc"><p>An identifier for a primitive real machine register. </p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Reg" class="def">Reg</a> </p><div class="doc"><p>A register, either virtual or real </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:RegVirtual" class="def">RegVirtual</a> !<a href="Reg.html#t:VirtualReg">VirtualReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:RegReal" class="def">RegReal</a> !<a href="Reg.html#t:RealReg">RealReg</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:Reg" class="caption collapser" onclick="toggleSection('i:Reg')">Instances</p><div id="section.i:Reg" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Reg.html#t:Reg">Reg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> <a href="Reg.html#t:Reg">Reg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Reg.html#t:Reg">Reg</a></td><td class="doc"><p>Print a reg in a generic manner If you want the architecture specific names, then use the pprReg function from the appropriate Ppr module. </p></td></tr><tr><td class="src"><a href="Unique.html#t:Uniquable">Uniquable</a> <a href="Reg.html#t:Reg">Reg</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:regPair" class="def">regPair</a> :: <a href="Reg.html#t:RegNo">RegNo</a> -> <a href="Reg.html#t:RegNo">RegNo</a> -> <a href="Reg.html#t:Reg">Reg</a></p></div><div class="top"><p class="src"><a name="v:regSingle" class="def">regSingle</a> :: <a href="Reg.html#t:RegNo">RegNo</a> -> <a href="Reg.html#t:Reg">Reg</a></p></div><div class="top"><p class="src"><a name="v:isRealReg" class="def">isRealReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:takeRealReg" class="def">takeRealReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Reg.html#t:RealReg">RealReg</a></p></div><div class="top"><p class="src"><a name="v:isVirtualReg" class="def">isVirtualReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:takeVirtualReg" class="def">takeVirtualReg</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:VirtualReg" class="def">VirtualReg</a> </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:VirtualRegI" class="def">VirtualRegI</a> !<a href="Unique.html#t:Unique">Unique</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:VirtualRegHi" class="def">VirtualRegHi</a> !<a href="Unique.html#t:Unique">Unique</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:VirtualRegF" class="def">VirtualRegF</a> !<a href="Unique.html#t:Unique">Unique</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:VirtualRegD" class="def">VirtualRegD</a> !<a href="Unique.html#t:Unique">Unique</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:VirtualRegSSE" class="def">VirtualRegSSE</a> !<a href="Unique.html#t:Unique">Unique</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:VirtualReg" class="caption collapser" onclick="toggleSection('i:VirtualReg')">Instances</p><div id="section.i:VirtualReg" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Unique.html#t:Uniquable">Uniquable</a> <a href="Reg.html#t:VirtualReg">VirtualReg</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:renameVirtualReg" class="def">renameVirtualReg</a> :: <a href="Unique.html#t:Unique">Unique</a> -> <a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="Reg.html#t:VirtualReg">VirtualReg</a></p></div><div class="top"><p class="src"><a name="v:classOfVirtualReg" class="def">classOfVirtualReg</a> :: <a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="RegClass.html#t:RegClass">RegClass</a></p></div><div class="top"><p class="src"><a name="v:getHiVirtualRegFromLo" class="def">getHiVirtualRegFromLo</a> :: <a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="Reg.html#t:VirtualReg">VirtualReg</a></p></div><div class="top"><p class="src"><a name="v:getHiVRegFromLo" class="def">getHiVRegFromLo</a> :: <a href="Reg.html#t:Reg">Reg</a> -> <a href="Reg.html#t:Reg">Reg</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:RealReg" class="def">RealReg</a> </p><div class="doc"><p>RealRegs are machine regs which are available for allocation, in the usual way. We know what class they are, because that's part of the processor's architecture. </p><p>RealRegPairs are pairs of real registers that are allocated together to hold a larger value, such as with Double regs on SPARC. </p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:RealRegSingle" class="def">RealRegSingle</a> !<a href="Reg.html#t:RegNo">RegNo</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:RealRegPair" class="def">RealRegPair</a> !<a href="Reg.html#t:RegNo">RegNo</a> !<a href="Reg.html#t:RegNo">RegNo</a></td><td class="doc empty"> </td></tr></table></div><div class="subs instances"><p id="control.i:RealReg" class="caption collapser" onclick="toggleSection('i:RealReg')">Instances</p><div id="section.i:RealReg" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Reg.html#t:RealReg">RealReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> <a href="Reg.html#t:RealReg">RealReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Reg.html#t:RealReg">RealReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="Reg.html#t:RealReg">RealReg</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Unique.html#t:Uniquable">Uniquable</a> <a href="Reg.html#t:RealReg">RealReg</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:regNosOfRealReg" class="def">regNosOfRealReg</a> :: <a href="Reg.html#t:RealReg">RealReg</a> -> [<a href="Reg.html#t:RegNo">RegNo</a>]</p></div><div class="top"><p class="src"><a name="v:realRegsAlias" class="def">realRegsAlias</a> :: <a href="Reg.html#t:RealReg">RealReg</a> -> <a href="Reg.html#t:RealReg">RealReg</a> -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:liftPatchFnToRegReg" class="def">liftPatchFnToRegReg</a> :: (<a href="Reg.html#t:VirtualReg">VirtualReg</a> -> <a href="Reg.html#t:RealReg">RealReg</a>) -> <a href="Reg.html#t:Reg">Reg</a> -> <a href="Reg.html#t:Reg">Reg</a></p><div class="doc"><p>The patch function supplied by the allocator maps VirtualReg to RealReg regs, but sometimes we want to apply it to plain old Reg. </p></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>