4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <meta name="generator" content="AsciiDoc 8.6.9">
6 <title>MLRISCLibrary</title>
7 <link rel="stylesheet" href="./asciidoc.css" type="text/css">
8 <link rel="stylesheet" href="./pygments.css" type="text/css">
11 <script type="text/javascript" src="./asciidoc.js"></script>
12 <script type="text/javascript">
17 <link rel="stylesheet" href="./mlton.css" type="text/css">
19 <body class="article">
21 <div id="banner-home">
22 <a href="./Home">MLton 20180207</a>
26 <h1>MLRISCLibrary</h1>
30 <div class="sectionbody">
31 <div class="paragraph"><p>The <a href="http://www.cs.nyu.edu/leunga/www/MLRISC/Doc/html/index.html">MLRISC
32 Library</a> is a framework for retargetable and optimizing compiler back
33 ends. The MLRISC Library is distributed with SML/NJ. Due to
34 differences between SML/NJ and MLton, this library will not work
35 out-of-the box with MLton.</p></div>
36 <div class="paragraph"><p>As of 20180119, MLton includes a port of the MLRISC Library
37 synchronized with SML/NJ version 110.82.</p></div>
41 <h2 id="_usage">Usage</h2>
42 <div class="sectionbody">
43 <div class="ulist"><ul>
46 You can import a sub-library of the MLRISC Library into an MLB file with:
48 <table class="tableblock frame-all grid-all"
52 <col style="width:50%;">
53 <col style="width:50%;">
56 <th class="tableblock halign-left valign-top" >MLB file</th>
57 <th class="tableblock halign-left valign-top" >Description</th>
62 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/ALPHA.mlb</span></p></td>
63 <td class="tableblock halign-left valign-top" ><p class="tableblock">The ALPHA backend</p></td>
66 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/AMD64.mlb</span></p></td>
67 <td class="tableblock halign-left valign-top" ><p class="tableblock">The AMD64 backend</p></td>
70 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/AMD64-Peephole.mlb</span></p></td>
71 <td class="tableblock halign-left valign-top" ><p class="tableblock">The AMD64 peephole optimizer</p></td>
74 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/CCall.mlb</span></p></td>
75 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
78 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/CCall-sparc.mlb</span></p></td>
79 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
82 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/CCall-x86-64.mlb</span></p></td>
83 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
86 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/CCall-x86.mlb</span></p></td>
87 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
90 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/Control.mlb</span></p></td>
91 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
94 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/Graphs.mlb</span></p></td>
95 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
98 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/HPPA.mlb</span></p></td>
99 <td class="tableblock halign-left valign-top" ><p class="tableblock">The HPPA backend</p></td>
102 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/IA32.mlb</span></p></td>
103 <td class="tableblock halign-left valign-top" ><p class="tableblock">The IA32 backend</p></td>
106 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/IA32-Peephole.mlb</span></p></td>
107 <td class="tableblock halign-left valign-top" ><p class="tableblock">The IA32 peephole optimizer</p></td>
110 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/Lib.mlb</span></p></td>
111 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
114 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/MLRISC.mlb</span></p></td>
115 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
118 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/MLTREE.mlb</span></p></td>
119 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
122 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/Peephole.mlb</span></p></td>
123 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
126 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/PPC.mlb</span></p></td>
127 <td class="tableblock halign-left valign-top" ><p class="tableblock">The PPC backend</p></td>
130 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/RA.mlb</span></p></td>
131 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
134 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/SPARC.mlb</span></p></td>
135 <td class="tableblock halign-left valign-top" ><p class="tableblock">The Sparc backend</p></td>
138 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/StagedAlloc.mlb</span></p></td>
139 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
142 <td class="tableblock halign-left valign-top" ><p class="tableblock"><span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/Visual.mlb</span></p></td>
143 <td class="tableblock halign-left valign-top" ><p class="tableblock"></p></td>
150 If you are porting a project from SML/NJ’s <a href="CompilationManager">CompilationManager</a> to
151 MLton’s <a href="MLBasis"> ML Basis system</a> using <span class="monospaced">cm2mlb</span>, note that the
152 following map is included by default:
154 <div class="listingblock">
155 <div class="content monospaced">
156 <pre># MLRISC Library
157 $SMLNJ-MLRISC $(SML_LIB)/mlrisc-lib/mlb</pre>
159 <div class="paragraph"><p>This will automatically convert a <span class="monospaced">$SMLNJ-MLRISC/MLRISC.cm</span> import in
160 an input <span class="monospaced">.cm</span> file into a <span class="monospaced">$(SML_LIB)/mlrisc-lib/mlb/MLRISC.mlb</span>
161 import in the output <span class="monospaced">.mlb</span> file.</p></div>
167 <h2 id="_details">Details</h2>
168 <div class="sectionbody">
169 <div class="paragraph"><p>The following changes were made to the MLRISC Library, in addition to
170 deriving the <span class="monospaced">.mlb</span> files from the <span class="monospaced">.cm</span> files:</p></div>
171 <div class="ulist"><ul>
174 eliminate sequential <span class="monospaced">withtype</span> expansions: Most could be rewritten as a sequence of type definitions and datatype definitions.
179 eliminate higher-order functors: Every higher-order functor definition and application could be uncurried in the obvious way.
184 eliminate <span class="monospaced">where <str> = <str></span>: Quite painful to expand out all the flexible types in the respective structures. Furthermore, many of the implied type equalities aren’t needed, but it’s too hard to pick out the right ones.
189 <span class="monospaced">library/array-noneq.sml</span> (added, not exported): Implements <span class="monospaced">signature ARRAY_NONEQ</span>, similar to <span class="monospaced">signature ARRAY</span> from the <a href="BasisLibrary">Basis Library</a>, but replacing the latter’s <span class="monospaced">eqtype 'a array = 'a array</span> and <span class="monospaced">type 'a vector = 'a Vector.vector</span> with <span class="monospaced">type 'a array</span> and <span class="monospaced">type 'a vector</span>. Thus, array-like containers may match <span class="monospaced">ARRAY_NONEQ</span>, whereas only the pervasive <span class="monospaced">'a array</span> container may math <span class="monospaced">ARRAY</span>. (SML/NJ’s implementation of <span class="monospaced">signature ARRAY</span> omits the type realizations.)
194 <span class="monospaced">library/dynamic-array.sml</span> and <span class="monospaced">library/hash-array.sml</span> (modifed): Replace <span class="monospaced">include ARRAY</span> with <span class="monospaced">include ARRAY_NONEQ</span>; see above.
201 <h2 id="_patch">Patch</h2>
202 <div class="sectionbody">
203 <div class="ulist"><ul>
206 <a href="https://github.com/MLton/mlton/blob/master/lib/mlrisc-lib/MLRISC.patch"><span class="monospaced">MLRISC.patch</span></a>
213 <div id="footnotes"><hr></div>
215 <div id="footer-text">
217 <div id="footer-badges">