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>