comparison Paper/nobu-prosym.tex @ 7:3d1135b3519c

add eps files
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 18 Nov 2011 18:11:00 +0900
parents ea43a580129b
children de1193768ef9
comparison
equal deleted inserted replaced
6:ea43a580129b 7:3d1135b3519c
227 \subsubsection{expand\_call} 227 \subsubsection{expand\_call}
228 ある関数が Tail Call Elimination を行えるかどうかは expand\_call 関数で判断される. 228 ある関数が Tail Call Elimination を行えるかどうかは expand\_call 関数で判断される.
229 expand\_call 関数内でチェックされる Tail Call Elimination が行える条件は以下になる. 229 expand\_call 関数内でチェックされる Tail Call Elimination が行える条件は以下になる.
230 230
231 \begin{itemize} 231 \begin{itemize}
232 \item[caller 側と callee 側の返す値の型が一致している.] 232 \item caller 側と callee 側の返す値の型が一致している.
233 \item[関数呼び出しがリターンの直前に行われている.] 233 \item 関数呼び出しがリターンの直前に行われている.
234 \item[呼出先関数の引数に用いられるスタックサイズが呼出元関数のそれより少ない.] 234 \item 呼出先関数の引数に用いられるスタックサイズが呼出元関数のそれより少ない.
235 \item[] 235 \item[]
236 \end{itemize} 236 \end{itemize}
237 237
238 238
239 CbC の実装では上記の条件を,以下の様にして解決させている. 239 CbC の実装では上記の条件を,以下の様にして解決させている.
240 240
241 \begin{itemize} 241 \begin{itemize}
242 \item[呼び出す関数がコードセグメントの場合返す値の型チェックを行わない.] 242 \item 呼び出す関数がコードセグメントの場合返す値の型チェックを行わない.
243 \item[コードセグメントへの継続を Generic Tree で表す際に,return の情報も直後に持たせる.] 243 \item コードセグメントへの継続を Generic Tree で表す際に,return の情報も直後に持たせる.
244 \item[スタックサイズは決め打ちで行う.] 244 \item スタックサイズは決め打ちで行う.
245 \item[] 245 \item[]
246 \end{itemize} 246 \end{itemize}
247 247
248 スタックサイズを決め打ちで行うことで,ベースポインタを変えずにスタックを扱うことができる. 248 スタックサイズを決め打ちで行うことで,ベースポインタを変えずにスタックを扱うことができる.
249 これも CbC の1つの特徴である. 249 これも CbC の1つの特徴である.
303 プログラムだと言える. 303 プログラムだと言える.
304 比較を行うのは以下のアーキテクチャと OS になる. 304 比較を行うのは以下のアーキテクチャと OS になる.
305 305
306 %\begin{description} 306 %\begin{description}
307 \begin{itemize} 307 \begin{itemize}
308 \item[x86/Linux] 308 \item x86/Linux
309 \item[x86/OS X] 309 \item x86/OS X
310 \end{itemize} 310 \end{itemize}
311 %\end{description} 311 %\end{description}
312
312 また,比較を行うプログラムは最適化(-O0 オプション)を行わないものと, 313 また,比較を行うプログラムは最適化(-O0 オプション)を行わないものと,
313 速度最適化(-O2 -fomit-frame-pointer)を行うものの2つ, 314 速度最適化(-O2 -fomit-frame-pointer)を行うものの2つ,
314 それと -m32 オプションと -m64 オプションをつけたものそれぞれで行う. 315 それと -m32 オプションと -m64 オプションをつけたものそれぞれで行う.
315 316
316 表\ref{tab:speed-mc-vs-gcc-nonopt}が最適化無し, 317 表\ref{tab:speed-mc-vs-gcc-nonopt}が最適化無し,