Mercurial > hg > Papers > 2011 > nobu-prosym
changeset 84:fb5994f49abd
modify
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 07 Jan 2012 09:16:58 +0900 |
parents | 07c5304622ac |
children | 7ed352ddae10 |
files | presen/index.html |
diffstat | 1 files changed, 118 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/index.html Sat Jan 07 08:27:46 2012 +0900 +++ b/presen/index.html Sat Jan 07 09:16:58 2012 +0900 @@ -656,7 +656,7 @@ } </pre> </small> - <p><small>Intel64 ではレジスタが増えていてfastcallは標準でつくようになっている。</small></p> + <p><small>Intel64 ではレジスタが増えていてfastcallの機能は標準でつくようになっている。</small></p> </div> <!-- PAGE --> <div class="slide"> @@ -665,6 +665,7 @@ <li>fastcall属性の付与によりMicro-C版に速度で勝るようになった。</li> </ul> <br> + <br> <table width=100% border=1 class="center"> <caption><small>引数渡しに使われるレジスタの数(gcc)</small></caption> <tr> @@ -801,22 +802,6 @@ --> </div> <!-- PAGE --> -<!-- - <div class="slide"> - <h1>CbCの実装:環境付き継続</h1> - <table border=1 width=100%> - <tr> - <td width=50%><small>生成されるTree</small></td> - <td width=50%><small>生成する為のコード</small></td> - </tr> - <tr class="srctr"> - <td class="srctd"> - <img src="./pix/STATEMENT_LIST_1.png" style="height: 10em;"> - </td> - </tr> - </table> - </div> ---> <!-- PAGE --> <div class="slide"> <h1>環境付き継続:実装の問題</h1> @@ -901,9 +886,8 @@ <img src="./pix/linux_conv.png" style="height:10em"> </td> </table> - <li><small>GCC版の最適化無しの場合、引数を全て一時変数に代入するという処理が入る。 - その為に明らかに遅くなっていることが分かる。</small></li> - <li><small>だがGCCの最適化有りの場合はMicro-C版よりも早い。</small></li> + <li><small>最適化無しだと、引数を全て一時変数に代入するGCCは遅い。 + だが、最適化にかければ不要な代入は減りMicro-C版より早くなる。</small></li> </div> <!-- PAGE --> <div class="slide"> @@ -1018,6 +1002,120 @@ </small> </div> <!-- PAGE --> + <div class="slide"> + <h1>環境付き継続</h1> + <table border=1 width=100%> + <tr> + <td width=50%><small>生成する為のコード</small></td> + <td width=50%><small>生成されるTree</small></td> + </tr> + <tr class="srctr"> + <td class="srctd"> + <pre class="srcbox" style="width:25em;"> + + case RID_CbC_RET: +{ + tree value, stmt, label, tlab, decl; + c_parser_consume_token (parser); + + stmt = c_begin_stmt_expr (); + cbc_return_f = c_parser_peek_token (parser)->value; + location_t location = c_parser_peek_token (parser)->location; + + /* create label. (__label__ _cbc_exit0;) */ + label = get_identifier ("_cbc_exit0"); + tlab = declare_label (label); + C_DECLARED_LABEL_FLAG (tlab) = 1; + add_stmt (build_stmt (location, DECL_EXPR, tlab)); + + /* declare retval. (int retval;) */ + tree decl_cond = + build_decl (location, VAR_DECL, get_identifier ("retval"), + TREE_TYPE (TREE_TYPE (current_function_decl))); + TREE_STATIC (decl_cond) = 1; + TREE_USED (decl_cond) = 1; + + /* Use thread-local */ + DECL_TLS_MODEL (decl_cond) = decl_default_tls_model (decl_cond); + DECL_NONLOCAL (decl_cond) = 1; + add_stmt (build_stmt(location, DECL_EXPR, pushdecl (decl_cond))); + + /* define nested function. */ + decl = + cbc_finish_nested_function (location, label, decl_cond); + TREE_USED(decl) = 1; + + /* define if-ed goto label and return statement. */ + cbc_finish_labeled_goto (location, label, decl_cond); + + /* get pointer to nested function. */ + value = build_addr (decl , current_function_decl); + TREE_USED (current_function_decl) = 1; + SET_EXPR_LOCATION (value, location); + add_stmt (value); + + TREE_SIDE_EFFECTS (stmt) = 1; + expr.value = c_finish_stmt_expr (location, stmt); + expr.original_code = ERROR_MARK; +} + </pre> + </td> + + + <td class="srctd"> + <img src="./pix/STATEMENT_LIST_1.png" style="height: 10em;"> + </td> + + </tr> + </table> + </div> + <!--PAGE--> + <div class="slide"> + <h1>環境付き継続</h1> + <table border=1 width=100%> + <tr> + <td><small>生成しているコード</small></td> + <td><small>生成されるTree</small></td> + </tr> + <tr class="srctr"> + <td width=50% class="srctd"> + <pre class="srcbox" style="width:25em;"> + +//goto c1(__return, __environment); +goto c1(({ + __label__ _cbc_exit0; + static int retval; + void _cbc_internal_return(int retval_, void *_envp) { + retval = retval_; + goto _cbc_exit0; + } + if (0) { + _cbc_exit0: + return retval; + } + _cbc_internal_return; + }), __environment); + </pre> + </td> + <td class="srctd"> + <img src="./pix/STATEMENT_LIST_1.png" style="height: 10em;"> + </td> + </tr> + </table> + </div> + <!--PAGE--> + <div class="slide"> + <h1></h1> + <li>引数の並びの上書きにコピーが無い。</li> + <pre style="font-size:28px;"> +__code cs_a(int a, int b) { + goto cs_b(b,a); +} + </pre> + <img src="./pix/cs_prog.png"> + </div> + <!--PAGE--> + </div> </body> </html>