annotate recital-slide/slide.html @ 17:7c25b2856f27

up recital-slide
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2010 14:09:50 +0900
parents d9b85f041908
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 <?xml version="1.0" encoding="utf-8"?>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 <head>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 <title>Continuation based C</title>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 <meta name="copyright" content="Copyright &#169; 2009 KSL: Yogi KENT" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 <meta name="font-size-adjustment" content="1" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 <link rel="stylesheet" href="slidy.css"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 type="text/css" media="screen, projection, print" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 <link rel="stylesheet" href="slide.css"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 type="text/css" media="screen" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 <!--link rel="stylesheet" href="../Slidy/w3c-blue2.css"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 type="text/css" media="screen, projection, print" /-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 <style type="text/css">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 .right {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 float: right;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 width: 40%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 .left {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 float: left;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 width: 40%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 div.slide {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 vertical-align: middle;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 div.top h1 {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 width: 70%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 padding: 0 1em 0;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 text-align: center;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 #frame {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 position: fixed;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 left: -1px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 top: -1px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 width: 800px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 height: 600px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 border: solid 1px red;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 visibility: visible;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 .speak {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 visibility: hidden;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 font-size: 80%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 line-height: 1.0;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 position: fixed;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 right: 0.5em;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 bottom: 1.5em;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 max-width: 60%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 background-color: green;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 opacity: 0.90;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 color: black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 -moz-border-radius: 8px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 -webkit-border-radius: 8px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ul.narrow li {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 margin-right: 0;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 table {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 border-collapse: collapse;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 border: solid 1px black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 table td {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 border: solid 1px black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 table th {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 text-align: center;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 border: solid 1px black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 </style>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 <script src="slidy.js"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 charset="utf-8" type="text/javascript">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 </script>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 <script type="text/javascript">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 sizes = new Array("14pt", "15pt", "16pt", "17pt", "18pt", "19pt", "20pt", "21pt", "22pt","23pt", "24pt", "26pt", "28pt", "30pt", "32pt");
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 sizeIndex = 1;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 mouseClickEnabled = false;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 </script>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 </head>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 <body>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 <!-- this defines the slide background -->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 <div id="frame"></div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 <div class="background">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 <div class="header">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 <!-- sized and colored via CSS -->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 <!--img id="head-icon" alt="graphic with four colored squares"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 src="../Slidy/icon-blue.png" /-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 <div class="footer">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 <object id="w3c-logo" data="kent-logo2.svg" type="image/svg+xml" title="KENT logo">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 <a href="http://www.w3.org/">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 <img alt="W3C logo" id="w3c-logo-fallback" src="kent-logo2.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 </a>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 </object>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 <!-- modify the following text as appropriate -->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 組み込み向け言語CbCのGCC上の実装 <span style="font-size:70%;">http://www.cr.ie.u-ryukyu.ac.jp/~kent/slide/final.html</span><br />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 <!--Event, Location, Month Year-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 <div class="slide top">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 <h1>組み込み向け言語Continuation based CのGCC上の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 <p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 与儀健人 (並列信頼研究室)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 &lt;<a href="mailto:">kent@cr.ie.u-ryukyu.ac.jp</a>&gt;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 </p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 <!--img src="../Slidy/keys.jpg" class="cover"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 alt="W3C as letters on 3 plastic buttons from a keyboard" /-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 <!--h2>ゼミ, 河野研, Sep, 2009</h2-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 <h1>研究の背景</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 <li>ソフトウェアは今も大規模・複雑化が続いている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 <li>しかし、ソフトウェアのバグを発見するのは難しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 <li style="marker:none;"/>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 <li>組込みやReal-time処理の需要も増大してる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 <li>高速な応答が要求される組込み処理にはハードウェアに近い言語が適している</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 <p class="subtitle">なにが問題になるのか?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 <li>組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 <li>現存する記述言語は状態遷移の記述に向いていない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 <li>スタックが状態を隠蔽するため、分割しにくい、検証が難しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 <div class="slide" style="font-size:95%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 <h1>研究目的</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 <p class="subtitle">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 状態遷移記述をベースとした、より細かい単位でのプログラミングを実現する
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 </p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 <li>組込み、通信プロトコル、Real-time処理などの記述に向いている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 <li>状態遷移を直接記述するため、タブロー法での検証に有利</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 <li>関数より細かく、ステートメントより大きい処理単位</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 <li>細かい単位でソースコードレベルの最適化を可能にする</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 <p class="subtitle">条件</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 <li>既存のソフトウェアは膨大であり、無駄にはできない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 <li>互換性が必須条件</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 <li>Cからの変換、Cへの変換ができる事が望ましい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 <h1>Continuation based Cの提案</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 <p class="subtitle">継続を基本とする記述言語CbC</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 <li>環境を保持しない継続、<dfn>軽量継続</dfn>を導入</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 <li>軽量継続で<em class="weak">状態遷移が明確</em>になる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 <li>関数の代わりとなる処理単位<dfn>コードセグメント</dfn></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 <li>関数 &gt; コードセグメント &gt; ステートメント</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 <li>for, whileなどのループも軽量継続で実現できる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 <li>Cとの相互利用のための構文<dfn>環境付き継続</dfn>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 <li>このCとの相互利用可能なCbCは<em>C with Continuation</em>と呼ばれる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
172 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
173 <h1>継続とはなんなのか?</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
174 <p class="subtitle">継続</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
175 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
176 <li>現在の処理を続行するための情報
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
177 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
178 <li>Cならば続く命令のアドレスや</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
179 <li>命令に必要な値、</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
180 <li>スタックなど、その環境全てを含む</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
181 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
182 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
183 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
184 <p class="subtitle">CbCでの軽量継続</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
185 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
186 <li>継続からスタックに関する情報を落とす</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
187 <li>続く命令とデータのみのシンプルな継続</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
188 <li>命令は<em>コードセグメント</em>、引数は<em>インタフェイス</em>と呼ばれる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
189 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
190 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
191
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 <h1>コードセグメントと軽量継続の記述</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 <pre style="float:right; width-max:45%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 <code>typedef code (*NEXT)(int);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 int main(int argc, char **argv) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 int i;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 i = atoi(argv[1]);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 goto factor(i, print_fact);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 <em>code factor(int x, NEXT next)</em> {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 goto factor0(1, x, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 code factor0(int prod,int x,NEXT next) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 if (x &gt;= 1) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 goto factor0(prod*x, x-1, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 } else {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 <em>goto (*next)(prod);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 code print_fact(int value) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 printf("factorial = %d\n", value);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 exit(0);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 } </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 <p class="subtitle">実際のプログラム記述は?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 <li>コードセグメント定義
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 <li><code>codeキーワードで宣言</code></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 <li>書式は関数と同じ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 <li>軽量継続制御
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 <li><code>goto</code>キーワードと引数</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 <li>コードセグメントの最初に飛ぶ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 <li>コードセグメントポインタによる間接継続も可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 <h1>これまでのCbC</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 <dt>2000</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 <dd>micro-cをベースとしたコンパイラの完成<br/>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 x86, PowerPC, ARM, MIPS.
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 <dt>2002</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 <dd>CbCを用いた分散計算</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 <dt>2005</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 <dd>CbCを用いたプログラム分割手法</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 <dt>2006</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 <dd>CbCによるSPUマシンのシミュレータ</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 <dt>2007</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 <dd>時相論理をベースとしたCbCプログラムの検証</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 <dt>2008</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 <dd>GCCをベースとしたコンパイラが開発される</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 <dt>2010</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 <dd>GCCベースコンパイラを実用レベルに拡張</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 <h1>本研究での取り組み</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 <p class="subtitle">取り組み</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 <dt>First</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 <dd>GCCにて実用レベルのCbCプログラムを動作可能にする
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 <li>軽量継続の実装、これまでの制限の除去</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 <li>x86アーキテクチャにて高速化を行った</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 <li>PowerPCアーキテクチャでの間接継続の追加</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 <dt>Second</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 <dd>C言語との相互利用を可能にした</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 <dt>Third</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 <dd>ソースコードメンテナンス性の向上</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 <h1>GNU コンパイラコレクション (GCC)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 <div style="width:50%;float:right;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 <p class="subtitle">GCCでのコンパイルの流れ</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 <ul style="padding-left:3em">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 <li>フロントエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 <li>ミドルエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 <li>バックエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 <img style="width:80%;position:relative;top:-15%;" src="figures/gcc-flow.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 <h1>GNU コンパイラコレクション (GCC)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 <div style="width:50%;float:right;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 <p class="subtitle">GCCでのコンパイルの流れ</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 <ul style="padding-left:3em">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 <li>フロントエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 <li>ミドルエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 <li>バックエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 <img style="width:80%;position:relative;top:-15%;" src="figures/gcc-flow2.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
302
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
303
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 <h1>First: 軽量継続の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 <p class="subtitle">軽量継続を実装するには?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 <ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
308 <li>micro-cは元より軽量継続を考慮して良く設計されている</li>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 <li>micro-Cと同じ命令列を出力させるのは難しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 <li>関数コール(call命令)ではもちろんダメ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 <li>必ず<em>jmp命令</em>を出力しないといけない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 <li>スタックを拡張してはいけない</li>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
313 <li>加えて、GCCでは<em>関数をベース</em>にしなければならない</li>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 </ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
315 <p class="subtitle">そこで、<dfn>末尾呼出</dfn>をGCCに<em>強制</em>させる必要がある</p>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 <h1>First: 軽量継続の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 <p class="subtitle">末尾呼出ってなに?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 <img style="float:right; width:50%; margin:1em; " src="figures/tailcall.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 <li>リターンの直前の関数呼び出しのこと</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 <li>GCCが最適化してくれる (<em>TCE</em>)</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 <li>元の関数に戻らないため少し高速に</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 <li>スタックも積まなくてよいため、大幅なメモリ節約、アクセス軽減</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 <h1>First: 軽量継続の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 <p class="subtitle">末尾呼出ってなに?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 <img style="float:right; width:50%; margin:1em; " src="figures/tailcallstack.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 <li>リターンの直前の関数呼び出しのこと</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 <li>GCCが最適化してくれる (<em>TCE</em>)</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 <li>元の関数に戻らないため少し高速に</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 <li>スタックも積まなくてよいため、大幅なメモリ節約、アクセス軽減</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 <p class="subtitle incremental">この末尾呼出(TCE)を強制して軽量継続を実装!</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
342
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 <div class="slide">
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
344 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
345 <p class="subtitle">プログラム実行時のスタックの変化</p>
17
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
346 <img style="float:right; width:50%; margin:1em; " src="figures/interfacestack.png" />
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
347 <ul>
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
348 <li>スタックの拡張はしなくなる</li>
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
349 <li>継続されるデータはインタフェイスのみ</li>
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
350 <li>継続の際に古いデータは上書きされる</li>
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
351 </ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
352 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
353
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
354 <div class="slide">
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 <h1>First: x86における高速化</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 <p class="subtitle">軽量継続は実装されたが、やはりmicro-cに比べると遅い</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 <li>特にx86アーキテクチャ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 <li><em class="weak">あくまで関数がベース</em>なので</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 <li>関数呼出規約に従い全ての引数をスタックに格納してしまう</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 <li>これをレジスタにすれば高速化が可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 <p class="subtitle">fastcallの導入</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 <li>GCCの独自拡張機能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 <li>引数の最初の<em>2つのみレジスタに</em>保持するようになる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
369
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 <h1>First: x86における高速化</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 <p class="subtitle">fastcallの強制</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 <li>通常は以下の様に定義される
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 <pre><code>__code current(int a, int b, int c) __attribute__((fastcall));
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 </code></pre></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 <li>しかしこれを毎回ユーザが書くのは変</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 <li>やはりフロントエンドにて、強制するべき</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 <li>型の構文木を生成した際にfastcall属性を付加</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 <p class="subtitle incremental">これで軽量継続制御が高速化される!</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
383
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 <h1>First: CbCコンパイラ実装の評価</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 <p class="subtitle">CbCGCCとmicro-cで性能の比較</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 <li>CbCGCCが実用的になったことで、micro-cとの比較が可能に</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 <li>コンパイラの出力した実行ファイルを比較</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 <li>CbCでのquicksort例題を用意</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 <li>実行速度、ファイルサイズ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 <li>比較対象はまずは旧CbCGCC、それとmicro-c</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 <p class="subtitle">実行環境</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 <li>CbCGCC、micro-cでともに実行可能な環境を選択</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 <li>アーキテクチャは x86, PowerPC(Cell含む)</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 <li>OSはLinuxとOS Xを使用する</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 <h1>First: 性能評価(速度比較) vs.旧ver</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 <p class="subtitle">速度測定結果(単位:秒)</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 <table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 <th></th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 <th colspan="2">新CbCGCC</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 <th colspan="2">旧CbCGCC</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 <td></td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 <th>最適化無し</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 <th>最適化有り</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 <th>最適化無し</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 <th>最適化有り</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 <td>x86/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 <td>5.907</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 <td>2.434</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 <td>4.668</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 <td>3.048</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 <td>x86/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 <td>5.715</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 <td>2.401</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 <td>4.525</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 <td>2.851</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 </table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 <p class="subtitle">評価</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 <li>最適化無の場合は遅くなった </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 <li>最適化を行うと、<em>約20%の高速化に成功</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 <li>fastcallの効果が十分に出ている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 <h1>First: 性能評価(速度比較)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 <p class="subtitle">速度測定結果(単位:秒)</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 <table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 <td></td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 <td>最適化なしのGCC</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 <td>最適化付きのGCC</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 <td>micro-c</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 <td>x86/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 <td>5.901</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 <td>2.434</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 <td>2.857</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 <td>x86/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 <td>5.732</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 <td>2.401</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 <td>2.254</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 <td>ppc/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 <td>14.875</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 <td>2.146</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
468 <td>4.811</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 <td>ppc/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 <td>19.793</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 <td>3.955</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 <td>6.454</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 <td>ppc/PS3</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 <td>39.176</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 <td>5.874</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 <td>11.121</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 </table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 <p class="subtitle">結果(micro-cとの比較)</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 <li>x86では速度にあまり差が出なかった</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 <li>x86に特化しているmicro-cと差がないのは<em>とても良い結果</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 <li>PowerPCではCbCGCCが<em>2倍ほど早い</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 <p class="subtitle">この違いはどこから?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 <ul style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 <li>実際にアセンブラを出力して比較、その結果</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 <li>x86は自由に使えるレジスタが少ないため、CbCGCCの最適化が効きにくい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 <li>演算の度にメモリ読み込み、演算、書き込みが発生する</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 <li><em>レジスタの多いアーキテクチャではCbCGCCが断然有利になる</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 <li>またCbC言語そのものもレジスタが多いアーキテクチャで有利</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
498
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
499
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 <h1>Second: Cとの相互利用</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 <p class="subtitle">なぜそれが必要か</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 <li>既存のソフトウェアを無駄にはできない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
505 <li>ソースコード上での互換性がある事が望ましい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
506 <li>CbCからCの関数を呼び出すのは問題ない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 <li>CからCbCのコードセグメントに継続するとスタックが保持されない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 <p class="subtitle"><dfn>環境付き継続</dfn>の導入</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 <li>軽量継続に、スタックの情報を加える</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 <li>関数からのみ使用可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
515
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
516 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 <h1>Second: Cとの相互利用</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 <pre style="float:right; width-max:45%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 <code>typedef code (*NEXT)(int);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 int main(int argc, char **argv) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 int i,a;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 i = atoi(argv[1]);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 <em>a = factor(i);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
524 printf("%d! = %d\n", a);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 int factor(int x) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 NEXT ret = <em>__return</em>;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 goto factor0(1, x, ret);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 code
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 factor0(int prod,int x,NEXT next) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 if (x &gt;= 1) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 goto factor0(prod*x, x-1, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 } else {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 <em>goto (*next)(prod);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 <p class="subtitle">環境付き継続の使用例</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 <ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
541 <li><code><em>__return</em></code>で表される特殊なコードセグメント</li>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 <li>コードセグメントからは通常のコードセグメントポインタに見える</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 <li>この<code>__return</code>に継続すると、元の関数の環境にリターン</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
546
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 <h1>Second: Cとの相互利用</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 <p class="subtitle">内部関数を用いた実装</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 <li><code>__return</code>が参照された場合にGCCが自動で内部関数を定義する</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 <li>内部関数の中からは外の関数にgotoして脱出</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 <pre><code>int factor(int x) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 int retval;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
556
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 <em class="weak">code __return(int val) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 retval = val;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 goto label;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 if (0) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 label:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 return retval;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 }</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
565
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 NEXT ret = <em>__return</em>;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 goto factor0(1, x, ret);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 } </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
570
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
571
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 <h1>Second: Cとの相互利用・評価</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 <p class="subtitle">この取り組みにより</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 <ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
576 <li>これにより、<dfn>Continuation based C</dfn> の全仕様を満たした</li>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 <li>ソースコードレベルで、Cと相互に利用することが可能になった</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
580
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
581
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
582
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
584 <h1>まとめ</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 <p class="subtitle">本研究での取り組み</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 <dt>First</dt>
17
7c25b2856f27 up recital-slide
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
588 <dd><em>CbCGCCにて実用レベルのCbCプログラムが動作可能となった</em>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 <ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
590 <li>軽量継続における引数順序の制限を取り除いた</li>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
591 <li>PowerPCでの間接継続の制限を取り除いた</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 <li><em>x86アーキテクチャにて高速化を行った</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
593 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 <dt>Second</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 <dd><em>Cとの相互利用性の向上</em></dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 <dt>Third</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 <dd>ソースコードメンテナンス性の向上</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
601
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 <h1>まとめ</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 <p class="subtitle">本研究での成果</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 <dt>成果1</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 <dd>CbCGCCがCとの相互利用も含むCbCのフルセットとして利用可能になった
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 <dt>成果2</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
609 <dd>CbCが多数のアーキテクチャに対応
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
610 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 <li>20以上のアーキテクチャ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 <li>特に64bitのx86, SPUがうれしい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 </ul> </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
614 <dt>成果3</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 <dd>CbCの高速化
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
617 <li>x86においてmicro-cと互角の速度を達成</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 <li>PowerPCでは2倍の速度</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
619 </ul></dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
620 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
621 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
622
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
623 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
624 <h1>今後の課題</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
625 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
627 <li>Real-time、組込み向けに実用的なCbCプログラムの例題が欲しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
628 <li>タブロー方を用いた検証</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 <li>TaskManagerのCbC実装</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
631 <p class="subtitle">CbC言語の今後</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
632 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
633 <li>オブジェクティブなCbCの設計</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
634 <li>データセグメントの導入</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
635 <li>スケジューラのためのリフレクション</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
636 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
637 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
638
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
639
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
640 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
641 <h1>おわり</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
642 <p class="subtitle">ありがとうございました</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
643 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
644
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
645
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
646
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
647
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
648
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
649
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
650
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
651
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
652 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
653 <h1>継続とはなんなのか?</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
654 <p class="subtitle">継続</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
655 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
656 <li>現在の処理を続行するための情報
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
657 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
658 <li>Cならば続く命令のアドレスや</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
659 <li>命令に必要な値、</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
660 <li>スタックなど、その環境全てを含む</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
661 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
662 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
663 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
664 <p class="subtitle">CbCでの軽量継続</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
665 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
666 <li>継続からスタックに関する情報を落とす</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
667 <li>続く命令とデータのみのシンプルな継続</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
668 <li>命令は<em>コードセグメント</em>、引数は<em>インタフェイス</em>と呼ばれる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
669 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
670 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
671
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
672 <div class="slide" style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
673 <h1>コードセグメントと軽量継続の記述</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
674 <pre style="float:right; width-max:45%">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
675 <code>typedef code (*NEXT)(int);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
676 int main(int argc, char **argv) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
677 int i;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
678 i = atoi(argv[1]);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
679 goto factor(i, print_fact);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
680 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
681 <em>code factor(int x, NEXT next)</em> {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
682 goto factor0(1, x, next);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
683 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
684 code factor0(int prod,int x,NEXT next) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
685 if (x &gt;= 1) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
686 goto factor0(prod*x, x-1, next);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
687 } else {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
688 <em>goto (*next)(prod);</em>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
689 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
690 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
691 code print_fact(int value) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
692 printf("factorial = %d\n", value);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
693 exit(0);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
694 } </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
695 <p class="subtitle">実際のプログラム記述は?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
696 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
697 <li>コードセグメント定義
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
698 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
699 <li><code>codeキーワードで宣言</code></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
700 <li>書式は関数と同じ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
701 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
702 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
703 <li>軽量継続制御
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
704 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
705 <li><code>goto</code>キーワードと引数</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
706 <li>コードセグメントの最初に飛ぶ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
707 <li>コードセグメントポインタによる間接継続も可能</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
708 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
709 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
710 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
711 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
712
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
713 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
714 <h1>これまでのCbC</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
715 <p class="subtitle"></p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
716 <dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
717 <dt>2000</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
718 <dd>micro-cをベースとしたコンパイラの完成<br/>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
719 x86, PowerPC, ARM, MIPS.
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
720 </dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
721 <dt>2002</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
722 <dd>CbCを用いた分散計算</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
723 <dt>2005</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
724 <dd>CbCを用いたプログラム分割手法</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
725 <dt>2006</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
726 <dd>CbCによるSPUマシンのシミュレータ</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
727 <dt>2007</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
728 <dd>時相論理をベースとしたCbCプログラムの検証</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
729 <dt>2008</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
730 <dd>GCCをベースとしたコンパイラが開発される</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
731 <dt>2010</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
732 <dd>GCCベースコンパイラを実用レベルに拡張</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
733 </dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
734 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
735
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
736 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
737 <h1>本研究での取り組み</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
738 <p class="subtitle">取り組み</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
739 <dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
740 <dt>First</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
741 <dd>GCCにて実用レベルのCbCプログラムを動作可能にする
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
742 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
743 <li>軽量継続の実装、これまでの制限の除去</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
744 <li>x86アーキテクチャにて高速化を行った</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
745 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
746 </dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
747 <dt>Second</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
748 <dd>C言語との相互利用を可能にした</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
749 <dt>Third</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
750 <dd>ソースコードメンテナンス性の向上</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
751 </dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
752 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
753
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
754
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
755
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
756 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
757 <h1>GNU コンパイラコレクション (GCC)</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
758 <div style="width:50%;float:right;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
759 <p class="subtitle">GCCでのコンパイルの流れ</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
760 <ul style="padding-left:3em">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
761 <li>フロントエンド</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
762 <li>ミドルエンド</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
763 <li>バックエンド</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
764 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
765 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
766 <img style="width:80%;position:relative;top:-15%;" src="figures/gcc-flow.png" />
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
767 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
768
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
769 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
770 <h1>GNU コンパイラコレクション (GCC)</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
771 <div style="width:50%;float:right;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
772 <p class="subtitle">GCCでのコンパイルの流れ</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
773 <ul style="padding-left:3em">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
774 <li>フロントエンド</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
775 <li>ミドルエンド</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
776 <li>バックエンド</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
777 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
778 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
779 <img style="width:80%;position:relative;top:-15%;" src="figures/gcc-flow2.png" />
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
780 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
781
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
782
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
783 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
784 <h1>GCC フロントエンド</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
785 <p class="subtitle">GCCにおける構文解析部</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
786 <ul class="outline">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
787 <li>C,Java,Adaなど、言語毎に違う</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
788 <li>解析した構文は<dfn>Generic</dfn>という構文木に構築</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
789 <li>さらに静的単一代入と呼ばれる手法で<dfn>GIMPLE</dfn>という構文木に変換</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
790 <li>最終的にこのGIMPLE構文木をミドルエンドに渡す</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
791 <li>GIMPLEの内部表現例
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
792 <pre><code>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
793 &lt;call_expr 0xb7bc7850
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
794 type &lt;void_type 0xb7cc9270 void VOID
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
795 align 8 symtab 0 alias set -1 canonical type 0xb7cc9270
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
796 pointer_to_this &lt;pointer_type 0xb7cc92d8&gt;&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
797 side-effects addressable tree_5
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
798 fn &lt;var_decl 0xb7d65370 D.2156
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
799 type &lt;pointer_type 0xb7da74e0 type &lt;function_type 0xb7da7478&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
800 unsigned SI
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
801 size &lt;integer_cst 0xb7cb36ac constant 32&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
802 unit size &lt;integer_cst 0xb7cb3498 constant 4&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
803 align 32 symtab 0 alias set -1 structural equality&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
804 used unsigned SI file quicksort/quicksort_cbc.cbc line 29 col 2 size &lt;integer_cst 0xb7cb36ac 32&gt; unit size &lt;integer_cst 0xb7cb3498 4&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
805 align 32 context &lt;function_decl 0xb7da2c80 returner&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
806 (mem/f/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
807 (const_int -12 [0xfffffff4])) [0 D.2156+0 S4 A32])
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
808 chain &lt;var_decl 0xb7d653c8 D.2157 type &lt;pointer_type 0xb7cc92d8&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
809 used unsigned SI file quicksort/quicksort_cbc.cbc line 29 col 2 size &lt;integer_cst 0xb7cb36ac 32&gt; unit size &lt;integer_cst 0xb7cb3498 4&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
810 align 32 context &lt;function_decl 0xb7da2c80 returner&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
811 (mem/f/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
812 (const_int -8 [0xfffffff8])) [0 D.2157+0 S4 A32]) chain &lt;var_decl 0xb7d65420 D.2158&gt;&gt;&gt; arg 0 &lt;var_decl 0xb7d653c8 D.2157&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
813 arg 1 &lt;var_decl 0xb7d65420 D.2158
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
814 type &lt;pointer_type 0xb7da7270 stack type &lt;void_type 0xb7cc9270 void&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
815 sizes-gimplified unsigned SI size &lt;integer_cst 0xb7cb36ac 32&gt; unit size &lt;integer_cst 0xb7cb3498 4&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
816 align 32 symtab 0 alias set -1 canonical type 0xb7cc92d8
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
817 pointer_to_this &lt;pointer_type 0xb7bb7000&gt;&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
818 used unsigned SI file quicksort/quicksort_cbc.cbc line 29 col 2 size &lt;integer_cst 0xb7cb36ac 32&gt; unit size &lt;integer_cst 0xb7cb3498 4&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
819 align 32 context &lt;function_decl 0xb7da2c80 returner&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
820 (mem/f/c/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
821 (const_int -4 [0xfffffffc])) [0 D.2158+0 S4 A32])&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
822 quicksort/quicksort_cbc.cbc:29:7&gt;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
823 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
824 <p class="subtitle">全ての構文はこのGIMPLEで表される</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
825 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
826 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
827 <p class="subtitle incremental">つまり、主に修正すべきはこのフロントエンドとなる</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
828 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
829
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
830 <div class="slide" style="font-size:95%">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
831 <h1>GCC ミドルエンド</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
832 <p class="subtitle">GIMPLEからRTLへの変換と最適化</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
833 <ul class="outline">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
834 <li><dfn>pass</dfn>と呼ばれる様々な処理の集合体</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
835 <li>登録されたpassを一つ一つ実行する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
836 <li>最初にGIMPLEの最適化がたくさんある</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
837 <li>そしてもっとも重要なGIMPLEから<dfn>RTL</dfn>への変換</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
838 <li>最後にRTLの最適化がまた大量にある
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
839 <pre style="font-size:80%"><code>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
840 p = &amp;all_lowering_passes;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
841 NEXT_PASS (pass_remove_useless_stmts);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
842 NEXT_PASS (pass_mudflap_1);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
843 NEXT_PASS (pass_lower_omp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
844 NEXT_PASS (pass_lower_cf);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
845 NEXT_PASS (pass_refactor_eh);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
846 NEXT_PASS (pass_lower_eh);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
847 NEXT_PASS (pass_build_cfg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
848 NEXT_PASS (pass_lower_complex_O0);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
849 NEXT_PASS (pass_lower_vector);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
850 #ifndef noCbC
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
851 //NEXT_PASS (pass_warn_function_return);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
852 #else
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
853 NEXT_PASS (pass_warn_function_return);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
854 #endif
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
855 NEXT_PASS (pass_build_cgraph_edges);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
856 NEXT_PASS (pass_inline_parameters);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
857 *p = NULL;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
858
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
859 /* Interprocedural optimization passes. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
860 p = &amp;all_ipa_passes;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
861 NEXT_PASS (pass_ipa_function_and_variable_visibility);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
862 NEXT_PASS (pass_ipa_early_inline);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
863 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
864 struct opt_pass **p = &amp;pass_ipa_early_inline.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
865 NEXT_PASS (pass_early_inline);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
866 NEXT_PASS (pass_inline_parameters);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
867 NEXT_PASS (pass_rebuild_cgraph_edges);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
868 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
869 NEXT_PASS (pass_early_local_passes);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
870 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
871 struct opt_pass **p = &amp;pass_early_local_passes.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
872 NEXT_PASS (pass_tree_profile);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
873 NEXT_PASS (pass_cleanup_cfg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
874 NEXT_PASS (pass_init_datastructures);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
875 NEXT_PASS (pass_expand_omp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
876
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
877 NEXT_PASS (pass_referenced_vars);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
878 NEXT_PASS (pass_reset_cc_flags);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
879 NEXT_PASS (pass_build_ssa);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
880 NEXT_PASS (pass_early_warn_uninitialized);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
881 NEXT_PASS (pass_all_early_optimizations);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
882 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
883 struct opt_pass **p = &amp;pass_all_early_optimizations.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
884 NEXT_PASS (pass_rebuild_cgraph_edges);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
885 NEXT_PASS (pass_early_inline);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
886 NEXT_PASS (pass_rename_ssa_copies);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
887 NEXT_PASS (pass_ccp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
888 NEXT_PASS (pass_forwprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
889 NEXT_PASS (pass_update_address_taken);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
890 NEXT_PASS (pass_sra_early);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
891 NEXT_PASS (pass_copy_prop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
892 NEXT_PASS (pass_merge_phi);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
893 NEXT_PASS (pass_cd_dce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
894 NEXT_PASS (pass_simple_dse);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
895 NEXT_PASS (pass_tail_recursion);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
896 NEXT_PASS (pass_convert_switch);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
897 NEXT_PASS (pass_profile);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
898 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
899 NEXT_PASS (pass_release_ssa_names);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
900 NEXT_PASS (pass_rebuild_cgraph_edges);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
901 NEXT_PASS (pass_inline_parameters);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
902 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
903 NEXT_PASS (pass_ipa_increase_alignment);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
904 NEXT_PASS (pass_ipa_matrix_reorg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
905 NEXT_PASS (pass_ipa_cp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
906 NEXT_PASS (pass_ipa_inline);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
907 NEXT_PASS (pass_ipa_reference);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
908 NEXT_PASS (pass_ipa_pure_const);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
909 NEXT_PASS (pass_ipa_type_escape);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
910 NEXT_PASS (pass_ipa_pta);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
911 NEXT_PASS (pass_ipa_struct_reorg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
912 *p = NULL;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
913
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
914 /* These passes are run after IPA passes on every function that is being
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
915 output to the assembler file. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
916 p = &amp;all_passes;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
917 NEXT_PASS (pass_all_optimizations);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
918 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
919 struct opt_pass **p = &amp;pass_all_optimizations.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
920 /* Initial scalar cleanups before alias computation.
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
921 They ensure memory accesses are not indirect wherever possible. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
922 NEXT_PASS (pass_strip_predict_hints);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
923 NEXT_PASS (pass_update_address_taken);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
924 NEXT_PASS (pass_rename_ssa_copies);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
925 NEXT_PASS (pass_complete_unrolli);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
926 NEXT_PASS (pass_ccp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
927 NEXT_PASS (pass_forwprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
928 /* Ideally the function call conditional
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
929 dead code elimination phase can be delayed
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
930 till later where potentially more opportunities
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
931 can be found. Due to lack of good ways to
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
932 update VDEFs associated with the shrink-wrapped
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
933 calls, it is better to do the transformation
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
934 here where memory SSA is not built yet. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
935 NEXT_PASS (pass_call_cdce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
936 /* pass_build_alias is a dummy pass that ensures that we
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
937 execute TODO_rebuild_alias at this point. Re-building
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
938 alias information also rewrites no longer addressed
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
939 locals into SSA form if possible. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
940 NEXT_PASS (pass_build_alias);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
941 NEXT_PASS (pass_return_slot);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
942 NEXT_PASS (pass_phiprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
943 NEXT_PASS (pass_fre);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
944 NEXT_PASS (pass_copy_prop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
945 NEXT_PASS (pass_merge_phi);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
946 NEXT_PASS (pass_vrp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
947 NEXT_PASS (pass_dce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
948 NEXT_PASS (pass_cselim);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
949 NEXT_PASS (pass_tree_ifcombine);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
950 NEXT_PASS (pass_phiopt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
951 NEXT_PASS (pass_tail_recursion);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
952 NEXT_PASS (pass_ch);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
953 NEXT_PASS (pass_stdarg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
954 NEXT_PASS (pass_lower_complex);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
955 NEXT_PASS (pass_sra);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
956 NEXT_PASS (pass_rename_ssa_copies);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
957 NEXT_PASS (pass_dominator);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
958 /* The only const/copy propagation opportunities left after
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
959 DOM should be due to degenerate PHI nodes. So rather than
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
960 run the full propagators, run a specialized pass which
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
961 only examines PHIs to discover const/copy propagation
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
962 opportunities. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
963 NEXT_PASS (pass_phi_only_cprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
964 NEXT_PASS (pass_dse);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
965 NEXT_PASS (pass_reassoc);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
966 NEXT_PASS (pass_dce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
967 NEXT_PASS (pass_forwprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
968 NEXT_PASS (pass_phiopt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
969 NEXT_PASS (pass_object_sizes);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
970 NEXT_PASS (pass_ccp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
971 NEXT_PASS (pass_copy_prop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
972 NEXT_PASS (pass_fold_builtins);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
973 NEXT_PASS (pass_cse_sincos);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
974 NEXT_PASS (pass_split_crit_edges);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
975 NEXT_PASS (pass_pre);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
976 NEXT_PASS (pass_sink_code);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
977 NEXT_PASS (pass_tree_loop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
978 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
979 struct opt_pass **p = &amp;pass_tree_loop.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
980 NEXT_PASS (pass_tree_loop_init);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
981 NEXT_PASS (pass_copy_prop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
982 NEXT_PASS (pass_dce_loop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
983 NEXT_PASS (pass_lim);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
984 NEXT_PASS (pass_predcom);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
985 NEXT_PASS (pass_tree_unswitch);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
986 NEXT_PASS (pass_scev_cprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
987 NEXT_PASS (pass_empty_loop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
988 NEXT_PASS (pass_record_bounds);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
989 NEXT_PASS (pass_check_data_deps);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
990 NEXT_PASS (pass_loop_distribution);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
991 NEXT_PASS (pass_linear_transform);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
992 NEXT_PASS (pass_graphite_transforms);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
993 NEXT_PASS (pass_iv_canon);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
994 NEXT_PASS (pass_if_conversion);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
995 NEXT_PASS (pass_vectorize);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
996 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
997 struct opt_pass **p = &amp;pass_vectorize.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
998 NEXT_PASS (pass_lower_vector_ssa);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
999 NEXT_PASS (pass_dce_loop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1000 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1001 NEXT_PASS (pass_complete_unroll);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1002 NEXT_PASS (pass_parallelize_loops);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1003 NEXT_PASS (pass_loop_prefetch);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1004 NEXT_PASS (pass_iv_optimize);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1005 NEXT_PASS (pass_tree_loop_done);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1006 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1007 NEXT_PASS (pass_cse_reciprocals);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1008 NEXT_PASS (pass_convert_to_rsqrt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1009 NEXT_PASS (pass_reassoc);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1010 NEXT_PASS (pass_vrp);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1011 NEXT_PASS (pass_dominator);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1012 /* The only const/copy propagation opportunities left after
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1013 DOM should be due to degenerate PHI nodes. So rather than
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1014 run the full propagators, run a specialized pass which
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1015 only examines PHIs to discover const/copy propagation
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1016 opportunities. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1017 NEXT_PASS (pass_phi_only_cprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1018 NEXT_PASS (pass_cd_dce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1019 NEXT_PASS (pass_tracer);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1020
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1021 /* FIXME: If DCE is not run before checking for uninitialized uses,
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1022 we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1023 However, this also causes us to misdiagnose cases that should be
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1024 real warnings (e.g., testsuite/gcc.dg/pr18501.c).
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1025
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1026 To fix the false positives in uninit-5.c, we would have to
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1027 account for the predicates protecting the set and the use of each
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1028 variable. Using a representation like Gated Single Assignment
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1029 may help. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1030 NEXT_PASS (pass_late_warn_uninitialized);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1031 NEXT_PASS (pass_dse);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1032 NEXT_PASS (pass_forwprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1033 NEXT_PASS (pass_phiopt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1034 NEXT_PASS (pass_tail_calls);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1035 NEXT_PASS (pass_rename_ssa_copies);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1036 NEXT_PASS (pass_uncprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1037 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1038 NEXT_PASS (pass_del_ssa);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1039 NEXT_PASS (pass_nrv);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1040 NEXT_PASS (pass_mark_used_blocks);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1041 NEXT_PASS (pass_cleanup_cfg_post_optimizing);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1042
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1043 NEXT_PASS (pass_warn_function_noreturn);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1044 NEXT_PASS (pass_free_datastructures);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1045 NEXT_PASS (pass_mudflap_2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1046
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1047 NEXT_PASS (pass_free_cfg_annotations);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1048 <em>NEXT_PASS (pass_expand);</em>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1049 NEXT_PASS (pass_rest_of_compilation);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1050 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1051 struct opt_pass **p = &amp;pass_rest_of_compilation.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1052 NEXT_PASS (pass_init_function);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1053 NEXT_PASS (pass_jump);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1054 NEXT_PASS (pass_rtl_eh);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1055 NEXT_PASS (pass_initial_value_sets);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1056 NEXT_PASS (pass_unshare_all_rtl);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1057 NEXT_PASS (pass_instantiate_virtual_regs);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1058 NEXT_PASS (pass_into_cfg_layout_mode);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1059 NEXT_PASS (pass_jump2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1060 NEXT_PASS (pass_lower_subreg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1061 NEXT_PASS (pass_df_initialize_opt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1062 NEXT_PASS (pass_cse);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1063 NEXT_PASS (pass_rtl_fwprop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1064 NEXT_PASS (pass_gcse);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1065 NEXT_PASS (pass_rtl_ifcvt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1066 /* Perform loop optimizations. It might be better to do them a bit
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1067 sooner, but we want the profile feedback to work more
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1068 efficiently. */
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1069 NEXT_PASS (pass_loop2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1070 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1071 struct opt_pass **p = &amp;pass_loop2.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1072 NEXT_PASS (pass_rtl_loop_init);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1073 NEXT_PASS (pass_rtl_move_loop_invariants);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1074 NEXT_PASS (pass_rtl_unswitch);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1075 NEXT_PASS (pass_rtl_unroll_and_peel_loops);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1076 NEXT_PASS (pass_rtl_doloop);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1077 NEXT_PASS (pass_rtl_loop_done);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1078 *p = NULL;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1079 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1080 NEXT_PASS (pass_web);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1081 NEXT_PASS (pass_jump_bypass);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1082 NEXT_PASS (pass_cse2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1083 NEXT_PASS (pass_rtl_dse1);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1084 NEXT_PASS (pass_rtl_fwprop_addr);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1085 NEXT_PASS (pass_reginfo_init);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1086 NEXT_PASS (pass_inc_dec);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1087 NEXT_PASS (pass_initialize_regs);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1088 NEXT_PASS (pass_outof_cfg_layout_mode);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1089 NEXT_PASS (pass_ud_rtl_dce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1090 NEXT_PASS (pass_combine);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1091 NEXT_PASS (pass_if_after_combine);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1092 NEXT_PASS (pass_partition_blocks);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1093 NEXT_PASS (pass_regmove);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1094 NEXT_PASS (pass_split_all_insns);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1095 NEXT_PASS (pass_lower_subreg2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1096 NEXT_PASS (pass_df_initialize_no_opt);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1097 NEXT_PASS (pass_stack_ptr_mod);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1098 NEXT_PASS (pass_mode_switching);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1099 NEXT_PASS (pass_see);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1100 NEXT_PASS (pass_match_asm_constraints);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1101 NEXT_PASS (pass_sms);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1102 NEXT_PASS (pass_sched);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1103 NEXT_PASS (pass_subregs_of_mode_init);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1104 NEXT_PASS (pass_ira);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1105 NEXT_PASS (pass_subregs_of_mode_finish);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1106 NEXT_PASS (pass_postreload);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1107 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1108 struct opt_pass **p = &amp;pass_postreload.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1109 NEXT_PASS (pass_postreload_cse);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1110 NEXT_PASS (pass_gcse2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1111 NEXT_PASS (pass_split_after_reload);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1112 NEXT_PASS (pass_branch_target_load_optimize1);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1113 NEXT_PASS (pass_thread_prologue_and_epilogue);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1114 NEXT_PASS (pass_rtl_dse2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1115 NEXT_PASS (pass_rtl_seqabstr);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1116 NEXT_PASS (pass_stack_adjustments);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1117 NEXT_PASS (pass_peephole2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1118 NEXT_PASS (pass_if_after_reload);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1119 NEXT_PASS (pass_regrename);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1120 NEXT_PASS (pass_cprop_hardreg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1121 NEXT_PASS (pass_fast_rtl_dce);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1122 NEXT_PASS (pass_reorder_blocks);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1123 NEXT_PASS (pass_branch_target_load_optimize2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1124 NEXT_PASS (pass_leaf_regs);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1125 NEXT_PASS (pass_split_before_sched2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1126 NEXT_PASS (pass_sched2);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1127 NEXT_PASS (pass_stack_regs);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1128 {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1129 struct opt_pass **p = &amp;pass_stack_regs.pass.sub;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1130 NEXT_PASS (pass_split_before_regstack);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1131 NEXT_PASS (pass_stack_regs_run);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1132 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1133 NEXT_PASS (pass_compute_alignments);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1134 NEXT_PASS (pass_duplicate_computed_gotos);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1135 NEXT_PASS (pass_variable_tracking);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1136 NEXT_PASS (pass_free_cfg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1137 NEXT_PASS (pass_machine_reorg);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1138 NEXT_PASS (pass_cleanup_barriers);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1139 NEXT_PASS (pass_delay_slots);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1140 NEXT_PASS (pass_split_for_shorten_branches);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1141 NEXT_PASS (pass_convert_to_eh_region_ranges);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1142 NEXT_PASS (pass_shorten_branches);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1143 NEXT_PASS (pass_set_nothrow_function_flags);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1144 NEXT_PASS (pass_final);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1145 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1146 NEXT_PASS (pass_df_finish);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1147 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1148 NEXT_PASS (pass_clean_state);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1149 *p = NULL;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1150 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1151 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1152 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1153 <p class="subtitle">RTL</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1154 <ul class="outline">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1155 <li>一般的には中間コードとも呼ばれる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1156 <li>アセンブラに変換する前の、アーキテクチャに依存しないマシン語表現</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1157 <li>RTLの例
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1158 <pre><code>(insn 27 26 0 quicksort/quicksort_cbc.cbc:29 (parallel [
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1159 (set (reg/f:SI 7 sp)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1160 (plus:SI (reg/f:SI 7 sp)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1161 (const_int -1024 [0xfffffc00])))
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1162 (clobber (reg:CC 17 flags))
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1163 ]) -1 (nil))
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1164 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1165 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1166 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1167 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1168
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1169 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1170 <h1>バックエンド</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1171 <p class="subtitle">RTLからアセンブラに変換する処理</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1172 <ul class="outline">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1173 <li><dfn>Machine Description(md)</dfn>と呼ばれる変換規則を用いる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1174 <li>アーキテクチャ毎にこのmdが必要になる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1175 <li>新しいアーキテクチャの対応はこのバックエンドを修正することになる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1176 <li>mdの例
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1177 <pre><code>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1178 (define_insn "cmpdi_ccno_1_rex64"
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1179 [(set (reg FLAGS_REG)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1180 (compare (match_operand:DI 0 "nonimmediate_operand" "r,?mr")
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1181 (match_operand:DI 1 "const0_operand" "")))]
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1182 "TARGET_64BIT &amp;&amp; ix86_match_ccmode (insn, CCNOmode)"
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1183 "@
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1184 test{q}\t%0, %0
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1185 cmp{q}\t{%1, %0|%0, %1}"
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1186 [(set_attr "type" "test,icmp")
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1187 (set_attr "length_immediate" "0,1")
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1188 (set_attr "mode" "DI")])
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1189
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1190 (define_insn "*cmpdi_minus_1_rex64"
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1191 [(set (reg FLAGS_REG)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1192 (compare (minus:DI (match_operand:DI 0 "nonimmediate_operand" "rm,r")
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1193 (match_operand:DI 1 "x86_64_general_operand" "re,mr"))
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1194 (const_int 0)))]
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1195 "TARGET_64BIT &amp;&amp; ix86_match_ccmode (insn, CCGOCmode)"
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1196 "cmp{q}\t{%1, %0|%0, %1}"
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1197 [(set_attr "type" "icmp")
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1198 (set_attr "mode" "DI")])
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1199 </code></pre></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1200 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1201 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1202
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1203 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1204 <h1>本研究での取り組み</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1205 <p class="subtitle">取り組み</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1206 <dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1207 <dt>First</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1208 <dd>GCCにて実用レベルのCbCプログラムを動作可能にする
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1209 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1210 <li>軽量継続の実装、これまでの制限の除去</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1211 <li>x86アーキテクチャにて高速化を行った</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1212 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1213 </dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1214 <dt>Second</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1215 <dd>C言語との互換性の向上</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1216 <dt>Third</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1217 <dd>ソースコードメンテナンス性の向上</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1218 </dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1219 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1220
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1221
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1222
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1223 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1224 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1225 <p class="subtitle">軽量継続を実装するには?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1226 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1227 <li>micro-cは元より軽量継続を考慮して良く設計されている</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1228 <li>GCCでは<em class="weak">あくまで関数</em>がベース</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1229 <li>micro-Cと同じ命令列を出力させるのは難しい</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1230 <li>関数コール(call命令)ではもちろんダメ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1231 <li>必ず<em>jmp命令</em>を出力しないといけない</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1232 <li>スタックを拡張するのもダメ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1233 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1234 <p class="subtitle"><dfn>末尾呼出</dfn>をGCCに<em>強制</em>させる必要がある</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1235 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1236
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1237 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1238 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1239 <p class="subtitle">末尾呼出ってなに?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1240 <img style="float:right; width:50%; margin:1em; " src="figures/tailcall.png" />
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1241 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1242 <li>リターンの直前の関数呼び出しのこと</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1243 <li>GCCが最適化してくれる (<em>TCE</em>)</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1244 <li>元の関数に戻らないため少し高速に</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1245 <li>スタックも積まなくてよいため、大幅なメモリ節約、アクセス軽減</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1246 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1247 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1248
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1249 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1250 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1251 <p class="subtitle">末尾呼出ってなに?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1252 <img style="float:right; width:50%; margin:1em; " src="figures/tailcallstack.png" />
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1253 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1254 <li>リターンの直前の関数呼び出しのこと</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1255 <li>GCCが最適化してくれる (<em>TCE</em>)</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1256 <li>元の関数に戻らないため少し高速に</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1257 <li>スタックも積まなくてよいため、大幅なメモリ節約、アクセス軽減</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1258 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1259 <p class="subtitle incremental">軽量継続ではこの末尾呼出(TCE)を強制する!</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1260 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1261
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1262 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1263 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1264 <p class="subtitle">末尾呼出による軽量継続の実装</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1265 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1266 <li>全ての軽量継続は末尾呼出と解釈する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1267 <li>変更箇所はGCCの<a href="#(10)">フロントエンド</a>での構文解析</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1268 <li><code>goto cs(20, 30);</code></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1269 <li><code>cs(20, 30); return;</code></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1270 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1271 <p class="subtitle">ある条件で末尾呼出が行われなくなる</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1272 <ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1273 <li>呼出先関数の全引数が占めるスタックサイズが、呼出元関数のそれより大きい場合</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1274 <li>引数を順にスタックに格納すると、書き込み前のデータが上書きされてしまう場合</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1275 </ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1276 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1277 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1278 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1279 <p class="subtitle">末尾呼出による軽量継続の実装</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1280 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1281 <li>全ての軽量継続は末尾呼出と解釈する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1282 <li>変更箇所はGCCの<a href="#(10)">フロントエンド</a>での構文解析</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1283 <li><code>goto cs(20, 30);</code></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1284 <li><code>cs(20, 30); return;</code></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1285 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1286 <p class="subtitle">ある条件で末尾呼出が行われなくなる</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1287 <ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1288 <li><del>呼出先関数の全引数が占めるスタックサイズが、呼出元関数のそれより大きい場合</del> <em class="weak">解決済み</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1289 <li><em>引数を順にスタックに格納すると、書き込み前のデータが上が着されてしまう場合</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1290 </ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1291 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1292
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1293
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1294 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1295 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1296 <p class="subtitle">引数順序の問題の解決</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1297 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1298 <li>問題となる例
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1299 <pre><code>code somesegment(int a, int b, int c) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1300 /∗ do something ∗/
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1301 goto nextsegment(b, c, a);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1302 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1303 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1304 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1305 <li><code>(a,b,c) = (b,c,a)</code>と本質的に同じ。これが<dfn>並列代入</dfn></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1306 <li><code>a=b,b=c,c=a</code>ではだめ。aの値が失われる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1307 <li>必ず一つ(1ワード)以上の一時変数が必要になる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1308 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1309
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1310 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1311
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1312 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1313 <h1>First: 軽量継続の実装</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1314 <p class="subtitle">全ての引数を一時変数に退避</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1315 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1316 <li>次の様に構文木を変更する
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1317 <pre><code>code somesegment(int a, int b, int c) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1318 int a1, b1, c1;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1319 /∗ do something ∗/
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1320 a1=a; b1=b; c1=c;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1321 goto nextsegment(b1, c1, a1);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1322 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1323 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1324 </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1325 <li>これにより、引数順序を考える必要はなくなる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1326 <li>代わりに、メモリアクセスが大量に発生</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1327 <li>しかし、これはGCCの最適化で除去される</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1328 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1329
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1330 <p class="subtitle">これで軽量継続が実装された</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1331 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1332
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1333
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1334 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1335 <h1>First: x86における高速化</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1336 <p class="subtitle">軽量継続は実装されたが、やはりmicro-cに比べると遅い</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1337 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1338 <li>特にx86アーキテクチャ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1339 <li><em class="weak">あくまで関数がベース</em>なので</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1340 <li>関数呼出規約に従い全ての引数をスタックに格納してしまう</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1341 <li>これをレジスタにすれば高速化が可能</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1342 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1343 <p class="subtitle">fastcallの導入</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1344 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1345 <li>GCCの独自拡張機能</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1346 <li>引数の最初の<em>2つのみレジスタに</em>保持するようになる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1347 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1348 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1349
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1350 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1351 <h1>First: x86における高速化</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1352 <p class="subtitle">fastcallの強制</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1353 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1354 <li>通常は以下の様に定義される
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1355 <pre><code>__code current(int a, int b, int c) __attribute__((fastcall));
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1356 </code></pre></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1357 <li>しかしこれを毎回ユーザが書くのは変</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1358 <li>やはりフロントエンドにて、強制するべき</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1359 <li>型の構文木を生成した際にfastcall属性を付加</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1360 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1361 <p class="subtitle">実際の出力はどうなる?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1362 <div style="width:70%;margin:1em auto 0;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1363 <pre><code>__code current(int a, int b, int c) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1364 goto next(10, 20, 30);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1365 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1366 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1367 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1368 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1369
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1370 <div class="slide" style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1371 <h1>First: x86における高速化</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1372 <p class="subtitle">実際の出力アセンブラ</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1373 <div style="width:50%;float:left;margin-left:auto;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1374 <p style="margin:0;text-align:center">fastcallにした場合</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1375 <pre><code>current:
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1376 subl $12, %esp
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1377 movl $30, 16(%esp)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1378 movl $20, %edx
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1379 movl $10, %ecx
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1380 addl $12, %esp
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1381 jmp next
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1382 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1383 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1384 <div style="width:50%;float:right;margin-right:auto;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1385 <p style="margin:0;text-align:center">normalcallの場合</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1386 <pre><code>current:
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1387 pushl %ebp
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1388 movl %esp, %ebp
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1389 movl $30, 16(%ebp)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1390 movl $20, 12(%ebp)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1391 movl $10, 8(%ebp)
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1392 leave
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1393 jmp next
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1394 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1395 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1396 <br clear="all" />
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1397 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1398 <li>命令数ではほとんど変化はない</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1399 <li>引数2つがレジスタecxとedxに格納されるようになった</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1400 <li>そのためメモリアクセスが減る</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1401 <li>これで高速化されるはず</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1402 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1403 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1404
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1405
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1406 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1407 <h1>First: CbCコンパイラ実装の評価</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1408 <p class="subtitle">CbCGCCとmicro-cで性能の比較</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1409 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1410 <li>CbCGCCが実用的になったことで、micro-cとの比較が可能に</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1411 <li>コンパイラの出力した実行ファイルを比較</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1412 <li>CbCでのquicksort例題を用意</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1413 <li>実行速度、ファイルサイズ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1414 <li>比較対象はまずは旧CbCGCC、それとmicro-c</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1415 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1416 <p class="subtitle">実行環境</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1417 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1418 <li>CbCGCC、micro-cでともに実行可能な環境を選択</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1419 <li>アーキテクチャは x86, PowerPC(Cell含む)</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1420 <li>OSはLinuxとOS Xを使用する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1421 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1422 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1423
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1424 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1425 <h1>First: 性能評価(速度比較) vs.旧ver</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1426 <p class="subtitle">速度測定結果(単位:秒)</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1427 <table>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1428 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1429 <th></th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1430 <th colspan="2">新CbCGCC</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1431 <th colspan="2">旧CbCGCC</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1432 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1433 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1434 <td></td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1435 <th>最適化無し</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1436 <th>最適化有り</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1437 <th>最適化無し</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1438 <th>最適化有り</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1439 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1440 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1441 <td>x86/OS X</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1442 <td>5.907</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1443 <td>2.434</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1444 <td>4.668</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1445 <td>3.048</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1446 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1447 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1448 <td>x86/Linux</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1449 <td>5.715</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1450 <td>2.401</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1451 <td>4.525</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1452 <td>2.851</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1453 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1454 </table>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1455 <p class="subtitle">評価</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1456 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1457 <li>最適化無の場合は遅くなった </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1458 <li>一時変数への確保があるのでこれは予想通り</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1459 <li>最適化を行うと、<em>約20%の高速化に成功</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1460 <li>fastcallの効果が十分に出ている</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1461 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1462 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1463
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1464
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1465 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1466 <h1>First: 性能評価(速度比較)</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1467 <p class="subtitle">速度測定結果(単位:秒)</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1468 <table>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1469 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1470 <td></td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1471 <td>最適化なしのGCC</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1472 <td>最適化付きのGCC</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1473 <td>micro-c</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1474 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1475 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1476 <td>x86/OS X</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1477 <td>5.901</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1478 <td>2.434</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1479 <td>2.857</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1480 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1481 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1482 <td>x86/Linux</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1483 <td>5.732</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1484 <td>2.401</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1485 <td>2.254</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1486 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1487 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1488 <td>ppc/OS X</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1489 <td>14.875</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1490 <td>2.146</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1491 <td>4.811</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1492 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1493 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1494 <td>ppc/Linux</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1495 <td>19.793</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1496 <td>3.955</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1497 <td>6.454</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1498 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1499 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1500 <td>ppc/PS3</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1501 <td>39.176</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1502 <td>5.874</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1503 <td>11.121</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1504 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1505 </table>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1506 <p class="subtitle">結果(micro-cとの比較)</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1507 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1508 <li>x86では速度にあまり差が出なかった</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1509 <li>x86に特化しているmicro-cと差がないのは<em>とても良い結果</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1510 <li>PowerPCではCbCGCCが<em>2倍ほど早い</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1511 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1512 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1513
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1514 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1515 <h1>First: 性能評価(速度比較)</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1516 <p class="subtitle">結果(micro-cとの比較)</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1517 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1518 <li>x86では速度にあまり差が出なかった</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1519 <li>PowerPCではCbCGCCが2倍ほど早い</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1520 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1521 <p class="subtitle">この違いはどこから?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1522 <ul style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1523 <li>実際にアセンブラを出力して比較、その結果</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1524 <li>x86は自由に使えるレジスタが少ないため、CbCGCCの最適化が効きにくい</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1525 <li>演算の度にメモリ読み込み、演算、書き込みが発生する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1526 <li><em>レジスタの多いアーキテクチャではCbCGCCが断然有利になる</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1527 <li>またCbC言語そのものもレジスタが多いアーキテクチャで有利</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1528 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1529 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1530
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1531 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1532 <h1>First: 性能評価(サイズ比較)</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1533 <p class="subtitle">ファイルサイズの比較</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1534 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1535 <li>組み込み系ではメモリ使用量が肝心</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1536 <li>CbCGCCのサイズ最適化、速度最適化も対象とする</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1537 <li>デバグ情報を付加しない、strip後のファイルサイズを比較</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1538 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1539 <p class="subtitle">結果</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1540 <table>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1541 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1542 <td></td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1543 <th>CbCGCC<br/>速度最適化</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1544 <th>CbCGCC<br/>サイズ最適化</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1545 <th>micro-c</th>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1546 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1547 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1548 <td>x86/OS X</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1549 <td>9176</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1550 <td>9176</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1551 <td>9172</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1552 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1553 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1554 <td>x86/Linux</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1555 <td>5752</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1556 <td>5752</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1557 <td>5796</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1558 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1559 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1560 <td>ppc/OS X</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1561 <td>8576</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1562 <td>8576</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1563 <td>12664</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1564 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1565 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1566 <td>ppc/Linux</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1567 <td>10068</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1568 <td>10068</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1569 <td>9876</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1570 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1571 <tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1572 <td>ppc/PS3</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1573 <td>6960</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1574 <td>6728</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1575 <td>8636</td>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1576 </tr>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1577 </table>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1578 <p class="subtitle">結果考察</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1579 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1580 <li>x86ではファイルサイズの差がない</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1581 <li>ppcではOSによって違うが、OS Xでは3分の2に抑えることができている</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1582 <li>サイズ最適化は必要ない、<em>速度最適化で充分</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1583 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1584 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1585
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1586
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1587 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1588 <h1>Second: Cとの相互利用</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1589 <p class="subtitle">なぜそれが必要か</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1590 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1591 <li>C &lt;=&gt; CbC の変換が可能なので互換性はある</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1592 <li>しかし、ソースコード上での互換性もある事が望ましい</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1593 <li>CbCからCの関数を呼び出すのは問題ない</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1594 <li>CからCbCのコードセグメントに継続するとスタックが保持されない</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1595 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1596 <p class="subtitle"><dfn>環境付き継続</dfn>の導入</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1597 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1598 <li>軽量継続に、スタックの情報を加える</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1599 <li>つまり通常の「継続」と同じ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1600 <li>関数からのみ使用可能</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1601 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1602 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1603
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1604 <div class="slide" style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1605 <h1>Second: Cとの相互利用</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1606 <pre style="float:right; width-max:45%">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1607 <code>typedef code (*NEXT)(int);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1608 int main(int argc, char **argv) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1609 int i,a;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1610 i = atoi(argv[1]);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1611 <em>a = factor(i);</em>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1612 printf("%d! = %d\n", a);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1613 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1614 int factor(int x) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1615 NEXT ret = <em>__return</em>;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1616 goto factor0(1, x, ret);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1617 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1618 code
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1619 factor0(int prod,int x,NEXT next) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1620 if (x &gt;= 1) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1621 goto factor0(prod*x, x-1, next);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1622 } else {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1623 <em>goto (*next)(prod);</em>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1624 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1625 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1626 </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1627 <p class="subtitle">環境付き継続の使用例</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1628 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1629 <li><code><em>__retunr</em></code>で表される特殊なコードセグメント</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1630 <li>コードセグメントからは通常のコードセグメントポインタに見える</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1631 <li>この<code>__return</code>に継続すると、元の関数の環境にリターン</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1632 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1633 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1634
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1635 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1636 <h1>Second: Cとの相互利用</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1637 <p class="subtitle">どのように実装する?</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1638 <ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1639 <li>setjmp()/longjmp()を使って実装可能
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1640 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1641 <li>Cの標準ライブラリの関数</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1642 <li>しかし余計な環境も保持するためオーバヘッドが大きい</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1643 <li>継続の際に渡す引数が一つ増えてしまう</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1644 </ul></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1645 <li>内部関数
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1646 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1647 <li>GCCの独自拡張</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1648 <li>関数内に関数を定義可能</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1649 <li><em>内部関数から外の関数のラベルにgotoできる</em></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1650 </ul></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1651 </ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1652 <p class="subtitle">内部関数が使いやすい</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1653 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1654
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1655 <div class="slide" style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1656 <h1>Second: Cとの相互利用</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1657 <p class="subtitle">具体的には</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1658 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1659 <li><code>__return</code>が参照された場合にGCCが自動で内部関数を定義する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1660 <li>内部関数の中からは外の関数にgotoして脱出</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1661 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1662 <pre><code>int factor(int x) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1663 int retval;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1664
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1665 <em class="weak">code __return(int val) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1666 retval = val;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1667 goto label;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1668 }
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1669 if (0) {
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1670 label:
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1671 return retval;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1672 }</em>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1673
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1674 NEXT ret = <em>__return</em>;
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1675 goto factor0(1, x, ret);
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1676 } </code></pre>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1677 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1678
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1679 <div class="slide" style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1680 <h1>Second: Cとの相互利用・評価</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1681 <p class="subtitle">この取り組みにより</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1682 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1683 <li>これにより、<dfn>C with Continuation</dfn> の仕様を満たした</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1684 <li>ソースコードレベルで、Cと相互に利用することが可能になった</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1685 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1686 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1687
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1688 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1689 <h1>Third: メンテナンス性の向上</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1690 <p class="subtitle">GCCのアップデートリリースは早い</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1691 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1692 <li>リリースだけで年に5回のペース</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1693 <li>その度にバグの修正やコードの改善が入る</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1694 <li>問題は、高い確率で、GIMPLEやRTLの処理がドラスティックに変更されること</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1695 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1696 <p class="subtitle">このリリースに追従して差分をアップデートしたい</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1697 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1698 <li>GCC本家にマージしてもらうのが一番良いが難しい</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1699 <li></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1700 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1701 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1702
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1703 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1704 <h1>Third: メンテナンス性の向上</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1705 <img style="width:60%;float:right;" src="figures/gcc-repository.png" />
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1706 <p class="subtitle">二つのリポジトリ管理</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1707 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1708 <li>本家のリリースをそのままコミットするリポジトリ GCC_copy</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1709 <li>CbCの修正が加えられたリポジトリ CbCGCC</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1710 <li>Mercurialによる分散リポジトリ管理</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1711 <li>CbCGCC は GCC_copyをクローン(ブランチ)して作成する</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1712 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1713 <p class="subtitle"></p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1714 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1715
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1716
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1717 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1718 <h1>Third: メンテナンス性の向上</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1719 <p class="subtitle">アップデート手順</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1720 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1721 <li>GCC-copyリポジトリにて
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1722 <ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1723 <li>GCC-copyリポジトリのファイルをすべて消す</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1724 <li>GCCの最新バージョンをリポジトリ内に展開</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1725 <li>追加ファイル、削除ファイルを確認</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1726 <li>コミット、タグ付け</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1727 </ol> </li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1728 <li>CbCGCCリポジトリにて
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1729 <ol>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1730 <li>GCC-copyからpull.</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1731 <li>hg mergeでマージ実行</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1732 <li>衝突があればソースコードをを修正</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1733 <li>ビルドテスト</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1734 <li>コミット、タグ付け</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1735 </ol></li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1736 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1737 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1738
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1739 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1740 <h1>Third: メンテナンス性の向上・比較</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1741 <p class="subtitle">これまでのアップデートは</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1742 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1743 <li>GCCの新旧の差分、CbCの差分</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1744 <li>複雑なdiffをとる必要がある</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1745 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1746 <p class="subtitle">新しい管理方法により</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1747 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1748 <li>「3.衝突があればソースコードを修正」以外は機械的に実行可能</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1749 <li>内部の設計が変わったなど、<em>重要な変更点にだけ集中</em>できる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1750 <li>分散管理にしたことで、移行用バージョンを分けることが可能になる</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1751 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1752 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1753
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1754 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1755 <h1>まとめ</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1756 <p class="subtitle">本研究での取り組み</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1757 <dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1758 <dt>First</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1759 <dd>CbCGCCにて実用レベルのCbCプログラムが動作可能となった
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1760 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1761 <li>軽量継続における引数順序の制限を取り除いた</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1762 <li>PowerPCでの間接継続の制限を取り除いた</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1763 <li>x86アーキテクチャにて高速化を行った</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1764 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1765 </dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1766 <dt>Second</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1767 <dd>Cとの相互利用性の向上</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1768 <dt>Third</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1769 <dd>ソースコードメンテナンス性の向上</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1770 </dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1771 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1772
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1773 <div class="slide" style="font-size:95%;">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1774 <h1>まとめ</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1775 <p class="subtitle">本研究での成果</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1776 <dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1777 <dt>成果1</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1778 <dd>CbCGCCがCとの相互利用も含むCbCのフルセットとして利用可能になった
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1779 <dt>成果2</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1780 <dd>CbCが多数のアーキテクチャに対応
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1781 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1782 <li>20以上のアーキテクチャ</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1783 <li>特に64bitのx86, SPUがうれしい</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1784 </ul> </dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1785 <dt>成果3</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1786 <dd>CbCの高速化
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1787 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1788 <li>x86においてもmicro-cと互角の速度を達成</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1789 <li>PowerPCでは2倍の速度</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1790 </ul></dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1791 <dt>成果4</dt>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1792 <dd>メンテナンス性が向上</dd>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1793 </dl>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1794 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1795
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1796 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1797 <h1>今後の課題</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1798 <p class="subtitle"></p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1799 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1800 <li>Real-time、組込み向けに実用的なCbCプログラムの例題</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1801 <li>タブロー方を用いた検証</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1802 <li>TaskManagerのCbC実装</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1803 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1804 <p class="subtitle">CbC言語の今後</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1805 <ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1806 <li>オブジェクティブなCbCの設計</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1807 <li>データセグメントの導入</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1808 <li>スケジューラのためのリフレクション</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1809 </ul>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1810 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1811
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1812
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1813 <div class="slide">
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1814 <h1>おわり</h1>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1815 <p class="subtitle">ありがとうございました</p>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1816 </div>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1817
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1818
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1819
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1820
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1821
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1822
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1823
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1824
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1825
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1826
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1827
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1828
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1829
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1830
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1831
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1832
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1833
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1834
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1835
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1836
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1837 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1838 <h1>Continuation based C</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1839 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1840 <li>言語仕様</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1841 <li>return-callから軽量継続へ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1842 <li>コードセグメント</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1843 <li>状態遷移に適した言語</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1844 <li>Cとの互換性</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1845 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1846 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1847
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1848
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1849 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1850 <h1></h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1851 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1852 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1853 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1854 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1855 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1856 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1857 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1858 <h1></h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1859 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1860 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1861 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1862 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1863 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1864 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1865
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1866 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1867 <h1></h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1868 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1869 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1870 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1871 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1872 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1873 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1874
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1875
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1876 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1877 <h1>First: PowerPCでの間接継続</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1878 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1879 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1880 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1881 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1882 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1883 <div style="width:70%;margin:1em auto 0;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1884 <pre><code>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1885 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1886 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1887 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1888
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1889 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1890 <h1>継続制御での並列代入</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1891 <p class="subtitle" style="margin:0 1em 0.1em;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1892 本当に最適化で余分なコードが消えるのか?
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1893 </p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1894 <div style="width:45%;float:left;margin-left:1em;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1895 最適化しない場合
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1896 <pre style="margin-top:0"><code> _test:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1897 stwu r1,-64(r1)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1898 mr r30,r1
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1899 stw r3,88(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1900 stw r4,92(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1901 stw r5,96(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1902 lwz r0,92(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1903 stw r0,32(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1904 lwz r0,96(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1905 addic r0,r0,1
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1906 stw r0,28(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1907 lwz r0,88(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1908 stw r0,24(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1909 lwz r3,32(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1910 lwz r4,28(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1911 lwz r5,24(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1912 addi r1,r30,64
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1913 lwz r30,-8(r1)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1914 lwz r31,-4(r1)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1915 b L_next$stub
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1916 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1917 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1918 <div style="width:45%;float:right;margin-right:1em;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1919 最適化した場合
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1920 <pre><code>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1921 _test:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1922 mr r0,r3
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1923 mr r3,r4
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1924 mr r4,r5
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1925 mr r5,r0
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1926 b L_next$stub
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1927 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1928 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1929 <div style="width:50%;float:right">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1930 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1931 <li>r3:=a, r4:=b, r5:=c</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1932 <li>最適化しないとload, storeが満載</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1933 <li>最適化すると無駄なload, store命令が消えている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1934 <li>実際はr0を使って4命令で入れ替えられる!</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1935 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1936 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1937 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1938
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1939 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1940 <h1>Cとの比較について</h1>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1941 <p class="subtitle">CbCとCの比較に関して</p>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1942 <ul>
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1943 <li>まだ例題を用意していない</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1944 <li>quicksortはスタックが必要となるため、Cに有利</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1945 <li>この例題ではプログラム上自前でスタックを用意している</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1946 <li>このメモリへのアクセスはスタックより重い</li>
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1947 <li>Cとの比較には状態遷移ベースの例題があった方が良い</li>
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1948 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1949 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1950
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1951
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1952
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1953
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1954
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1955
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1956
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1957
16
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1958
d9b85f041908 up recital
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
1959
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1960
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1961
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1962
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1963 </body>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1964 </html>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1965