|
@@ -2317,12 +2317,8 @@ integer constant (called an \emph{immediate value}\index{subject}{immediate
|
|
\MID \key{r11} \MID \key{r12} \MID \key{r13}
|
|
\MID \key{r11} \MID \key{r12} \MID \key{r13}
|
|
\MID \key{r14} \MID \key{r15}}
|
|
\MID \key{r14} \MID \key{r15}}
|
|
|
|
|
|
-\begin{figure}[tp]
|
|
|
|
-\fbox{
|
|
|
|
-\begin{minipage}{0.96\textwidth}
|
|
|
|
-{\if\edition\racketEd
|
|
|
|
-\[
|
|
|
|
-\begin{array}{lcl}
|
|
|
|
|
|
+\newcommand{\GrammarXInt}{
|
|
|
|
+\begin{array}{rcl}
|
|
\Reg &::=& \allregisters{} \\
|
|
\Reg &::=& \allregisters{} \\
|
|
\Arg &::=& \key{\$}\Int \MID \key{\%}\Reg \MID \Int\key{(}\key{\%}\Reg\key{)}\\
|
|
\Arg &::=& \key{\$}\Int \MID \key{\%}\Reg \MID \Int\key{(}\key{\%}\Reg\key{)}\\
|
|
\Instr &::=& \key{addq} \; \Arg\key{,} \Arg \MID
|
|
\Instr &::=& \key{addq} \; \Arg\key{,} \Arg \MID
|
|
@@ -2332,10 +2328,22 @@ integer constant (called an \emph{immediate value}\index{subject}{immediate
|
|
\key{callq} \; \mathit{label} \MID
|
|
\key{callq} \; \mathit{label} \MID
|
|
\key{retq} \MID
|
|
\key{retq} \MID
|
|
\key{jmp}\,\itm{label} \MID \\
|
|
\key{jmp}\,\itm{label} \MID \\
|
|
- && \itm{label}\key{:}\; \Instr \\
|
|
|
|
|
|
+ && \itm{label}\key{:}\; \Instr
|
|
|
|
+\end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+\begin{figure}[tp]
|
|
|
|
+\fbox{
|
|
|
|
+\begin{minipage}{0.96\textwidth}
|
|
|
|
+{\if\edition\racketEd
|
|
|
|
+\[
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \GrammarXInt \\
|
|
|
|
+\begin{array}{lcl}
|
|
\LangXIntM{} &::= & \key{.globl main}\\
|
|
\LangXIntM{} &::= & \key{.globl main}\\
|
|
& & \key{main:} \; \Instr\ldots
|
|
& & \key{main:} \; \Instr\ldots
|
|
\end{array}
|
|
\end{array}
|
|
|
|
+\end{array}
|
|
\]
|
|
\]
|
|
\fi}
|
|
\fi}
|
|
{\if\edition\pythonEd
|
|
{\if\edition\pythonEd
|
|
@@ -2600,12 +2608,8 @@ register allocation (Chapter~\ref{ch:register-allocation-Lvar}).
|
|
\MID \skey{r11} \MID \skey{r12} \MID \skey{r13}
|
|
\MID \skey{r11} \MID \skey{r12} \MID \skey{r13}
|
|
\MID \skey{r14} \MID \skey{r15}}
|
|
\MID \skey{r14} \MID \skey{r15}}
|
|
|
|
|
|
-\begin{figure}[tp]
|
|
|
|
-\fbox{
|
|
|
|
-\begin{minipage}{0.98\textwidth}
|
|
|
|
-\small
|
|
|
|
-{\if\edition\racketEd
|
|
|
|
-\[
|
|
|
|
|
|
+
|
|
|
|
+\newcommand{\ASTXIntRacket}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
\Reg &::=& \allregisters{} \\
|
|
\Reg &::=& \allregisters{} \\
|
|
\Arg &::=& \IMM{\Int} \MID \REG{\Reg}
|
|
\Arg &::=& \IMM{\Int} \MID \REG{\Reg}
|
|
@@ -2618,9 +2622,22 @@ register allocation (Chapter~\ref{ch:register-allocation-Lvar}).
|
|
&\MID& \CALLQ{\itm{label}}{\itm{int}}
|
|
&\MID& \CALLQ{\itm{label}}{\itm{int}}
|
|
\MID \RETQ{}
|
|
\MID \RETQ{}
|
|
\MID \JMP{\itm{label}} \\
|
|
\MID \JMP{\itm{label}} \\
|
|
-\Block &::= & \BLOCK{\itm{info}}{\LP\Instr\ldots\RP} \\
|
|
|
|
|
|
+\Block &::= & \BLOCK{\itm{info}}{\LP\Instr\ldots\RP}
|
|
|
|
+\end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+\begin{figure}[tp]
|
|
|
|
+\fbox{
|
|
|
|
+\begin{minipage}{0.98\textwidth}
|
|
|
|
+\small
|
|
|
|
+{\if\edition\racketEd
|
|
|
|
+\[
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \ASTXIntRacket \\
|
|
|
|
+\begin{array}{lcl}
|
|
\LangXIntM{} &::= & \XPROGRAM{\itm{info}}{\LP\LP\itm{label} \,\key{.}\, \Block \RP\ldots\RP}
|
|
\LangXIntM{} &::= & \XPROGRAM{\itm{info}}{\LP\LP\itm{label} \,\key{.}\, \Block \RP\ldots\RP}
|
|
\end{array}
|
|
\end{array}
|
|
|
|
+\end{array}
|
|
\]
|
|
\]
|
|
\fi}
|
|
\fi}
|
|
{\if\edition\pythonEd
|
|
{\if\edition\pythonEd
|
|
@@ -7381,7 +7398,8 @@ in Figure~\ref{fig:c1-syntax}.
|
|
\fi}
|
|
\fi}
|
|
\end{minipage}
|
|
\end{minipage}
|
|
}
|
|
}
|
|
-\caption{The concrete syntax of the \LangCIf{} intermediate language.}
|
|
|
|
|
|
+\caption{The concrete syntax of the \LangCIf{} intermediate language,
|
|
|
|
+ an extension of \LangCVar{} (Figure~\ref{fig:c0-concrete-syntax}).}
|
|
\label{fig:c1-concrete-syntax}
|
|
\label{fig:c1-concrete-syntax}
|
|
\end{figure}
|
|
\end{figure}
|
|
|
|
|
|
@@ -7457,30 +7475,32 @@ $\Atm$.
|
|
\end{array}
|
|
\end{array}
|
|
\]
|
|
\]
|
|
|
|
|
|
-
|
|
|
|
-\begin{figure}[tp]
|
|
|
|
-\fbox{
|
|
|
|
-\begin{minipage}{0.96\textwidth}
|
|
|
|
-\[
|
|
|
|
|
|
+\newcommand{\GrammarXIf}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
\itm{bytereg} &::=& \key{ah} \MID \key{al} \MID \key{bh} \MID \key{bl}
|
|
\itm{bytereg} &::=& \key{ah} \MID \key{al} \MID \key{bh} \MID \key{bl}
|
|
\MID \key{ch} \MID \key{cl} \MID \key{dh} \MID \key{dl} \\
|
|
\MID \key{ch} \MID \key{cl} \MID \key{dh} \MID \key{dl} \\
|
|
-\Arg &::=& \gray{ \key{\$}\Int \MID \key{\%}\Reg \MID \Int\key{(}\key{\%}\Reg\key{)} } \MID \key{\%}\itm{bytereg}\\
|
|
|
|
|
|
+\Arg &::=& \key{\%}\itm{bytereg}\\
|
|
\itm{cc} & ::= & \key{e} \MID \key{ne} \MID \key{l} \MID \key{le} \MID \key{g} \MID \key{ge} \\
|
|
\itm{cc} & ::= & \key{e} \MID \key{ne} \MID \key{l} \MID \key{le} \MID \key{g} \MID \key{ge} \\
|
|
-\Instr &::=& \gray{ \key{addq} \; \Arg\key{,} \Arg \MID
|
|
|
|
- \key{subq} \; \Arg\key{,} \Arg \MID
|
|
|
|
- \key{negq} \; \Arg \MID \key{movq} \; \Arg\key{,} \Arg \MID } \\
|
|
|
|
- && \gray{ \key{callq} \; \itm{label} \MID
|
|
|
|
- \key{pushq}\;\Arg \MID \key{popq}\;\Arg \MID \key{retq} \MID \racket{\key{jmp}\,\itm{label} \MID} } \python{\key{jmp}\,\itm{label} \MID} \\
|
|
|
|
- && \racket{\gray{ \itm{label}\key{:}\; \Instr }}\python{\itm{label}\key{:}\; \Instr}
|
|
|
|
- \MID \key{xorq}~\Arg\key{,}~\Arg
|
|
|
|
|
|
+\Instr &::=& \key{xorq}~\Arg\key{,}~\Arg
|
|
\MID \key{cmpq}~\Arg\key{,}~\Arg \MID \\
|
|
\MID \key{cmpq}~\Arg\key{,}~\Arg \MID \\
|
|
&& \key{set}cc~\Arg
|
|
&& \key{set}cc~\Arg
|
|
\MID \key{movzbq}~\Arg\key{,}~\Arg
|
|
\MID \key{movzbq}~\Arg\key{,}~\Arg
|
|
\MID \key{j}cc~\itm{label}
|
|
\MID \key{j}cc~\itm{label}
|
|
- \\
|
|
|
|
-\LangXIfM{} &::= & \gray{ \key{.globl main} }\\
|
|
|
|
- & & \gray{ \key{main:} \; \Instr\ldots }
|
|
|
|
|
|
+\end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+\begin{figure}[tp]
|
|
|
|
+\fbox{
|
|
|
|
+\begin{minipage}{0.96\textwidth}
|
|
|
|
+\[
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \gray{\GrammarXInt} \\ \hline
|
|
|
|
+ \GrammarXIf \\
|
|
|
|
+\begin{array}{lcl}
|
|
|
|
+\LangXIfM{} &::= & \key{.globl main} \\
|
|
|
|
+ & & \key{main:} \; \Instr\ldots
|
|
|
|
+\end{array}
|
|
\end{array}
|
|
\end{array}
|
|
\]
|
|
\]
|
|
\end{minipage}
|
|
\end{minipage}
|
|
@@ -7489,31 +7509,32 @@ $\Atm$.
|
|
\label{fig:x86-1-concrete}
|
|
\label{fig:x86-1-concrete}
|
|
\end{figure}
|
|
\end{figure}
|
|
|
|
|
|
-\begin{figure}[tp]
|
|
|
|
-\fbox{
|
|
|
|
-\begin{minipage}{0.98\textwidth}
|
|
|
|
-\small
|
|
|
|
-{\if\edition\racketEd
|
|
|
|
-\[
|
|
|
|
|
|
+\newcommand{\ASTXIfRacket}{
|
|
\begin{array}{lcl}
|
|
\begin{array}{lcl}
|
|
\itm{bytereg} &::=& \key{ah} \MID \key{al} \MID \key{bh} \MID \key{bl}
|
|
\itm{bytereg} &::=& \key{ah} \MID \key{al} \MID \key{bh} \MID \key{bl}
|
|
\MID \key{ch} \MID \key{cl} \MID \key{dh} \MID \key{dl} \\
|
|
\MID \key{ch} \MID \key{cl} \MID \key{dh} \MID \key{dl} \\
|
|
-\Arg &::=& \gray{\IMM{\Int} \MID \REG{\Reg} \MID \DEREF{\Reg}{\Int}}
|
|
|
|
- \MID \BYTEREG{\itm{bytereg}} \\
|
|
|
|
|
|
+\Arg &::=& \BYTEREG{\itm{bytereg}} \\
|
|
\itm{cc} & ::= & \key{e} \MID \key{l} \MID \key{le} \MID \key{g} \MID \key{ge} \\
|
|
\itm{cc} & ::= & \key{e} \MID \key{l} \MID \key{le} \MID \key{g} \MID \key{ge} \\
|
|
-\Instr &::=& \gray{ \BININSTR{\code{addq}}{\Arg}{\Arg}
|
|
|
|
- \MID \BININSTR{\code{subq}}{\Arg}{\Arg} } \\
|
|
|
|
- &\MID& \gray{ \BININSTR{\code{'movq}}{\Arg}{\Arg}
|
|
|
|
- \MID \UNIINSTR{\code{negq}}{\Arg} } \\
|
|
|
|
- &\MID& \gray{ \CALLQ{\itm{label}}{\itm{int}} \MID \RETQ{} }\\
|
|
|
|
- &\MID& \gray{ \PUSHQ{\Arg} \MID \POPQ{\Arg} \MID \JMP{\itm{label}} } \\
|
|
|
|
- &\MID& \BININSTR{\code{xorq}}{\Arg}{\Arg}
|
|
|
|
|
|
+\Instr &::=& \BININSTR{\code{xorq}}{\Arg}{\Arg}
|
|
\MID \BININSTR{\code{cmpq}}{\Arg}{\Arg}\\
|
|
\MID \BININSTR{\code{cmpq}}{\Arg}{\Arg}\\
|
|
&\MID& \BININSTR{\code{set}}{\itm{cc}}{\Arg}
|
|
&\MID& \BININSTR{\code{set}}{\itm{cc}}{\Arg}
|
|
\MID \BININSTR{\code{movzbq}}{\Arg}{\Arg}\\
|
|
\MID \BININSTR{\code{movzbq}}{\Arg}{\Arg}\\
|
|
- &\MID& \JMPIF{'\itm{cc}'}{\itm{label}} \\
|
|
|
|
-\Block &::= & \gray{\BLOCK{\itm{info}}{\LP\Instr\ldots\RP}} \\
|
|
|
|
-\LangXIfM{} &::= & \gray{\XPROGRAM{\itm{info}}{\LP\LP\itm{label} \,\key{.}\, \Block \RP\ldots\RP}}
|
|
|
|
|
|
+ &\MID& \JMPIF{'\itm{cc}'}{\itm{label}}
|
|
|
|
+\end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+ \begin{figure}[tp]
|
|
|
|
+\fbox{
|
|
|
|
+\begin{minipage}{0.98\textwidth}
|
|
|
|
+\small
|
|
|
|
+{\if\edition\racketEd
|
|
|
|
+\[
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \gray{\ASTXIntRacket} \\ \hline
|
|
|
|
+ \ASTXIfRacket \\
|
|
|
|
+\begin{array}{lcl}
|
|
|
|
+\LangXIfM{} &::= & \XPROGRAM{\itm{info}}{\LP\LP\itm{label} \,\key{.}\, \Block \RP\ldots\RP}
|
|
|
|
+\end{array}
|
|
\end{array}
|
|
\end{array}
|
|
\]
|
|
\]
|
|
\fi}
|
|
\fi}
|
|
@@ -7708,7 +7729,15 @@ particularly important to \textbf{not} replace its condition with a
|
|
temporary variable because that would interfere with the generation of
|
|
temporary variable because that would interfere with the generation of
|
|
high-quality output in the \code{explicate\_control} pass.
|
|
high-quality output in the \code{explicate\_control} pass.
|
|
|
|
|
|
-
|
|
|
|
|
|
+\newcommand{\LifMonadASTRacket}{
|
|
|
|
+\begin{array}{rcl}
|
|
|
|
+\Atm &::=& \BOOL{\itm{bool}}\\
|
|
|
|
+\Exp &::=& \UNIOP{\key{not}}{\Atm}
|
|
|
|
+ \MID \BINOP{\itm{cmp}}{\Atm}{\Atm}
|
|
|
|
+ \MID \IF{\Exp}{\Exp}{\Exp}
|
|
|
|
+\end{array}
|
|
|
|
+}
|
|
|
|
+
|
|
\newcommand{\LifMonadASTPython}{
|
|
\newcommand{\LifMonadASTPython}{
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
%% \itm{binaryop} &::=& \code{Add()} \MID \code{Sub()} \\
|
|
%% \itm{binaryop} &::=& \code{Add()} \MID \code{Sub()} \\
|
|
@@ -7728,15 +7757,13 @@ high-quality output in the \code{explicate\_control} pass.
|
|
\begin{minipage}{0.96\textwidth}
|
|
\begin{minipage}{0.96\textwidth}
|
|
{\if\edition\racketEd
|
|
{\if\edition\racketEd
|
|
\[
|
|
\[
|
|
|
|
+\begin{array}{l}
|
|
|
|
+ \gray{\LvarMonadASTRacket} \\ \hline
|
|
|
|
+ \LifMonadASTRacket \\
|
|
\begin{array}{rcl}
|
|
\begin{array}{rcl}
|
|
-Atm &::=& \gray{ \INT{\Int} \MID \VAR{\Var} } \MID \BOOL{\itm{bool}}\\
|
|
|
|
-\Exp &::=& \gray{ \Atm \MID \READ{} } \\
|
|
|
|
- &\MID& \gray{ \NEG{\Atm} \MID \ADD{\Atm}{\Atm} } \\
|
|
|
|
- &\MID& \gray{ \LET{\Var}{\Exp}{\Exp} } \\
|
|
|
|
- &\MID& \UNIOP{\key{not}}{\Atm} \\
|
|
|
|
- &\MID& \BINOP{\itm{cmp}}{\Atm}{\Atm} \MID \IF{\Exp}{\Exp}{\Exp} \\
|
|
|
|
\LangIfANF &::=& \PROGRAM{\code{()}}{\Exp}
|
|
\LangIfANF &::=& \PROGRAM{\code{()}}{\Exp}
|
|
\end{array}
|
|
\end{array}
|
|
|
|
+\end{array}
|
|
\]
|
|
\]
|
|
\fi}
|
|
\fi}
|
|
{\if\edition\pythonEd
|
|
{\if\edition\pythonEd
|
|
@@ -7752,7 +7779,8 @@ Atm &::=& \gray{ \INT{\Int} \MID \VAR{\Var} } \MID \BOOL{\itm{bool}}\\
|
|
\fi}
|
|
\fi}
|
|
\end{minipage}
|
|
\end{minipage}
|
|
}
|
|
}
|
|
-\caption{\LangIfANF{} is \LangIf{} in monadic normal form.}
|
|
|
|
|
|
+\caption{\LangIfANF{} is \LangIf{} in monadic normal form
|
|
|
|
+ (extends \LangVarANF in Figure~\ref{fig:Lvar-anf-syntax}).}
|
|
\label{fig:Lif-anf-syntax}
|
|
\label{fig:Lif-anf-syntax}
|
|
\end{figure}
|
|
\end{figure}
|
|
|
|
|