# HG changeset patch # User Kaito Tokumori # Date 1455007253 -32400 # Node ID 5f0a5e8cb3cc5692a1f9d60ae0db42390201eb64 # Parent 7feb530077af99df18ef5a5ff87cacd4c80476cd change style diff -r 7feb530077af -r 5f0a5e8cb3cc paper/chapter5.tex --- a/paper/chapter5.tex Tue Feb 09 17:19:52 2016 +0900 +++ b/paper/chapter5.tex Tue Feb 09 17:40:53 2016 +0900 @@ -1,6 +1,54 @@ \chapter{評価・考察} 今回の研究により実装した LLVM/clang 上での CbC コンパイラの評価を試みる. 評価は, コンパイルして出力されたアセンブリコードの確認と, CbC プログラムを Micro-C, GCC, LLVM でコンパイルして得られたプログラムの実行速度を計測により行う. \section{アセンブリコードの評価} +以下のリスト \ref{evalCbC},\ref{evalAsmB}, \ref{evalAsmA} はそれぞれコンパイル前の CbC の code segment とコンパイル後のアセンブリコードを示している. \ref{evalAsmB} は omit leaf frame pointer 強制前のアセンブリコード, \ref{evalAsmA} は omit leaf frame pointer 強制後のアセンブリコードである. +\begin{lstlisting}[frame=lrbt,label=evalCbC,caption={コンパイル前}] +__code f(int i,stack sp) { + int k,j; + k = 3+i; + goto f_g0(i,k,sp); +} +\end{lstlisting} + +\begin{lstlisting}[frame=lrbt,label=evalAsmB,caption={omit leaf frame pointer 強制前}] +_f: ## @f + .cfi_startproc +## BB#0: ## %entry + pushq %rbp +Ltmp9: + .cfi_def_cfa_offset 16 +Ltmp10: + .cfi_offset %rbp, -16 + movq %rsp, %rbp +Ltmp11: + .cfi_def_cfa_register %rbp + movl %edi, %eax + addl $3, %eax + movq %rsi, -8(%rbp) ## 8-byte Spill + movl %eax, %esi + movq -8(%rbp), %rdx ## 8-byte Reload + popq %rbp + jmp _f_g0 ## TAILCALL + .cfi_endproc +\end{lstlisting} + +\begin{lstlisting}[frame=lrbt,label=evalAsmB,caption={omit leaf frame pointer 強制後}] +_f: ## @f + .cfi_startproc +## BB#0: ## %entry + subq $24, %rsp +Ltmp9: + .cfi_def_cfa_offset 32 + movl %edi, %eax + addl $3, %eax + movq %rsi, 16(%rsp) ## 8-byte Spill + movl %eax, %esi + movq 16(%rsp), %rdx ## 8-byte Reload + addq $24, %rsp + jmp _f_g0 ## TAILCALL + .cfi_endproc +\end{lstlisting} + \section{性能評価} \section{LLVM, clangの利点} diff -r 7feb530077af -r 5f0a5e8cb3cc paper/master_paper.pdf Binary file paper/master_paper.pdf has changed