annotate presen/index.html @ 74:275073032132

modify
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 03 Jan 2012 19:21:51 +0900
parents 9250ac87c2c7
children 454ddda8d306
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 <html xmlns="http://www.w3.org/1999/xhtml">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 <head>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
7 <style type="text/css">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
8 tr.srctr {
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
9 font-size:28px;
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
10 }
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
11 td.srctd {
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
12 height:17em;
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
13 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
14 pre.srcbox {
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
15 height: 100%;
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
16 overflow: scroll;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
17 }
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
18 .src{
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
19 overflow: scroll;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
20 width: 90%;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
21 height: 60%;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
22 }
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 .center {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 margin-left: auto;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 margin-right: auto;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 text-align: center;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 .textcenter {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 text-align: center;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 }
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 .taninaritop {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 margin: auto;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 width: 95%;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 font-weight: bold;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 }
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 </style>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 <title>2012/ 1/ 7</title>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 <!-- metadata -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 <meta name="generator" content="S5" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 <meta name="version" content="S5 1.1" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 <meta name="presdate" content="20120107" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 <meta name="author" content="Nobuyasu Oshiro" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 <meta name="company" content="University of the Ryukyu" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 <!-- meta temporary -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 <meta http-equiv="Content-Script-Type" content="text/javascript" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 <meta http-equiv="Content-Style-Type" content="text/css" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 <!-- configuration parameters -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 <meta name="defaultView" content="slideshow" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 <meta name="controlVis" content="hidden" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 <!-- configuration extensions -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 <meta name="tranSitions" content="true" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 <meta name="fadeDuration" content="500" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 <meta name="incrDuration" content="250" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 <!-- configuration autoplay extension -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 <meta name="autoMatic" content="false" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 <meta name="playLoop" content="true" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 <meta name="playDelay" content="10" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 <!-- configuration audio extension -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 <meta name="audioSupport" content="false" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 <meta name="audioVolume" content="100" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 <meta name="audioError" content="false" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 <!-- configuration audio debug -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 <meta name="audioDebug" content="false" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 <!-- style sheet links -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 <link rel="stylesheet" href="ui/default_utf/slides.css" type="text/css" media="projection" id="slideProj" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 <link rel="stylesheet" href="ui/default_utf/outline.css" type="text/css" media="screen" id="outlineStyle" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 <link rel="stylesheet" href="ui/default_utf/print.css" type="text/css" media="print" id="slidePrint" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 <link rel="stylesheet" href="ui/default_utf/opera.css" type="text/css" media="projection" id="operaFix" />
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 <!-- embedded styles -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 <style type="text/css" media="all">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 .imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;}
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 #anim {width: 33%; height: 320px; position: relative;}
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 #anim img {position: absolute; top: 0px; left: 0px;}
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 </style>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 <!-- S5 JS -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 <script src="ui/default_utf/slides.js" type="text/javascript"></script>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 </head>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 <body>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 <div class="layout">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 <div id="controls"><!-- DO NOT EDIT --></div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 <div id="currentSlide"><!-- DO NOT EDIT --></div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 <div id="header"></div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 <div id="footer">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 <h1>プログラミングシンポジウム: 2012/ 1/ 7</h1>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 <h2>並列信頼研</h2>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 <div class="presentation">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 <div class="slide">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 <h1>Continuation based Cの GCC 4.6 上の実装について</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 <h3></h3>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 <li>大城 信康</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 <h4><a href="http://ie.u-ryukyu.ac.jp/" rel="external">琉球大学 並列信頼研究室</a></h4>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 <div class="handout"></div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 <div class="slide">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 <h1>目的と背景(1)</h1>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
103 <li>当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)を開発している。</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 <li>コードセグメントは並列実行の単位として使うことができ、プログラムの正しさを示す単位としても使用することができる。</li>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
105 <li>Many Core での並列実行を高い性能と高い信頼性で実現することができると考えている。</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 <div class="slide">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 <h1>目的と背景(2)</h1>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
110 <li>CbC のコンパイラは2001年に Micro-C 版、2008年には GCC-4.2 をベースとしたコンパイラが開発された。</li>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
111 <li>GCC をベースとした CbC コンパイラは、修正・追加されていく最適化の機能を使用する為に、 GCC のアップデートに合わせ変更する必要がある。</li>
58
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
112 <li>本研究ではCbC コンパイラを GCC-4.6 へとアップデートを行った。 </li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 <div class="slide">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 <h1>発表内容</h1>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 <ol>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 <li>CbC の紹介</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 <li>GCC でのコンパイルの流れ</li>
58
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
120 <font color="red">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
121 <li>CbC の実装</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
122 </font>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 <!--
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 <ul>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 <li>Tail Call Elimination</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 <li>goto シンタックスの追加</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 <li>環境付き継続</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 </ul>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 <li>Micro-C との性能比較</li>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
131 <!--
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 <li>mercurial を用いたアップデートの方法</li>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
133 -->
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 <li>まとめ</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 <ol>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 <div class="slide">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 <h1>Continuation based C </h1>
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
140 <h2>コードセグメント単位での記述と継続を基本としたプログラミング言語。</h2>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
141 <ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
142 <li>コードセグメント:CbCにおけるプログラムの基本単位</li>
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
143 <ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
144 <li>C の関数よりも細かい単位になる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
145 <li>コードセグメントの末尾処理で別のコードセグメントへ継続(goto)することでCbCのプログラムは続いていく。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
146 <li>Cから関数コールとループ制御が取り除かれた形となる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
147 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
148 <p class="center">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
149 <img src="./pix/codesegment.png" style="height:6em;">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
150 </p>
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
151 </ul>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 <div class="slide">
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
155 <h1>Continuation based C </h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
156 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
157 <li>継続(C言語):現在の処理を実行していく為の情報</li>
58
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
158 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
159 <li>続く命令のアドレス</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
160 <li>命令に必要なデータ</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
161 <li>スタックに積まれている値(環境)</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
162 </ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
163 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
164 <li class="incremental">CbC: 関数コールが無い -> 呼び出し元への復帰がない</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
165 <ul class="incremental">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
166 <li>CbCの継続:軽量継続(light-weight continuation)</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
167 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
168 <li>Cの継続から環境を除外</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
169 <li>続く命令とその命令に必要なデータのみ</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
170 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
171 </ul>
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
172 </div>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
173 <!-- PAGE -->
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
174 <div class="slide">
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
175 <h1>Continuation Based C (軽量継続)</h1>
59
6ef99d3e66b2 modify light-weight continuation
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
176 <p style=" margin-right:auto; margin-left:auto;">
66
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
177 <table width=90% class="center" border=1>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
178 <tr>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
179 <td><small>Cの関数呼び出し</small></td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
180 <td><small>CbCの継続</></small></td>
66
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
181 </tr>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
182 <tr>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
183 <td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
184 <img class="scale" src="./pix/func_call.png" style="height: 6em;">
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
185 </td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
186 <td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
187 <img class="scale" src="./pix/cs_stack.png" style="height: 6em;">
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
188 </td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
189 </tr>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
190 </table>
59
6ef99d3e66b2 modify light-weight continuation
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
191 </p>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
192 <li>コードセグメントへの継続はcallではなくjmp命令で行われる</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
193 <li>スタックに載るデータは1つのコードセグメントの必要なデータのみ。</li>
59
6ef99d3e66b2 modify light-weight continuation
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
194 </div>
6ef99d3e66b2 modify light-weight continuation
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
195 <!-- PAGE -->
58
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
196 <div class="slide">
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 <h1>Continuation based C </h1>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
198 <table width=100% border=1>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
199 <caption><small>階乗を求めるCbCのプログラム</small></caption>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
200 <tr class="srctr">
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 <td width=50%>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
202 <pre class="srcbox">
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
203
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 __code print_factorial(int prod) {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 printf("factorial = %d\n",prod);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 exit(0);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 }
58
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
208
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 __code factorial0(int prod, int x) {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 if ( x >= 1) {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 goto factorial0(prod*x, x-1);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 }else{
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 goto print_factorial(prod);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 }
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 }
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 </pre>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 </td>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 <td>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
219 <pre class="srcbox">
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
220
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 __code factorial(int x) {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 goto factorial0(1, x);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 }
58
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
224
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 int main(int argc, char **argv) {
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 int i;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 i = atoi(argv[1]);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 goto factorial(i);
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 return 0;
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 }
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 </pre>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 </td>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 </tr>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 </table>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
235 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
236 <li><small>__code キーワードによるコードセグメントの宣言</small></li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
237 <li><small>goto によるコードセグメントへの継続(Cの関数呼び出しと同等)</small></li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
238 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
239 <li class="incremental"><small>以上がCbCについての紹介となる。</small></li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 <div class="slide">
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
243 <h1>GCC</h1>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
244 <li>本来はGnu Compiler Collectionのことを指すが、
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
245 <br>ここで扱うのはGnu C Compiler(cc1)になる。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
246 <ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
247 <li class="incremental">GCCではアセンブラ言語を出力するまでに読み込まれたソースコードは次の4つの中間言語へと変換される。</li>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
248 </ul>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
249 </div>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
250 <!-- PAGE -->
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
251 <div class="slide">
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
252 <h1>GCC</h1>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
253 <ol>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
254 <li>Generic Tree:ソースコードを構文木の形に直したもの</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
255 <li>GIMPLE: Generic Treeの命令を簡単にした構文木</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
256 <li>Tree SSA: GIMPLEの中で変数代入を一度しか行わせない形にした構文木</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
257 <li>RTL: レジスタの割り当てといった低レベルの表現でアセンブラとほぼ同じ命令の表現ができる。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
258 </ol>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
259 <li class="incremental">それぞれは次のようなデータを構文木にして持っている。</li>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
260 </div>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
261 <!-- PAGE -->
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
262 <div class="slide">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
263 <h1>GCC</h1>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
264 <table width=100% border=1>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
265 <tr>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
266 <td>Generic(ソースコード)</td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
267 <td>GIMPLE</td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
268 </tr>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
269 <tr class="srctr">
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
270 <td>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
271 <pre class="srcbox">
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
272 void factorial(int x)
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
273 {
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
274 int prod,i;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
275 for(i=1,prod=1; i <= x; i++){
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
276 prod = prod*i;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
277 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
278 print_factorial(prod);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
279 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
280 </pre>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
281 </td>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
282 <td width=50%>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
283 <pre class="srcbox">
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
284 factorial (int x)
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
285 {
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
286 int prod;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
287 int i;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
288
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
289 i = 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
290 prod = 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
291 goto &lt;D.2846&gt;;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
292 &lt;D.2845&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
293 prod = prod * i;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
294 i = i + 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
295 &lt;D.2846&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
296 if (i &lt;= x) goto &lt;D.2845&gt;; else goto &lt;D.2847&gt;;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
297 &lt;D.2847&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
298 print_factorial (prod);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
299 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
300 </pre>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
301 </td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
302 </tr>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
303 </table>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
304 </div>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
305 <!-- PAGE -->
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
306 <div class="slide">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
307 <h1>GCC</h1>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
308 <table border=1 width=100% height=100%>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
309 <tr>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
310 <td width=50%>SSA</td>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
311 <td width=50%>RTL(一部)</td>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
312 </tr>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
313 <tr class="srctr">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
314 <td class="srctd">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
315 <pre class="srcbox">
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
316 factorial (int x)
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
317 {
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
318 int i;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
319 int prod;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
320
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
321 &lt;bb 2&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
322 i_3 = 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
323 prod_4 = 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
324 goto &lt;bb 4&gt;;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
325
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
326 &lt;bb 3&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
327 prod_6 = prod_1 * i_2;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
328 i_7 = i_2 + 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
329
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
330 &lt;bb 4&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
331 # prod_1 = PHI &lt;prod_4(2), prod_6(3)&gt;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
332 # i_2 = PHI &lt;i_3(2), i_7(3)&gt;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
333 if (i_2 &lt;= x_5(D))
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
334 goto &lt;bb 3&gt;;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
335 else
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
336 goto &lt;bb 5&gt;;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
337
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
338 &lt;bb 5&gt;:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
339 print_factorial (prod_1);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
340 return;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
341 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
342
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
343 </pre>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
344 </td>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
345 <td class="srctd">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
346 <pre class="srcbox" style="width:25em;">
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
347 (jump_insn 20 19 21 5 (set (pc)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
348 (if_then_else (le (reg:CCGC 17 flags)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
349 (const_int 0 [0]))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
350 (label_ref 17)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
351 (pc))) factorial.c:12 -1
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
352 (nil)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
353 -> 17)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
354
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
355 (note 21 20 22 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
356
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
357 (insn 22 21 23 6 (set (reg:SI 62)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
358 (mem/c/i:SI (plus:DI (reg/f:DI 54 virtual-stack-vars)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
359 (const_int -4 [0xfffffffffffffffc])) [0 prod+0 S4 A32])) factorial.c:15 -1
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
360 (nil))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
361
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
362 (insn 23 22 24 6 (set (reg:SI 5 di)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
363 (reg:SI 62)) factorial.c:15 -1
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
364 (nil))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
365
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
366 (call_insn 24 23 25 6 (call (mem:QI (symbol_ref:DI ("print_factorial") [flags 0x403] <function_decl 0x146f6b200 print_factorial>) [0 S1 A8])
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
367 (const_int 0 [0])) factorial.c:15 -1
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
368 (nil)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
369 (expr_list:REG_DEP_TRUE (use (reg:SI 5 di))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
370 (nil)))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
371
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
372 (code_label 25 24 26 7 2 "" [0 uses])
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
373
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
374 (note 26 25 0 7 [bb 7] NOTE_INSN_BASIC_BLOCK)
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
375 </pre>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
376 </td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
377 </tr>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
378 </table>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
379 </div>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
380 <!-- PAGE -->
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
381 <div class="slide">
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
382 <h1>GCC</h1>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
383 <p class="center">
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
384 <img src="./pix/ir.png" style="height: 6em;">
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
385 </p>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
386 <li class="incremental">CbCの実装においてはGeneric Tree生成部分とRTLへの変換部分に修正が加えられている。</li>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
387 <li class="incremental">Generic Tree生成部分について詳しく触れてみる。</li>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
388 </div>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
389 <!-- PAGE -->
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
390 <div class="slide">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
391 <h1>GCC:Generic Tree</h1>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
392 <li>Generic Treeではソースコードの内容が FUNCTION_TYPE, CALL_EXPR, MODIFY_EXPR 等と言った形で表される。</li>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
393 <table class="center" width=100% border=1>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
394 <tr>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
395 <td></td>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
396 <td><small>値の代入:MODIFY_EXPR</small></td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
397 <td><small>関数呼び出し:CALL_EXPR</small></td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
398 </t>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
399 <tr>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
400 <td>命令</td>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
401 <td>b = a * 10</td>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
402 <td>func(a,10)</td>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
403 </t>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
404 <tr>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
405 <td><small>Generic<br>Tree</small></td>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
406 <td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
407 <img src="./pix/MODIFY_EXPR.png" style="height: 6em;">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
408 </td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
409 <td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
410 <img src="./pix/CALL_EXPR.png" style="height: 7em;">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
411 </td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
412 </tr>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
413 </table>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
414 <p class="center"><small>Generic Treeでの表現</small></p>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
415 </div>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
416 <!-- PAGE -->
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
417 <div class="slide">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
418 <h1>GCC:Generic Tree</h1>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
419 <li>それぞれの命令はSTATEMENT_LISTでまとめて保持される。</li>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
420 <table width=100% border=1>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
421 <tr>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
422 <td class="center"><small>ソースコード</small></td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
423 <td class="center"><small>Generic Treeでの表現</small></td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
424 </tr>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
425 <tr>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
426 <td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
427 <small>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
428 <pre>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
429 int main() {
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
430 int a, b;
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
431 a = 3;
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
432 b = func(a, 10);
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
433 return b;
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
434 }
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
435 </pre>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
436 </small>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
437 </td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
438 <td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
439 <p class="center">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
440 <img src="./pix/STATEMENT_LIST.png" style="height: 6em;">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
441 </p>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
442 </td>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
443 </tr>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
444 </table>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
445 <li class="incremental">CbCの実装においてこのGeneric Treeの生成を意識していくことになる。</li>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
446 </div>
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
447 <!-- PAGE -->
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
448 <!--
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
449 <div class="slide">
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
450 <h1>GCC</h1>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 <li>GCC についての簡単な説明を行う...</li>
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
452 <li>TODO: NEXT_PASS() の把握</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 <img src="./pix/ir.png" style="height: 6em;">
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 <li>CbCの実装は主に Parser の部分と RTL を生成する部分に行われる。</li>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 </div>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
456 -->
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 <div class="slide">
61
2c543a47737b modify explanation of fastcall
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
459 <h1>CbCの実装</h1>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 <ul>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 <li>シンタックスの追加</li>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
462 <li>末尾除去:Tail Call Elimination(TCE)</li>
61
2c543a47737b modify explanation of fastcall
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
463 <li>レジスタによる引数渡し(fastcall属性の付与)</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 <li>環境付き継続</li>
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
465 <li>__rectype の実装</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 </ul>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
468 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 <div class="slide">
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
470 <h1>CbCの実装:シンタックスの追加</h1>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 <ul>
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
472 <li>__code キーワードでのコードセグメントの宣言</li>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
473 <ul>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
474 <li>__code 用idとkeywordを作成。</li>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
475 <li>戻り値が無い為、コードセグメントは void 型の関数で作成される木と同じ木が作られる。</li>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
476 </ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
477 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
478 <table width=100% border=1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
479 <tr class="srctr">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
480 <td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
481 <pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
482 const struct c_common_resword c_common_reswords[] =
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
483 {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
484 { "_Bool", RID_BOOL, D_CONLY },
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
485 :
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
486 { "__code", RID_CbC_CODE, 0 },
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
487 </pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
488 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
489 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
490 <tr class="srctr">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
491 <td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
492 <pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
493 case RID_CbC_CODE:
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
494 :
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
495 specs->typespec_word = cts_CbC_code;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
496 </pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
497 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
498 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
499 <tr class="srctr">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
500 <td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
501 <pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
502 case cts_CbC_code:
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
503 :
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
504 specs->type = void_type_node;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
505 break;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
506 </pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
507 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
508 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
509 </table>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
510 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
511 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
512 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
513 <h1>CbCの実装:シンタックスの追加</h1>
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
514 <li>goto によるコードセグメントへの継続</li>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
515 <ul>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
516 <li>通常の goto に加え、コードセグメントへ継続する処理を追加。</li>
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
517 <li>コードセグメントへのgotoの後に、returnの処理を自動で追加。</li>
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
518 </ul>
61
2c543a47737b modify explanation of fastcall
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
519 <li class="incremental">追加したgotoシンタックスの実際のソースは次のようになる。</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 <div class="slide">
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
523 <h1>CbCの実装:シンタックスの追加</h1>
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
524 <h2>gotoシンタックスの追加</h2>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
525 <pre class="srcbox" style="font-size:25px; height:17em;">
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
526 case RID_GOTO:
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
527 c_parser_consume_token (parser);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
528 if ( c_parser_next_token_is (parser, CPP_NAME)
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
529 && c_parser_peek_2nd_token (parser)->type == CPP_SEMICOLON )
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
530 {
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
531 stmt = c_finish_goto_label (loc,
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
532 c_parser_peek_token (parser)->value);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
533 c_parser_consume_token (parser);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
534 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
535 else if (c_parser_next_token_is (parser, CPP_MULT))
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
536 {
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
537 tree val;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
538
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
539 c_parser_consume_token (parser);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
540 val = c_parser_expression (parser).value;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
541 mark_exp_read (val);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
542 stmt = c_finish_goto_ptr (loc, val);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
543 }
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
544 else
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
545 expr = c_parser_expr_no_commas (parser, NULL);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
546 if (TREE_CODE(expr.value) == CALL_EXPR )
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
547 {
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
548 location_t loc = c_parser_peek_token (parser)->location;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
549 cbc_replace_arguments (loc, expr.value);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
550 TREE_TYPE(expr.value) = void_type_node;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
551 CbC_IS_CbC_GOTO (expr.value) = 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
552 CALL_EXPR_TAILCALL (expr.value) = 1;
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
553 add_stmt(expr.value);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
554 stmt = c_finish_return(loc, NULL_TREE, NULL_TREE);
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
555 }
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
556 </pre>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
557 <small>
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
558 <li>cbc_replace_arguments関数は引数のデータを一時的な変数へ避難させる。</li>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
559 <li class="incremental">CALL_EXPR_TAILCALLマクロでtail callフラグを立てる。</li>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
560 <li class="incremental">最後にc_finish_return関数によりreturn文を生成している。</li>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
561 </small>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 <div class="slide">
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
565 <h1>CbCの実装:シンタックスの追加</h1>
61
2c543a47737b modify explanation of fastcall
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
566 <h2>gotoシンタックスの追加</h2>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
567 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
568 <li>tail callフラグを立てることで、関数呼び出しに末尾除去(末尾最適化)をかけることができる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
569 <li>最後のリターン文生成も、末尾除去にかける為に必要な処理。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
570 </ul>
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
571 <table border=1 width=100%>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
572 <!--
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
573 <caption><small>return 自動生成</small></caption>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
574 -->
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
575 <tr class="center">
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
576 <small>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
577 <td>実際のコード </td>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
578 <td>GCC 内で処理されるコード</td>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
579 </small>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
580 </tr>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
581 <tr class="srctr">
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
582 <td>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
583 <pre>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
584
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
585 __code test() {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
586 :
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
587 goto factorial0(1, x);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
588 }
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
589 </pre>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
590 </td>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
591 <td>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
592 <pre>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
593
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
594 void test() {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
595 :
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
596 factorial0(1, x);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
597 return;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
598 }
55
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
599 </pre>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
600 </td>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
601 </tr>
06ce8fb8e278 modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 54
diff changeset
602 </table>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
603 <!--
60
a21d16da431a modify addition of goto syntax
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
604 <li>末尾最適化(末尾除去)については後ほど詳しく説明する。</li>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
605 -->
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
606 </div>
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
607 <!-- PAGE -->
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
608 <div class="slide">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
609 <h1>CbCの実装:TCE(末尾除去)</h1>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
610 <h2>末尾除去:Tail Call Elimination(TCE)</h2>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
611 <ul>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
612 <li>関数呼び出しをcallではなくjmp命令で行う最適化。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
613 </ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
614 <li><small>以下のソースの場合 関数g から関数f へjmp命令で処理が移る。</small></li>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
615 <br>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
616 <table width=100%>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
617 <tr class="srctr">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
618 <td width=50%>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
619 <!--
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
620 <pre class="srcbox">
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
621 int main() {
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
622 int num = a(2);
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
623 printf("main:num=%d\n",num);
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
624 return 0;
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
625 }
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
626 int a(int num) {
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
627 return b(num+5);
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
628 }
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
629 int b(int num) {
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
630 printf("b:a = %d\n",num);
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
631 return num+3;
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
632 }
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
633 </pre>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
634 -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
635 <pre class="srcbox">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
636
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
637 void f(int a, int b) {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
638 printf("f: a=%d b=%d\n",a,b);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
639 return ;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
640 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
641 void g(int a, int b){
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
642 printf("g: a=%d b=%d\n",a,b);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
643 f(a,b);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
644 return;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
645 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
646
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
647 int main() {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
648 g(3,4);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
649 return 0;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
650 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
651
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
652 </pre>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
653 </td>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
654 <td class="center">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
655 <img src="./pix/continuation.png" style="height:100%;">
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
656 </td>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
657 </tr>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
658 </table>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
659 </div>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
660 <!-- PAGE -->
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
661 <div class="slide">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
662 <h1>CbCの実装:TCE(末尾除去)の動作</h1>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
663 <li>スタック:呼び出し元関数と同じ範囲を使うことになる。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
664 <table width=100% border=1>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
665 <td>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
666 <p class="center">
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
667 <img src="./pix/tce.png" style="height: 6em;">
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
668 </p>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
669 </td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
670 <td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
671 <ul>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
672 <li><small>func_bの引数はfunc_aのスタックに上書する</small></li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
673 <li><small>func_bの為にスタックポインタは伸ばされない</small></li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
674 </ul>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
675 </td>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
676 </table>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
677 <li class="incremental">CbCにおけるコードセグメントへの継続はこのTCEを用いて実装されている。</li>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
678 <li class="incremental">TCEにかかるには条件が幾つかある。</li>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
679 </div>
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
680 <!-- PAGE -->
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
681 <div class="slide">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
682 <h1>CbCの実装:TCE(末尾除去)</h1>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
683 <li>TCEにかかる条件</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
684 <ol>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
685 <li>caller側とcallee側の戻値の型の一致している。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
686 <li>関数呼び出しがリターン直前に行われている。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
687 <li>呼出先関数の引数に用いられるスタックサイズが呼出元のそれより少ない。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
688 <li>引数の並びのコピーに上書きがない。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
689 </ol>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
690 </div>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
691 <!-- PAGE -->
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
692 <div class="slide">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
693 <h1>CbCの実装:TCE(末尾除去)</h1>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
694 <li>条件を回避する為以下の実装にする。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
695 <ol>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
696 <li>型はvoid型で統一する。</li>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
697 <li>gotoの直後にreturnを置く。</li>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
698 <li>スタックサイズは固定にする。</li>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
699 <li>引数は一旦、一時変数にコピーする。</li>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
700 </ol>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
701 </div>
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
702 <!-- PAGE -->
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
703 <div class="slide">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
704 <h1>CbCの実装:TCE(末尾除去)</h1>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
705 <li>TCEの条件はexpand_call関数で調べられる。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
706 <ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
707 <li>expand_call関数</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
708 <ul>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
709 <li>Treeで表された関数からRTLを生成する関数</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
710 <li>スタックの領域確保、引数の格納、関数へのcall命令の発行が行わる。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
711 <li>try_taill_call(変数名)フラグがあり、TCEの条件に合わなければこのフラグが落とされる。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
712 </ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
713 <li class="incremental">具体的な実装内容</li>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
714 <ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
715 <li class="incremental">try_tail_callフラグを落とすif文の条件をかわすようにする。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
716 <li class="incremental">try_tail_callフラグを立たせる処理の追加。</li>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
717 </ul>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
718 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
719
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
720 </div>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
721 <!-- PAGE -->
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
722 <!--
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
723 <div class="slide">
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
724 <h1>CbCの実装:TCE</h1>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
725 <li>TCEにかかる条件</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
726 <ul>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
727 <li>try_tail_callフラグを落とさせない。</li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
728 </ul>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
729 <li></li>
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
730 </div>
69
9dc6013b0559 modify explanation of tce
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 68
diff changeset
731 -->
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
733 <div class="slide">
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
734 <h1>CbCの実装:TCE(末尾除去)</h1>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
735 <li>try_tail_callフラグが落とされる部分</li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
736 <table width=100%>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
737 <tr class="srctr">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
738 <td>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
739 <pre class="srcbox">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
740 if (currently_expanding_call++ != 0
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
741 || ((!fndecl || !CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl)))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
742 && !flag_optimize_sibling_calls)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
743 || args_size.var
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
744 || dbg_cnt (tail_call) == false)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
745 try_tail_call = 0;
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
746 </pre>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
747 </td>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
748 </tr>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
749 </table>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
750 <li><string>!CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl)により条件を回避</string></li>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
751 </div>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
752 <!-- PAGE -->
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
753 <div class="slide">
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
754 <h1>CbCの実装:TCE(末尾除去)</h1>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
755 <li>try_tail_callフラグが落とされる部分</li>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
756 <table width=100%>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
757 <tr class="srctr">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
758 <td class="srctd">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
759 <pre class="srcbox">
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
760 if (
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
761 #ifdef HAVE_sibcall_epilogue
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
762 !HAVE_sibcall_epilogue
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
763 #else
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
764 1
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
765 #endif
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
766 || !try_tail_call
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
767 || structure_value_addr != NULL_RTX
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
768 #ifdef REG_PARM_STACK_SPACE
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
769 || (OUTGOING_REG_PARM_STACK_SPACE (funtype)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
770 != OUTGOING_REG_PARM_STACK_SPACE (TREE_TYPE (current_function_decl)))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
771 || (reg_parm_stack_space != REG_PARM_STACK_SPACE (fndecl))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
772 #endif
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
773 || !targetm.function_ok_for_sibcall (fndecl, exp)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
774 || (flags & (ECF_RETURNS_TWICE | ECF_NORETURN))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
775 || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
776 || (fndecl && decl_function_context (fndecl) == current_function_decl)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
777 || args_size.constant > (crtl->args.size
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
778 - crtl->args.pretend_args_size)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
779 || (targetm.calls.return_pops_args (fndecl, funtype, args_size.constant)
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
780 != targetm.calls.return_pops_args (current_function_decl,
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
781 TREE_TYPE (current_function_decl),
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
782 crtl->args.size))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
783 || !lang_hooks.decls.ok_for_sibcall (fndecl))
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
784 try_tail_call = 0;
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
785 </pre>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
786 </td>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
787 </tr>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
788 </table>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
789 <li><small>引数のスタックサイズ、関数の型のチェックが行われる。</small></li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
790 </div>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
791 <!-- PAGE -->
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
792 <div class="slide">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
793 <h1>CbCの実装:TCE(末尾除去)</h1>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
794 <li>try_tail_callフラグが落とされる部分</li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
795 <table width=100% >
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
796 <tr class="srctr">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
797 <td class="srctd">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
798 <pre class="srcbox" style="">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
799 /* Check if caller and callee disagree in promotion of function
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
800 return value. */
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
801 #ifndef noCbC
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
802 if (try_tail_call && (!fndecl || !CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl))))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
803 #else
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
804 if (try_tail_call)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
805 #endif
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
806 {
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
807 enum machine_mode caller_mode, caller_promoted_mode;
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
808 enum machine_mode callee_mode, callee_promoted_mode;
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
809 int caller_unsignedp, callee_unsignedp;
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
810 tree caller_res = DECL_RESULT (current_function_decl);
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
811
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
812 caller_unsignedp = TYPE_UNSIGNED (TREE_TYPE (caller_res));
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
813 caller_mode = DECL_MODE (caller_res);
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
814 callee_unsignedp = TYPE_UNSIGNED (TREE_TYPE (funtype));
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
815 callee_mode = TYPE_MODE (TREE_TYPE (funtype));
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
816 caller_promoted_mode
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
817 = promote_function_mode (TREE_TYPE (caller_res), caller_mode,
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
818 &caller_unsignedp,
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
819 TREE_TYPE (current_function_decl), 1);
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
820 callee_promoted_mode
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
821 = promote_function_mode (TREE_TYPE (funtype), callee_mode,
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
822 &callee_unsignedp,
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
823 funtype, 1);
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
824 if (caller_mode != VOIDmode
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
825 && (caller_promoted_mode != callee_promoted_mode
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
826 || ((caller_mode != caller_promoted_mode
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
827 || callee_mode != callee_promoted_mode)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
828 && (caller_unsignedp != callee_unsignedp
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
829 || GET_MODE_BITSIZE (caller_mode)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
830 < GET_MODE_BITSIZE (callee_mode)))))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
831 try_tail_call = 0;
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
832 }
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
833 </pre>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
834 </td>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
835 </tr>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
836 </table>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
837 <li>関数の型のチェックが行われる。</li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
838 </div>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
839 <!-- PAGE -->
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
840 <div class="slide">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
841 <h1>CbCの実装:TCE(末尾除去)</h1>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
842 <li>try_tail_callフラグ矯正付与のソースコード</li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
843 <table width=100%>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
844 <tr class="srctr">
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
845 <td>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
846 <pre class="srcbox">
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
847 #ifndef noCbC
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
848 if (fndecl && CbC_IS_CODE_SEGMENT (TREE_TYPE (fndecl))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
849 && CbC_IS_CODE_SEGMENT (TREE_TYPE (current_function_decl))
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
850 && try_tail_call == 0)
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
851 {
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
852 location_t loc = EXPR_LOCATION (exp);
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
853 char *name_callee = IDENTIFIER_POINTER(DECL_NAME(fndecl));
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
854 warning_at (loc, 0, "transition to code segment \"%s\" with CbC goto, but tail call optimization was cut.",
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
855 name_callee);
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
856 try_tail_call = 1;
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
857 }
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
858 #endif
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
859 </pre>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
860 </td>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
861 </tr>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
862 </table>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
863 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
864 <li>try_tail_callフラグが落とされた場合warningを出してフラグを立たせる。
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
865 <br><small>(最適化の矯正付与)</small></li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
866 </ul>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
867 </div>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
868 <!-- PAGE -->
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
869 <div class="slide">
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
870 <h1>CbCの実装:TCE(末尾除去)の実装について</h1>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
871 <ul>
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
872 <li>以前はexpand_call関数を元にしたexpand_cbc_goto関数を作り条件を回避させていた。</li>
72
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
873 <li>だがその方法だとexpand_call関数の修正にも合わせていく必要もあり管理も面倒であった。</li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
874 <li>しかしtry_tail_callフラグを落とさせない方法にすることでexpand_cbc_goto関数はいらなくなり、管理が容易くなった。</li>
48de60dd51d1 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 71
diff changeset
875 </ul>
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
876 </div>
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
877 <!-- PAGE -->
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
878 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
879 <h1>CbCの実装</h1>
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
880 <li>CbCの基本機能を実現する為の実装は以上の2つになる。</li>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
881 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
882 <li>シンタックスの追加</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
883 <li>末尾除去によるコードセグメントへjmp命令での処理の移り</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
884 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
885 <li class="incremental">ここからはCbCの機能の拡張になる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
886 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
887 <!-- PAGE -->
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
888 <!--
63
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
889 <div class="slide">
3cc4a8603489 modify explanation of TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 62
diff changeset
890 <h1>CbCの実装:環境付き継続</h1>
62
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
891 <li>CbCにおけるCとの互換性を保つための機能。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
892 <li>コードセグメントを呼び出したCの関数に戻ることができる。</li>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
893 <li>論文における訂正</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
894 <li>『GCC 4.6 と Lion の組合せでは Closure は正しく動作していないことが分かった.』</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
895 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
896 <li>GCC 4.6 への CbC の実装のせいでクロージャがうまくできていなかったことが判明。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
897 <li>GCC 4.6 と Lion でのクロージャは特に問題はない。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
898 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
899 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
900 -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
901 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
902 <!--
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
903 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
904 <h1>環境付き継続:論文におけるクロージャの問題の訂正</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
905 <p><small>『GCC 4.6とLionの組み合わせではclosureは正しく動作してないことが分かった。』<br>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
906 とあるが、これはCbCの実装でTCEを強制的に立てることが原因であったことを訂正させて頂きます。</small></p>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
907 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
908 -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
909 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
910 <div class="slide">
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
911 <h1>CbCの実装:引数渡し</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
912 <li>GCC版コンパイラー開発当初、コンパイルしたCbCのプログラムはMicro-C版に速度面で勝てなかった。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
913 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
914 <li class="incremental">Micro-Cでは関数呼び出しの際にできるだけレジスタを使うようにしていた。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
915 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
916 <li class="incremental">そこで、GCC版CbCコンパイラの引数渡しもできるだけレジスタで行うことに。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
917 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
918 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
919 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
920 <h1>CbCの実装:引数渡し(fastcall)</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
921 <h2>fastcall</h2>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
922 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
923 <li>i386 において関数呼び出しの際、引数渡しをできるだけレジスタを用いるGCCの拡張機能。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
924 <li>関数に『__attribute__ ((fastcall))』をつけることで使えるようになる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
925 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
926 <li>__codeで宣言された関数は自動でfastcall属性が付与されるように以下のコードを追加。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
927 <small>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
928 <pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
929 if(!TARGET_64BIT) {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
930 attrs = build_tree_list (get_identifier("fastcall"), NULL_TREE);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
931 declspecs_add_attrs(specs, attrs);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
932 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
933 </pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
934 </small>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
935 <p><small>Intel64 ではレジスタが増えている為、fastcallは標準でつくようになっている。</small></p>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
936 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
937 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
938 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
939 <h1>CbCの実装:引数渡し</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
940 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
941 <li>fastcall属性の付与によりMicro-C版に速度で勝るようになった。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
942 <li></li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
943 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
944 <table width=100% border=1 class="center">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
945 <caption>引数渡しに使われるレジスタの数(gcc)</caption>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
946 <tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
947 <td>arch</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
948 <td>int(整数型)</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
949 <td>float(浮動小数点型)</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
950 <td>double(浮動小数点型)</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
951 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
952 <tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
953 <td>i386</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
954 <td>2</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
955 <td>0<br>(stackを使用)</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
956 <td>0<br>(stackを使用)</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
957 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
958 <tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
959 <td>x86_64</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
960 <td>6</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
961 <td>8</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
962 <td>8</td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
963 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
964 </table>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
965 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
966 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
967 <div class="slide">
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
968 <h1>CbCの実装:環境付き継続</h1>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
969 <ul>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
970 <li>CbCにおけるCとの互換性を保つための機能。コードセグメントを呼び出したCの関数に戻ることができる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
971 <li>__returnキーワードを引数に渡すことで使うことができる。</li>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
972 </ul>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
973 <li>以下の使い方の場合は1を返す。</li>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
974 <table border=1 width=100%>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
975 <td>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
976 <small>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
977 <pre class="srcbox">
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
978 __code c1(__code ret(int,void *),void *env) {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
979 goto ret(1,env);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
980 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
981 int main() {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
982 goto c1(__return, __environment);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
983 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
984 </pre>
71
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
985 </small>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
986 </td>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
987 </table>
64d22e65489c modify TCE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 70
diff changeset
988 <p><small>__environmentキーワードは関数の環境を保持する。</small></p>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
989 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
990 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
991 <div class="slide">
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
992 <h1>CbCの実装:環境付き継続</h1>
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
993 <!--
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
994 <li><small>生成しているコードと生成する為のコード</small></li>
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
995 -->
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
996 <table border=1 width=100%>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
997 <tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
998 <td><small>生成しているコード</small></td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
999 <td><small>生成する為のコード</small></td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1000 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1001 <tr class="srctr">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1002 <td width=50% class="srctd">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1003 <pre class="srcbox" style="width:25em;">
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1004
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1005 //goto c1(__return, __environment);
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1006 goto c1(({
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1007 __label__ _cbc_exit0;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1008 static int retval;
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1009 void _cbc_internal_return(int retval_, void *_envp) {
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1010 retval = retval_;
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1011 goto _cbc_exit0;
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1012 }
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1013 if (0) {
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1014 _cbc_exit0:
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1015 return retval;
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1016 }
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1017 _cbc_internal_return;
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1018 }), __environment);
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1019 </pre>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1020 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1021 <td width=50% class="srctd">
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1022 <img src="./pix/STATEMENT_LIST_1.png" style="height: 10em;">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1023 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1024 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1025 </table>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1026 <li><small>retval変数の型は継続を行った関数と同じ戻値の型となる。</small></li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1027 <!--
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1028 <li class="incremental">上記のコードをGCC内で生成すると次のようなTreeができる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1029 -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1030 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1031 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1032 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1033 <h1>CbCの実装:環境付き継続</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1034 <table border=1 width=100%>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1035 <tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1036 <td width=50%><small>生成されるTree</small></td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1037 <td width=50%><small>生成する為のコード</small></td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1038 </tr>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1039 <tr class="srctr">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1040 <td class="srctd">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1041 <img src="./pix/STATEMENT_LIST_1.png" style="height: 10em;">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1042 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1043 <td class="srctd">
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1044 <pre class="srcbox" style="width:25em;">
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1045
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1046 case RID_CbC_RET:
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1047 {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1048 tree value, stmt, label, tlab, decl;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1049 c_parser_consume_token (parser);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1050
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1051 stmt = c_begin_stmt_expr ();
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1052 cbc_return_f = c_parser_peek_token (parser)->value;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1053 location_t location = c_parser_peek_token (parser)->location;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1054
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1055 /* create label. (__label__ _cbc_exit0;) */
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1056 label = get_identifier ("_cbc_exit0");
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1057 tlab = declare_label (label);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1058 C_DECLARED_LABEL_FLAG (tlab) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1059 add_stmt (build_stmt (location, DECL_EXPR, tlab));
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1060
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1061 /* declare retval. (int retval;) */
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1062 tree decl_cond =
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1063 build_decl (location, VAR_DECL, get_identifier ("retval"),
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1064 TREE_TYPE (TREE_TYPE (current_function_decl)));
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1065 TREE_STATIC (decl_cond) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1066 TREE_USED (decl_cond) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1067
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1068 /* Use thread-local */
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1069 DECL_TLS_MODEL (decl_cond) = decl_default_tls_model (decl_cond);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1070 DECL_NONLOCAL (decl_cond) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1071 add_stmt (build_stmt(location, DECL_EXPR, pushdecl (decl_cond)));
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1072
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1073 /* define nested function. */
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1074 decl =
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1075 cbc_finish_nested_function (location, label, decl_cond);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1076 TREE_USED(decl) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1077
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1078 /* define if-ed goto label and return statement. */
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1079 cbc_finish_labeled_goto (location, label, decl_cond);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1080
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1081 /* get pointer to nested function. */
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1082 value = build_addr (decl , current_function_decl);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1083 TREE_USED (current_function_decl) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1084 SET_EXPR_LOCATION (value, location);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1085 add_stmt (value);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1086
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1087 TREE_SIDE_EFFECTS (stmt) = 1;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1088 expr.value = c_finish_stmt_expr (location, stmt);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1089 expr.original_code = ERROR_MARK;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1090 }
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1091 </pre>
73
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1092 </td>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 72
diff changeset
1093 </tr>
74
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 73
diff changeset
1094 </table>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1095 <!--
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1096 <small>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1097 <pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1098 ({
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1099 __label__ _cbc_exit0;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1100 static int retval;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1101 void _cbc_internal_return(int retval_, void *_envp){
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1102 retval = retval_;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1103 goto _cbc_exit0; }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1104 if (0) { _cbc_exit0:
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1105 return retval; }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1106 _cbc_internal_return;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1107 }),
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1108 </pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1109 </small>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1110 -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1111 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1112 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1113 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1114 <h1>環境付き継続:実装の問題</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1115 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1116 <li>リターンするretval変数が重要になってくる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1117 <li>retval変数のデータをどうやって確保するか。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1118 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1119 <li>次の方法が考えられる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1120 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1121 <li>クロージャでの確保</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1122 <li>staticでの確保</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1123 <li>static thread local storage(tls)を用いての確保</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1124 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1125 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1126 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1127 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1128 <h1>環境付き継続:実装の問題</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1129 <li>クロージャでの実装</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1130 <ul>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1131 <li>クロージャにしてスタックに値を確保する。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1132 <li></li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1133 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1134 <li>問題点</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1135 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1136 <li class="incremental">しかしCbCではスタックの値は破棄されていく。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1137 <li class="incremental">その為スタックに値を確保するのは好ましくない。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1138 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1139 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1140 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1141 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1142 <h1>環境付き継続:実装の問題</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1143 <li>staticでの実装</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1144 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1145 <li>静的に値を確保することでスタック破棄の影響を受けない。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1146 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1147 <li>問題点</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1148 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1149 <li class="incremental">マルチスレッドのプログラムに対応できない。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1150 <li class="incremental">値を返し切る前に別スレッドによって値が書き換えられる可能性がある。</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1151 </ul>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1152 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1153 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1154 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1155 <h1>環境付き継続:実装の問題</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1156 <li>static tlsでの実装</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1157 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1158 <li>スレッド毎に静的に値を確保する。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1159 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1160 <li>現在はこの方法で実装を行なっている。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1161 <li>しかし、最適化にかけると正しい値が返ってこない。
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1162 <br>(恐らくTreeの生成の部分が間違っている。)</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1163 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1164 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1165 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1166 <h1>環境付き継続:その他の実装方法</h1>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1167 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1168 <li>setjmpでの実装</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1169 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1170 <li>setjmpを行うTreeを生成するのが少し手間になる。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1171 <li>int型の戻値しか得られない。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1172 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1173 <li>戻値を入れるレジスタを明示的に指定する。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1174 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1175 <li>まだ実装を試していない。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1176 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1177 </ul>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1178 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1179 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1180 <div class="slide">
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1181 <h1>CbCの機能の拡張:__rectype の実装</h1>
57
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1182 <li>通常、関数の引数に関数ポインタを渡した際は以下の様に使われる。</li>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1183 <small>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1184 <pre>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1185 void factorial(int n, int result, void(*print)()){
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1186 :
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1187 (*print)(n,result,print,exit1, envp);
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1188 }
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1189 </pre>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1190 </small>
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
1191 <li>以下の様に引数に()をつけて受けてることをやめたい。</li>
57
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1192 <small>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1193 <pre>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1194 void factorial(int n, int result, void *print){
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1195 :
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
1196 void(*print)(n,result,print,exit1, envp);
57
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1197 }
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1198 </pre>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1199 </small>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1200 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1201 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1202 <div class="slide">
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1203 <h1>CbCの機能の拡張:__rectype の実装</h1>
57
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1204 <li>そこで、__rectype という予約後を作り、以下の宣言を行えるようにした。</li>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1205 <pre>
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1206 __code factorial(int n, int result, __rectype *print) {
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1207 :
70
79894ca66a9a modify explanation of GCC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
1208 goto (*print)(n,result,print,exit1, envp);
57
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1209 }
ce844f6c504d modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1210 </pre>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1211 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1212 <!-- PAGE -->
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1213 <div class="slide">
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1214 <h1>CbCの機能の拡張:selftype</h1>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1215 <h2>selftypeの実装</h2>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1216 <li>以下の宣言が行えるようにしたい。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1217 <small>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1218 <pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1219 typedef sturct node {
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1220 selftype *left;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1221 selftype *right;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1222 int num;
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1223 }*NODE
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1224 </pre>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1225 <p>selftype は struct node を指す。</p>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1226 </small>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1227 <ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1228 <li>上記の構文は実装を行う予定である。</li>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1229 </ul>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1230 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1231 <!-- PAGE -->
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1232 <div class="slide">
66
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1233 <h1>Micro-Cとの比較</h1>
68
1399414ea3f6 modify explanation of Generic Tree
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 66
diff changeset
1234 <li>Micro-C,GCC-4.4とGCC-4.6のCbCコンパイラでコンパイルしたプログラムの実行の速度</li>
66
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1235 <table width=100% class="center">
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1236 <td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1237 <img src="./pix/mac_conv.png">
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1238 </td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1239 <td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1240 <img src="./pix/linux_conv.png">
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1241 </td>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1242 </table>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1243 <li>GCC版の最適化無しの場合、引数を全て一時変数に代入するという処理が入る。
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1244 その為に明らかに遅くなっていることが分かる。</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1245 <li>だがGCCの最適化有りの場合はMicro-C版よりも早い。</li>
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1246 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1247 <!-- PAGE -->
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1248 <div class="slide">
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1249 <h1>まとめ</h1>
66
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1250 <ul>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1251 <li>今回GCC版CbCコンパイラのアップデートを行った。</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1252 <li>TCEにかかる判定の部分と環境付き継続の実装の修正を行った。
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1253 <br>おかげで、以前より楽な管理ができる実装にすることができた。</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1254 <li>後は環境付き継続の最適化の問題の修正とselftypeの実装を行う。</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1255 <li>全ての実装を終えたらGCC版CbCコンパイラの実装はアップデートを行なっていくだけとなる。</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1256 </ul>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1257 </div>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1258 <!-- PAGE -->
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1259 <div class="slide">
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1260 <h1>今後の予定</h1>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1261 <ul>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1262 <li>CbCを用いたプログラムの作成</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1263 <ul>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1264 <li>CbCによるタスクマネージャの作成</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1265 </ul>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1266 <li>llvmへのCbCの実装</li>
26a3713b2989 modify explanation of CbC
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
1267 </ul>
64
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1268 </div>
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1269 <!-- PAGE -->
54
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1270 </div>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1271 </body>
a967ee5a0b0f add presen
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1272 </html>