소스 검색

update AST for pushq and popq

Jeremy Siek 3 년 전
부모
커밋
62c647f08c
2개의 변경된 파일13개의 추가작업 그리고 9개의 파일을 삭제
  1. 10 6
      book.tex
  2. 3 3
      defs.tex

+ 10 - 6
book.tex

@@ -25,7 +25,7 @@
 
 \def\racketEd{0}
 \def\pythonEd{1}
-\def\edition{1}
+\def\edition{0}
 
 % material that is specific to the Racket edition of the book
 \newcommand{\racket}[1]{{\if\edition\racketEd{#1}\fi}}
@@ -2303,8 +2303,10 @@ integer constant (called an \emph{immediate value}\index{subject}{immediate
 \Instr &::=& \key{addq} \; \Arg\key{,} \Arg \MID
       \key{subq} \; \Arg\key{,} \Arg \MID
       \key{negq} \; \Arg \MID \key{movq} \; \Arg\key{,} \Arg \MID \\
-  &&  \key{callq} \; \mathit{label} \MID
-      \key{pushq}\;\Arg \MID \key{popq}\;\Arg \MID \key{retq} \MID \key{jmp}\,\itm{label} \\
+  &&  \key{pushq}\;\Arg \MID \key{popq}\;\Arg \MID 
+      \key{callq} \; \mathit{label} \MID
+      \key{retq} \MID
+      \key{jmp}\,\itm{label} \MID \\
   && \itm{label}\key{:}\; \Instr \\
 \LangXIntM{} &::= & \key{.globl main}\\
       &    & \key{main:} \; \Instr\ldots
@@ -2570,10 +2572,12 @@ register allocation (Chapter~\ref{ch:register-allocation-Lvar}).
    \MID \DEREF{\Reg}{\Int} \\
 \Instr &::=& \BININSTR{\code{addq}}{\Arg}{\Arg} 
        \MID \BININSTR{\code{subq}}{\Arg}{\Arg} \\
-       &\MID& \BININSTR{\code{movq}}{\Arg}{\Arg}
+      &\MID& \BININSTR{\code{movq}}{\Arg}{\Arg}
        \MID \UNIINSTR{\code{negq}}{\Arg}\\
-       &\MID& \CALLQ{\itm{label}}{\itm{int}} \MID \RETQ{} 
-       \MID \PUSHQ{\Arg} \MID \POPQ{\Arg} \MID \JMP{\itm{label}} \\
+      &\MID& \PUSHQ{\Arg} \MID \POPQ{\Arg} \\
+      &\MID& \CALLQ{\itm{label}}{\itm{int}}
+       \MID \RETQ{}
+       \MID \JMP{\itm{label}}  \\
 \Block &::= & \BLOCK{\itm{info}}{\LP\Instr\ldots\RP} \\
 \LangXIntM{} &::= & \XPROGRAM{\itm{info}}{\LP\LP\itm{label} \,\key{.}\, \Block \RP\ldots\RP}
 \end{array}

+ 3 - 3
defs.tex

@@ -309,9 +309,9 @@
 \newcommand{\DEREF}[2]{\key{(Deref}~#1~#2\key{)}}
 \newcommand{\BININSTR}[3]{\key{(Instr}~#1~\key{(}#2~#3\key{))}}
 \newcommand{\UNIINSTR}[2]{\key{(Instr}~#1~\key{(}#2\key{))}}
-\newcommand{\CALLQ}[2]{\key{(Callq}~#1~#2\key{)}}
-\newcommand{\PUSHQ}[1]{\key{(Pushq}~#1\key{)}}
-\newcommand{\POPQ}[1]{\key{(Popq}~#1\key{)}}
+\newcommand{\CALLQ}[2]{\LP\key{Callq}~#1~#2\RP}
+\newcommand{\PUSHQ}[1]{\LP\key{Instr}~\key{pushq}~\LP#1\RP\RP}
+\newcommand{\POPQ}[1]{\LP\key{Instr}~\key{popq}~\LP#1\RP\RP}
 \newcommand{\JMP}[1]{\key{(Jmp}~#1\key{)}}
 \newcommand{\JMPIF}[2]{\key{(JmpIf}~#1~#2\key{)}}
 \newcommand{\RETQ}{\key{(Retq)}}