|
@@ -11941,8 +11941,11 @@ movq |$\itm{rhs}'$|, |$8(n+1)$|(%r11)
|
|
|
\fi}
|
|
|
\end{minipage}
|
|
|
\end{center}
|
|
|
-The $\itm{lhs}'$, $\itm{tup}'$, and $\itm{rhs}'$ are obtained by
|
|
|
-translating $\itm{tup}$ and $\itm{rhs}$ to x86. The move of $\itm{tup}'$ to
|
|
|
+\racket{The $\itm{lhs}'$, $\itm{tup}'$, and $\itm{rhs}'$}
|
|
|
+\python{The $\itm{tup}'$ and $\itm{rhs}'$}
|
|
|
+are obtained by translating from \LangCVec{} to x86.
|
|
|
+%
|
|
|
+The move of $\itm{tup}'$ to
|
|
|
register \code{r11} ensures that offset expression
|
|
|
\code{$-8(n+1)$(\%r11)} contains a register operand. This requires
|
|
|
removing \code{r11} from consideration by the register allocating.
|
|
@@ -11952,7 +11955,6 @@ Why not use \code{rax} instead of \code{r11}? Suppose we instead used
|
|
|
\begin{lstlisting}
|
|
|
movq |$\itm{tup}'$|, %rax
|
|
|
movq |$\itm{rhs}'$|, |$8(n+1)$|(%rax)
|
|
|
-movq $0, |$\itm{lhs}'$|
|
|
|
\end{lstlisting}
|
|
|
Next, suppose that $\itm{rhs}'$ ends up as a stack location, so
|
|
|
\code{patch\_instructions} would insert a move through \code{rax}
|
|
@@ -11961,7 +11963,6 @@ as follows.
|
|
|
movq |$\itm{tup}'$|, %rax
|
|
|
movq |$\itm{rhs}'$|, %rax
|
|
|
movq %rax, |$8(n+1)$|(%rax)
|
|
|
-movq $0, |$\itm{lhs}'$|
|
|
|
\end{lstlisting}
|
|
|
But the above sequence of instructions does not work because we're
|
|
|
trying to use \code{rax} for two different values ($\itm{tup}'$ and
|