Mercurial > hg > CbC > CbC_gcc
annotate CbC-memo.ja @ 151:2eca1fb48fa2
Added tag current for changeset 26042f4007d5
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 23 May 2020 14:59:38 +0900 |
parents | ab0bcb71f44d |
children |
rev | line source |
---|---|
112 | 1 GCC7 |
2 /gcc/c-decl.c | |
3 gcc/c-family/c-common.c | |
4 gcc/c-family/c-common.h | |
5 gcc/c-family/c-pretty-print.c | |
6 gcc/c-parser.c | |
7 gcc/c-tree.h | |
8 gcc/c-typeck.c | |
9 gcc/calls.c | |
10 gcc/cbc-tree.h | |
11 gcc/cfgexpand.c | |
12 gcc/config/i386/i386.c | |
13 gcc/config/i386/i386.md | |
14 gcc/config/rs6000/rs6000.md | |
15 gcc/configure.a | |
16 gcc/function.c | |
17 gcc/gcc.c | |
18 gcc/gimple.c | |
19 gcc/gimple.h | |
20 gcc/gimplify.c | |
21 gcc/passes.c | |
22 gcc/tree-ssa-operands.c | |
23 gcc/tree.c | |
24 gcc/tree.h | |
29
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 [[configureオプションの追加]] |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 $ cd gcc |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 $ vi configure.ac |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 ... |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 $ autoheader-2.59 # versionはconfigure.acの中に書いてある奴に合わせる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 $ autoconf-2.59 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 $ vi Makefile.in |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 これでconfigureスクリプトが完成するが、このautoconfはtarボールでは成功しない |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 svnリポジトリからチェックアウトしないと必要な関数が定義されてないのでエラーになる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 なのでチェックアウトしたものでconfigureを生成したあと、それだけコピーしてこればOK |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 TOPディレクトリでは |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 $ autogen Makefile.def |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 $ autoconf-2.59 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 ただしこれを使うことはないと思われる? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 [[fastcall i386]] |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 1: %ecx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 2: %edx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 3: (%esp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 4: 4(%esp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 5: 8(%esp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 __attribute__((noreturn)): 今のところこれでは問題が出ない |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 __attribute__((fastcall)): こっちはいろいろ問題あり |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 fastcallで起こる問題: |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 せっかく計算したebpが上書きされてしまっている |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 ecxに退避してそこにjmpすれば動く (これを直にかける?) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 expand_cbc_gotoを直す必要がある |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 08048714 <returner>: |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 8048714: 53 push %ebx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 8048715: 83 ec 28 sub $0x28,%esp |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 8048718: 89 4c 24 0c mov %ecx,0xc(%esp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 804871c: 8b 44 24 0c mov 0xc(%esp),%eax |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 8048720: 89 44 24 1c mov %eax,0x1c(%esp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 8048724: 8b 44 24 1c mov 0x1c(%esp),%eax |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 8048728: 8b 00 mov (%eax),%eax |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 804872a: 01 44 24 0c add %eax,0xc(%esp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 804872e: 8b 44 24 1c mov 0x1c(%esp),%eax |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 8048732: 8b 58 08 mov 0x8(%eax),%ebx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 8048735: 8b 44 24 1c mov 0x1c(%esp),%eax |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 8048739: 8b 40 04 mov 0x4(%eax),%eax |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 804873c: 8b 54 24 0c mov 0xc(%esp),%edx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 8048740: 89 c1 mov %eax,%ecx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 8048742: 83 c4 28 add $0x28,%esp |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 8048745: 5b pop %ebx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 8048746: ff e3 jmp *%ebx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 これを手動で直すと-O0でも-O2でも動くことが確認できた |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 **PROJECT CVS** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 firefly.cr:~one/CVS_DB/CbC_Project/GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 -checkout |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 cvs co CbC_project/GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 -commit |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 cvs commit |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 -import from 3rdparty source |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 tar xzvf gcc-xxx.tgz |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 cd gcc-xxx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 cvs import -ko -m ".." CbC/project/GCC FSF_GCC REL_4_x_y |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 -merge |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 cd /temp |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 cvs checkout -jREL_4_2_1 -jREL_xxx CbC_project/GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 もしくはすでに本流をcheckoutしているディレクトリで |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 cvs update -jREL_4_2_1 -jREL_4_2_2 でもできる? (4_2_2に移行時はこれをしたけど...まだ分かんない ) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 cvs update -jREL_4_2_2 -jREL_4_2_3 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 コンパイル時に実行されるプログラムは主に3つ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 省略すると |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 cc1, as, collect2 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 /usr/libexec/gcc/i386/redhat-linux/4.1.1/cc1 test.c -o test.s |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 as -o test.o test.s |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 /usr/libexec/gcc/i386/redhat/linux/4.1.1/collect2 ..... test.o |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 cc1とcollect2は |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 gcc-core-4.2.0/gcc/内でコンパイルされるもの。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 必要なのはcc1だ。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 CbCの実装 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 tail callを使う。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 tail call |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 関数の末尾呼び出しを最適化して、callでなくjmpで関数に飛ぶようになる。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 gcc -O1 -foptimize-sibling-calls か |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 gcc -O2 でコンパイルすればこの最適化が行われる。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 最適化条件? (構造体未確認) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 (推測!!) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 返り値が同じ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 呼ばれる関数の引数サイズが呼び出し側関数の引数サイズより小さい |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 expand_gimple_basic_blockでstatement毎にRTLに変換されているが、 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 ほとんどのstmtはexpand_expr_stmtに送られるけど、 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 tail call の場合は expand_gimple_tailcallに直接送られる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 **TEST BUILD** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 mkdir build-test |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 cd build-test |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 ../GCC/configure --disable-nls --disable-bootstrap --enable-languages=c --prefix=$PWD/installed --enable-checking=tree,rtl,assert |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 デバグのため、下の(a)を実行 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 make |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 make install # これまでしないと処理系によってはerrorがいくつか... |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 (a). 全てのMakefileの-O2 を -O0 に変更 viで :%s/-O2/-O0/gってとこか? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 どうやら --prefix=...って、ちゃんとしないといけない? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 stdio.hをインクルードしてるとエラーが出る。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 これはオレが失敗したのか?それともconfigureが悪いのか? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 $ CFLAGS="-O0 -gdwarf-2 -g3" ../GCC/configure ... |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 stdio.hをインクルードしたらerrorが出る問題 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 firefly: --prefix=$PWD/USR-LOCALあり、別ディレクトリ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 preinstall: NG postinstall: OK installed: OK |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 firefly: --prefixなし、別ディレクトリ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 preinstall: NG postinstall: ?? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 firefly: --prefixあり、同ディレクトリ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 preinstall: NG postinstall: OK installed: OK |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 firefly(nativePkg): --prefixなし、別ディレクトリ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 preinstall: NG |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 chani: --prefix=$PWD/installedあり、同ディレクトリ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 preinstall: OK |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 chani(nativePkg): --prefixなし、別ディレクトリ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 preinstall: OK |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 $PWD/installed/bin/gcc -O2 .... |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 $PWD/installed/libexec/gcc/i686-pc-linux-gnu/4.2.1/cc1 -O2 test01.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
170 browse_tree (tree) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
171 debug_rtx(rtl) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 **GCC DEBUG** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
176 gdb $BUILD-TEST/installed/libexec/gcc/i686-pc-linux-gnu/4.2.1/cc1 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
177 プログラム内で |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 p browse_tree (current_function_decl) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
181 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
182 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
183 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
184 cc1 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185 main.c, toplev.c, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
186 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 main() in main.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
188 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 toplev_main() in toplev.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 general_init(argv[0]) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 signal設定 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
192 init_gcc() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 decode_options(argc, argv) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 randomize() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
195 do_compile() in toplev.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 timevar_start(TV_TOTAL) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 process_options() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 compile_file() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
200 struct lang_hooks lang_hooks |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 この構造体にパーサ等の関数ポインタが含まれている。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202 これはlanghooks-def.hでLANG_HOOKS_INITIALIZERが定義されているが、 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 言語ごとの定義はcならc-objc-common.hで、各メンバの定義が入れ替えられる。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 options |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
206 decode_options -O?などのオプションを処理 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
207 handle_options その他のオプションを順番に走査 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 コンパイル対象のファイル名を main_input_filenameに入れる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 -で始まる引数があればhandle_optionを呼ぶ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 handle_option オプションを処理する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 compile_file() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 lang_hooks.parse_file() == c_common_parse_file |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 c_parse_file() in c-parser.c Parse a single source file. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216 c_parser_translation_unit() in c-parser.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 c_parser_external_declaration() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 c_parser_external_declaration() in c-parser.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 CPPのtokenはここで処理して通常のはc_parser_declaration_or_fndefに渡す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 全体を通して、c_parser *parserという変数が関数の第一引数に渡される。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 これがファイルをparseする際の状態を保持しているっぽい |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 c_parser_declaration_or_fndef() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 こいつがglobalな関数、変数の宣言を処理する。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 c_parser_declspecs() 基本type (int, char, strcut...) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 declspecs_add_scspec(specs, tree) extern,inline,staticなどのstorageをspecsにおさめる(specsのフラグをたてる) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 declspecs_add_type(specs, c_typespec t) int, char, longなど第2引数が型名、第1引数にそれを格納 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 finish_declspecs() Complexやunsignedなどの後に来る型名の処理? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
232 shadow_tag(specs) 名前無しのstructやunionを処理。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233 c_parser_declarator() 名前の前の*の処理 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 c_parser_direct_declarator() idを取得 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 c_parser_direct_declarator_inner() idの後の[]や()をパース |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 c_parser_parms_declarator() 引数リストもしくはidリスト(これはoldSTYLEのため) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 c_parser_parms_list_declarator() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 c_parser_parameter_declaration() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 通常の変数なら |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240 start_decl() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241 start_init() c_parser_initializer() finish_init() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
242 finish_decl() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 関数パラメータ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245 start_function() 関数のdeclaration treeを作成する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 treeはcurrent_function_declに保存 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 old-styleパラメータ(while c_parser_declaration_or_fndef(parser, f, f, t, f) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 fnbody = c_parser_compound_statement(parser) 関数本体の定義 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 add_stmt(fnbody) fnbodyを専用のstatement listに追加する gimplifyに使われる? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 finish_function() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 current_function_declからfndeclを取得 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 ...(fndecl) = pop_stmt_list(....(fndecl)) statement listからbodyを取得しfndeclにつなげる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 c_genericize(fndecl) convert LD-tree to LI-tree |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
254 c_gimple_diagnostics_recursively(fndecl) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
255 cgraph_finalize_function(fndecl,false) ファイルにアセンブラを出力? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
256 cgraph_assemble_pending_functions() in cgraphunit.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
257 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
258 関数とcode segment |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
259 code segmentはパース中の型はcts_CbC_codeとしてdeclspecsに保持している |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
260 finish_declspecsにおいて、treeを構成する際に型をvoid_type_nodeで格納 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
261 このvoid_typeになんらかのフラグをつける?それともfunction_typeにつける? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
262 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
263 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265 IDの取得 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 c_parser_declarator() 名前の前の*の処理 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 c_parser_direct_declarator() id or (.id)をパース |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
268 c_parser_direct_declarator_inner() idの後の[]や()をパース fnTreeを生成 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
269 c_parser_parms_declarator() 型なしidリスト(これはoldSTYLEのため) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
270 c_parser_parms_list_declarator() 型付き引数リストのパース 可変長かもみる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
271 c_parser_parameter_declaration() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
272 build_function_declarator() パースした引数とdelcで関数の宣言をつくる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
273 c_declarator->u.arg_infoに引数を保持 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
274 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
275 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
276 **expand_* treeをパースしてRTLを出力する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
277 tree_expand_cfg() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
278 expand_used_vars() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
279 expand_function_start(current_function_decl) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
280 cfunの値を設定して行く |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
281 assign_parms() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
282 ここでcfun->args_sizeが設定されている |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
283 expand_gimple_basic_block() in for-loop |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
284 expand_expr_stmt() in stmt.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
285 expand_expr() in expr.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
286 expand_expr_real() expr.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
287 expand_expr_real_1() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
288 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
289 expand_expr_real_1() expr.c:8210 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
290 expand_mult() expmed.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
291 expand_binop() optabs.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
292 GEN_FCN (icode) (temp, xop0, xop1); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
293 下の感じのRTLが返される |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
294 (set (reg:DF 67) (mult:DF (reg:DF 66) (reg/v:DF 64 [ d ]))) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
295 が、この関数が返すのは (reg:DF 67)だけ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
296 emit_insn(rtx) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
297 RTLをDL-listに追加する. rtxはinsnでなければinsnでラッピングされる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
298 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
299 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
300 **PASS LIST** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
301 関数ごとに出力する場合、 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
302 cgraph_assemble_pending_functions() flag_unit_at_a_timeが真なら実行 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
303 cgraph_expand_function() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
304 tree_rest_of_compilation |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
305 execute_pass_list |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
306 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
307 まとめて出力する場合 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
308 compile_file |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
309 lang_hooks.decls.final_write_globals = c_write_global_declarations flag_unit_at_a_timeが偽なら実行 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
310 cgraph_optimize |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
311 cgraph_expand_all_functions |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
312 cgraph_expand_function |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
313 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
314 GIMPLE treeから RTL への変換 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
315 pass.execute = tree_expand_cfg() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
316 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
317 RTLからアセンブラへの変換pass final.cで定義 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
318 pass_final.execute == rest_of_handle_final in final.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
319 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
320 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
321 最終的な RTL=>"文字列" 変換する pass |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
322 execute_one_pass() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
323 rest_of_handle_final() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
324 assemble_start_function() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
325 final_start_function() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
326 final() # insnリストを出力 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
327 final_scan_insn() # 与えられたinsnのアセンブラを出力 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
328 recog_memoized() # insn_data[code]のcode 決定 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
329 get_insn_template() # 出力するアセンブラのchar*文字列を返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
330 output_asm_insn() # 文字列の%..を修正してファイルに出力 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
331 final_end_function() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
332 assemble_end_function() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
333 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
334 RTLの仮想レジスタを物理レジスタに置き換える pass |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
335 execute_one_pass() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
336 instantiate_virtual_regs() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
337 instantiate_virtual_regs_in_insn() for each instruction |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
338 extract_insn() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
339 recog_memoized() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
340 insn_extract() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
341 ppcではこのrecog_memoizedで-1しか返ってこないことで落ちる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
342 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
343 下のmdのmatch_operand 0がaddressにしか対応してないのが問題だと思う |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
344 ;; sibling call patterns |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
345 (define_expand "sibcall" |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
346 [(parallel [(call (mem:SI (match_operand 0 "address_operand" "")) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
347 (match_operand 1 "" "")) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
348 (use (match_operand 2 "" "")) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
349 (use (reg:SI LR_REGNO)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
350 (return)])] |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
351 "" |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
352 " |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
353 { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
354 #if TARGET_MACHO |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
355 if (MACHOPIC_INDIRECT) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
356 operands[0] = machopic_indirect_call_target (operands[0]); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
357 #endif |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
358 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
359 gcc_assert (GET_CODE (operands[0]) == MEM); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
360 gcc_assert (GET_CODE (operands[1]) == CONST_INT); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
361 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
362 operands[0] = XEXP (operands[0], 0); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
363 }") |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
364 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
365 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
366 targetm.asm_outから出力 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
367 ターゲットマシンによってtargetm構造体の内容が変わる。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
368 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
369 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
370 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
371 /* In all nodes that are expressions, this is the data type of the expression. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
372 In POINTER_TYPE nodes, this is the type that the pointer points to. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
373 In ARRAY_TYPE nodes, this is the type of the elements. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
374 In VECTOR_TYPE nodes, this is the type of the elements. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
375 #define TREE_TYPE(NODE) ((NODE)->common.type) // in tree.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
376 このnodeの型を表す(functionなら関数の型、pointerならそいつのさしている型.. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
377 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
378 /* The tree-code says what kind of node it is. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
379 Codes are defined in tree.def. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
380 #define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code) // in tree.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
381 このnodeがどんなtreeなのかを表す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
382 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
383 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
384 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
385 c_parser_compound_statement() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
386 c_begin_compound_stmt() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
387 c_parser_compund_statement_nostart() __label__, lvarの処理 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
388 c_parser_statement_after_labels() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
389 c_end_compound_stmt() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
390 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
391 c_parser_if_statement() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
392 c_parser_do_statement() |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
393 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
394 c_parser_paren_condition() ifやwhileの'()'の中をparseする |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
395 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
396 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
397 parse expressions |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
398 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
399 c_parser_unary_expression() increment,decrement, &, *ポインタ、アドレスの処理 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
400 c_parser_postfix_expression() 数字や変数、文字列などの処理(TCCのunary()か) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
401 c_parser_postfix_expression_after_primary() 変数とかの後ろの'[]'や'()'の処理(関数や配列の添字) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
402 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
403 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
404 c_parser_* Cのパーサ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
405 build_* treeの生成 (Cパーサから呼ばれる) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
406 expand_* tree(gimple)のパーサ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
407 emit_* rtlの生成 (treeパーサから呼ばれる) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
408 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
409 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
410 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
411 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
412 宣言時の新しい識別子 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
413 token->type==CPP_NAME |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
414 build_id_declarator |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
415 XOBNEWを使って parser_obstackに作られる => gcc_obstack_init in default.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
416 変数名等を格納するc_declaratorはparser_obstack上に作られ、 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
417 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
418 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
419 tree.def |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
420 tree.[ch] |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
421 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
422 union tree_node GTY((ptr_alias (union lang_tree_node), |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
423 desc ("tree_node_structure (&%h)"))) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
424 { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
425 struct tree_common GTY ((tag ("IS_COMMON"))) common; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
426 struct tree_int_cst GTY ((tag ("IS_INT_CST"))) common; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
427 struct tree_real_cst GTY ((tag ("IS_REAL_CST"))) common; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
428 .. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
429 .. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
430 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
431 c-tree.h: |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
432 struct c_expr{ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
433 tree value; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
434 enum tree_code original_code; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
435 } |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
436 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
437 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
438 tokenizer |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
439 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
440 c_parser_peek_token() int c-parser.c 現在参照すべきtoken を返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
441 c_lex_one_token() in c-parser.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
442 c_lex_with_flags() in c-lex.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
443 cpp_get_token() in libcpp(macro.c) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
444 c_parser_next_token_is( parser, token0) tokenを取得し、それがtoken0ならtrue |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
445 c_parser_consume_token( parser) 次のtokenを取ってくる |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
446 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
447 parser->tokens[0,1] (c_token) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
448 この[0]に現在のtokenの情報がある。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
449 [1]はnext? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
450 新たなtokenはlibcppのcpp_get_tokenによって取得する。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
451 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
452 cppでは'!'や'*'などの一つ一つのtokenとなんらかの文字列を返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
453 予約語等の処理はgccがやる. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
454 token |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
455 struct c_token{ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
456 enum cpp_ttype type: 8; /* libcppで得られるtokenのtype, '<','==', name, '['などなど */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
457 enum c_id_kind id_kind: 8; /* type==CPP=NAMEの時のみ */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
458 enum rid keyword: 8; /* Cの予約語(int, if, typedef, gotoなど) */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
459 pragma_kind: 7; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
460 in_systemheader: 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
461 tree value; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
462 location_t location; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
463 } |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
464 enum cpp_ttype in libcpp/include/cpplib.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
465 { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
466 TTYPE_TABLE ==>> CPP_EQ, CPP_NOT, ... , CPP_NAME, ..., CPP_PADDING, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
467 N_TTYPES, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
468 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
469 /* Positions in the table. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
470 CPP_LAST_EQ = CPP_LSHIFT, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
471 CPP_FIRST_DIGRAPH = CPP_HASH, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
472 CPP_LAST_PUNCTUATOR= CPP_ATSIGN, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
473 CPP_LAST_CPP_OP = CPP_LESS_EQ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
474 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
475 本来予約語もCPP_NAMEに含まれるが、無理矢理CPP_KEYWORDを作っている |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
476 CPP_KEYWORDはc-parser.cで独自に定義、N_TTYPES+1 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
477 typedef enum c_id_kind { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
478 C_ID_ID, /* An ordinary identifier. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
479 C_ID_TYPENAME, /* An identifier declared as a typedef name. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
480 C_ID_CLASSNAME, /* An identifier declared as an Objective-C class name. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
481 C_ID_NONE /* Not an identifier. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
482 } c_id_kind; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
483 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
484 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
485 enum c_declarator_kind { /* in c-tree.h */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
486 cdk_id, /* An identifier. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
487 cdk_function, /* A function. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
488 cdk_array, /* An array. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
489 cdk_pointer, /* A pointer. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
490 cdk_attrs /* Parenthesized declarator with nested attributes. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
491 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
492 struct c_declarator { /* in c-tree.h */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
493 enum c_declarator_kind kind; /* The kind of declarator. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
494 struct c_declarator *declarator; /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
495 location_t id_loc; /* Currently only set for cdk_id. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
496 union { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
497 tree id; /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract declarator. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
498 struct c_arg_info *arg_info; /* For functions. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 struct { /* For arrays. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
500 tree dimen; /* The array dimension, or NULL for [] and [*]. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
501 int quals; /* The qualifiers inside []. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
502 tree attrs; /* The attributes (currently ignored) inside []. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
503 BOOL_BITFIELD static_p : 1; /* Whether [static] was used. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
504 BOOL_BITFIELD vla_unspec_p : 1; /* Whether [*] was used. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
505 } array; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
506 int pointer_quals; /* For pointers, the qualifiers on the pointer type. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
507 tree attrs; /* For attributes. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
508 } u; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
509 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
510 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
511 /* A type specifier keyword "void", "_Bool", "char", "int", "float", |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
512 "double", or none of these. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
513 enum c_typespec_keyword { //でも使われてるのはdeclspec |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
514 cts_none, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
515 cts_void, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
516 cts_CbC_code, いる? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
517 cts_bool, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
518 cts_char, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
519 cts_int, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
520 cts_float, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
521 cts_double, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
522 cts_dfloat32, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
523 cts_dfloat64, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
524 cts_dfloat128 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
525 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
526 enum c_typespec_kind { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
527 ctsk_resword, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
528 ctsk_tagref, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
529 ctsk_tagfirstref, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
530 /* A definition of a tag such as "struct foo { int a; }". */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
531 ctsk_tagdef, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
532 ctsk_typedef, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
533 ctsk_objc, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
534 ctsk_typeof |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
535 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
536 struct c_typespec { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
537 enum c_typespec_kind kind; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
538 tree spec; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
539 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
540 struct c_declspecs { /* c-tree.c */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
541 /* The type specified, if a single type specifier such as a struct, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
542 union or enum specifier, typedef name or typeof specifies the |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
543 whole type, or NULL_TREE if none or a keyword such as "void" or |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
544 "char" is used. Does not include qualifiers. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
545 tree type; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
546 /* The attributes from a typedef decl. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
547 tree decl_attr; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
548 /* When parsing, the attributes. Outside the parser, this will be |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
549 NULL; attributes (possibly from multiple lists) will be passed |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
550 separately. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
551 tree attrs; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
552 /* Any type specifier keyword used such as "int", not reflecting |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
553 modifiers such as "short", or cts_none if none. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
554 enum c_typespec_keyword typespec_word; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
555 /* The storage class specifier, or csc_none if none. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
556 enum c_storage_class storage_class; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
557 BOOL_BITFIELD declspecs_seen_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
558 BOOL_BITFIELD type_seen_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
559 BOOL_BITFIELD typedef_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
560 BOOL_BITFIELD default_int_p; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
561 BOOL_BITFIELD long_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
562 BOOL_BITFIELD long_long_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
563 BOOL_BITFIELD short_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
564 BOOL_BITFIELD signed_p : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
565 : |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
566 } |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
567 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
568 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
569 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
570 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
571 **TAIL CALL OPTIMIZATION** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
572 execute_tail_calls in tree-tailcall.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
573 tree_optimize_tail_calls_1(true) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
574 たいした調査もせず、簡単にフラグCALL_EXPR_TAILCALLをたててるだけ。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
575 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
576 expand_call 1834-3115 in calls.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
577 initialize_argument_information(); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
578 引数処理 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
579 引数をレジスタやスタックのどこに保存するかを決める |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
580 tree actparmsで示された引数をargs, args_sizeに格納する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
581 1011行目 We can't use sibcalls if a callee-copied argument is stored in the current function's frame. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
582 if statement 2200行目: try_tail_call=0 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
583 targetm.function_ok?for?sibcall(fndecl, exp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
584 args_size.constant > (current_function_args_size - current_function_pretend_args_size) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
585 emit_call_1(); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
586 SIBLING_CALL_P(..) = ( (ecf_flag & ECF_SIBLING) != 0); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
587 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
588 expand_callでtailcall可能かどうかの判定を詳しく行っているようだ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
589 bool try_tail_call = CALL_EXPR_TAILCALL(exp); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
590 2252あたりのfor文が怪しいが、900行ある。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
591 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
592 2252 in calls.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
593 for(pass = try_tail_call ? 0:1; pass<2; pass++) 2253-3087 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
594 2回ループ。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
595 1回目はtailcall用。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
596 2回目は普通のcalling |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
597 生成後にどちらかを選ぶ? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
598 2227 args_size.constant > (current_function_args_size - current_function_pretend_args_size) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
599 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
600 hard_function_value |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
601 check_sibcall_argument_overlap |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
602 prepare_call_address |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
603 load_register_parameters |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
604 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
605 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
606 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
607 Language Dependent Tree |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
608 v |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
609 GENERIC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
610 v |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
611 GIMPLE |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
612 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
613 GENERIC trees + LD trees |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
614 v |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
615 GIMPLE |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
616 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
617 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
618 **RTL** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
619 RTL expression |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
620 クラス: RTX_OBJ, RTX_CONST_OBJ, _COMPARE _COMM_COMPARE _UNARY ... in rtx.def |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
621 オペランド: e(expression), i(integer), w, s, E, ... |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
622 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
623 RTLへのアクセス |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
624 GET_CODE (RTX) (enum rtx_code) (RTX)->code |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
625 RTXのコード(種類)を返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
626 GET_RTX_CLASS (code) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
627 このrtxコードのクラスを返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
628 GET_RTX_LENGTH (code) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
629 このrtxコードのオペランドの数を返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
630 GET_RTX_FORMAT (code) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
631 オペランドの種類を文字列で返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
632 i.e. "iuuBieieee" on CALL_INSN |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
633 XEXP(RTX, N) X->u.fld[N].rt_rtx |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
634 RTX のN番目のオペランドをexpressionとして取得する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
635 XINT(RTX, N) X->u.fld[N].rt_int |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
636 RTX のN番目のオペランドをintegerとして取得する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
637 XVEC(RTX, N) X->u.fld[N].rt_rtvec |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
638 RTX のN番目のオペランドをrtvectorとして取得する |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
639 XVECEXP(RTX, N, M) XVEC(RTX,N)->elem[M] |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
640 RTX のN番目のオペランドをrtvectorとし、その M番目の要素を返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
641 XVECLEN(RTX, N) XVEC(RTX,N)->num_elem |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
642 RTX のN番目のオペランドをrtvectorとし、そのサイズを返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
643 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
644 struct rtvec_def GTY(()) { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
645 int num_elem; /* number of elements */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
646 rtx GTY ((length ("%h.num_elem"))) elem[1]; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
647 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
648 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
649 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
650 typedef struct trx_def *rtx; //gcc/coretypes.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
651 struct rtx_def; //gcc/rtl.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
652 struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
653 chain_prev ("RTX_PREV (&%h)"))) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
654 { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
655 /* The kind of expression this is. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
656 ENUM_BITFIELD(rtx_code) code: 16; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
657 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
658 /* The kind of value the expression has. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
659 ENUM_BITFIELD(machine_mode) mode : 8; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
660 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
661 /* 1 in a MEM if we should keep the alias set for this mem unchanged |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
662 when we access a component. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
663 1 in a CALL_INSN if it is a sibling call. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
664 1 in a SET that is for a return. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
665 In a CODE_LABEL, part of the two-bit alternate entry field. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
666 unsigned int jump : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
667 /* In a CODE_LABEL, part of the two-bit alternate entry field. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
668 1 in a MEM if it cannot trap. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
669 unsigned int call : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
670 /* 1 in a REG, MEM, or CONCAT if the value is set at most once, anywhere. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
671 1 in a SUBREG if it references an unsigned object whose mode has been |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
672 from a promoted to a wider mode. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
673 1 in a SYMBOL_REF if it addresses something in the per-function |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
674 constants pool. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
675 1 in a CALL_INSN, NOTE, or EXPR_LIST for a const or pure call. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
676 1 in a JUMP_INSN, CALL_INSN, or INSN of an annulling branch. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
677 unsigned int unchanging : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
678 /* 1 in a MEM or ASM_OPERANDS expression if the memory reference is volatile. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
679 1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL, BARRIER, or NOTE |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
680 if it has been deleted. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
681 1 in a REG expression if corresponds to a variable declared by the user, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
682 0 for an internally generated temporary. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
683 1 in a SUBREG with a negative value. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
684 1 in a LABEL_REF or in a REG_LABEL note for a non-local label. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
685 In a SYMBOL_REF, this flag is used for machine-specific purposes. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
686 unsigned int volatil : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
687 /* 1 in a MEM referring to a field of an aggregate. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
688 0 if the MEM was a variable or the result of a * operator in C; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
689 1 if it was the result of a . or -> operator (on a struct) in C. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
690 1 in a REG if the register is used only in exit code a loop. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
691 1 in a SUBREG expression if was generated from a variable with a |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
692 promoted mode. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
693 1 in a CODE_LABEL if the label is used for nonlocal gotos |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
694 and must not be deleted even if its count is zero. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
695 1 in an INSN, JUMP_INSN or CALL_INSN if this insn must be scheduled |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
696 together with the preceding insn. Valid only within sched. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
697 1 in an INSN, JUMP_INSN, or CALL_INSN if insn is in a delay slot and |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
698 from the target of a branch. Valid from reorg until end of compilation; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
699 cleared before used. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
700 unsigned int in_struct : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
701 /* At the end of RTL generation, 1 if this rtx is used. This is used for |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
702 copying shared structure. See `unshare_all_rtl'. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
703 In a REG, this is not needed for that purpose, and used instead |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
704 in `leaf_renumber_regs_insn'. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
705 1 in a SYMBOL_REF, means that emit_library_call |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
706 has used it as the function. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
707 unsigned int used : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
708 /* 1 in an INSN or a SET if this rtx is related to the call frame, |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
709 either changing how we compute the frame address or saving and |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
710 restoring registers in the prologue and epilogue. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
711 1 in a REG or MEM if it is a pointer. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
712 1 in a SYMBOL_REF if it addresses something in the per-function |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
713 constant string pool. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
714 unsigned frame_related : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
715 /* 1 in a REG or PARALLEL that is the current function's return value. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
716 1 in a MEM if it refers to a scalar. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
717 1 in a SYMBOL_REF for a weak symbol. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
718 unsigned return_val : 1; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
719 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
720 /* The first element of the operands of this rtx. |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
721 The number of operands and their types are controlled |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
722 by the `code' field, according to rtl.def. */ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
723 union u { |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
724 rtunion fld[1]; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
725 HOST_WIDE_INT hwint[1]; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
726 struct block_symbol block_sym; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
727 struct real_value rv; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
728 } GTY ((special ("rtx_def"), desc ("GET_CODE (&%0)"))) u; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
729 }; |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
730 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
731 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
732 FUNCTION_TYPEの実態はtree_type |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
733 make_node_stat(FUNCTION_TYPE)で作成される |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
734 TREE_TYPE |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
735 TYPE_ARG_TYPES ->type.values |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
736 TYPE_UID ->type.uid |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
737 TYPE_ALIGN ->type.align |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
738 TYPE_USER_ALIGN ->type.user_align |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
739 TYPE_MAIN_VARIANT ->type.main_variant |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
740 TYPE_ATTRIBUTES ->type.attributes |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
741 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
742 こいつの lang_flag_6 ビットフィールドをcode segmentかどうかのフラグとする。 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
743 #define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type.lang_flag_5) //tree.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
744 #define CbC_IS_CODE_SEGMENT(TYPE) TYPE_LANG_FLAG_5 (TYPE) //c-tree.h |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
745 code segmentを作ったらCbC_IS_CODE_SEGMENT(type) = 1 でセット できる? |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
746 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
747 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
748 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
749 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
750 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
751 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
752 **GENERIC TREE** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
753 関数の型 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
754 <function_type 0xb7b7d9b4 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
755 type <real_type 0xb7b72a6c double DF |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
756 size <integer_cst 0xb7b60528 constant invariant 64> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
757 unit size <integer_cst 0xb7b60540 constant invariant 8> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
758 align 64 symtab 0 alias set -1 precision 64 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
759 pointer_to_this <pointer_type 0xb7b72b80>> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
760 QI |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
761 size <integer_cst 0xb7b601f8 type <integer_type 0xb7b7205c bit_size_type> constant invariant 8> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
762 unit size <integer_cst 0xb7b60210 type <integer_type 0xb7b72000 unsigned int> constant invariant 1> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
763 align 8 symtab 0 alias set -1 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
764 arg-types <tree_list 0xb7b7c8a0 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
765 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
766 関数の宣言 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
767 <function_decl |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
768 type <function_type ... >> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
769 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
770 関数の引数 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
771 <tree_list |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
772 value <integer_type |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
773 size <integer_cst ...> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
774 unit size <integer_cst ...> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
775 align 32 .... <integer_cst ...> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
776 chain <tree_list ...>> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
777 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
778 配列 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
779 <array_type 0xb7f04170 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
780 type <integer_type 0xb7e7f284 int public SI ... > |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
781 BLK |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
782 size <integer_cst 0xb7f02f18 type <integer_type 0xb7e7f05c bit_size_type> constant invariant 320> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
783 unit size <integer_cst 0xb7f05030 type <integer_type 0xb7e7f000 unsigned int> constant invariant 40> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
784 align 32 symtab 0 alias set -1 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
785 domain <integer_type 0xb7f04114 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
786 type <integer_type 0xb7e7f000 unsigned int public unsigned sizetype SI size <integer_cst 0xb7e6d3f0 32> unit size <integer_cst 0xb7e6d180 4> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
787 align 32 symtab 0 alias set -1 precision 32 min <integer_cst 0xb7e6d468 0> max <integer_cst 0xb7e6d9f0 -1>> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
788 SI size <integer_cst 0xb7e6d3f0 32> unit size <integer_cst 0xb7e6d180 4> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
789 align 32 symtab 0 alias set -1 precision 32 min <integer_cst 0xb7e6d198 0> max <integer_cst 0xb7f02fc0 9>>> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
790 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
791 関数呼び出し |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
792 <call_expr 0xb7e52078 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
793 type <real_type 0xb7e55a6c double DF ...> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
794 side-effects arg 0 <addr_expr 0xb7ed2080 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
795 type <pointer_type 0xb7eda170 type <function_type 0xb7ecff18> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
796 unsigned SI |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
797 size <integer_cst 0xb7e433f0 constant invariant 32> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
798 unit size <integer_cst 0xb7e43180 constant invariant 4> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
799 align 32 symtab 0 alias set -1> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
800 constant invariant |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
801 arg 0 <function_decl 0xb7ed15b0 test type <function_type 0xb7ecff18> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
802 addressable used public external decl_5 QI defer-output file test_tree.c line 2>> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
803 arg 1 <tree_list 0xb7edb138 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
804 value <integer_cst 0xb7edb030 constant invariant 97> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
805 chain <tree_list 0xb7edb168 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
806 value <integer_cst 0xb7edb060 constant invariant 98> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
807 chain <tree_list 0xb7edb180 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
808 value <integer_cst 0xb7edb090 constant invariant 10> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
809 chain <tree_list 0xb7edb198 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
810 value <real_cst 0xb7edb0c0 type <real_type 0xb7e55a6c double> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
811 constant invariant 2.5e+0>>>>>> |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
812 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
813 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
814 build_function_call(tree fndecl, tree exprlist) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
815 FUNCTION_DECLとEXPRのリストからCALL_EXPRを作って返す |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
816 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
817 convert_arguments(arglist, params, function, fundecl); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
818 check_function_arguments(); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
819 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
820 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
821 配列の作り方 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
822 icst : INTEGER_CST |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
823 itype: INTEGER_TYPE |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
824 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
825 icst = build_int_cst (NULL_TREE, size-1); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
826 itype = build_index_type (icst); |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
827 array = build_array_type |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
828 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
829 //build_range_type(size_type, integer_zero_node, exp) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
830 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
831 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
832 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
833 **PPC** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
834 http://developer.apple.com/documentation/DeveloperTools/Reference/Assembler/ASMIntroduction/chapter_1_section_1.html |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
835 http://developer.apple.com/documentation/DeveloperTools/Conceptual/LowLevelABI/Articles/32bitPowerPC.html#//apple_ref/doc/uid/TP40002438-SW17 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
836 http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
837 http://www.freescale.co.jp/pdf/MPCFPE32BJ_R1a.pdf |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
838 http://www.nk.rim.or.jp/~jun/ppcasm/ppcasm01.html |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
839 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
840 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
841 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
842 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
843 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
844 **ソースコード読み会 準備** |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
845 cd ~/public_html |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
846 mkdir gcc; cd gcc |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
847 checkout CbC_project/GCC; CbC_project/GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
848 ./configure --... |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
849 make |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
850 gtags |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
851 htags -Ffx -t 'GCC source tour' |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
852 cd ../../ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
853 tar -czv CbC_project --exclude **/CVS -f GCC-source-....tar.gz |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
854 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
855 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
856 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
857 normal tail call |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
858 (call_insn/j 24 23 0 (parallel [ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
859 (call (mem:SI (symbol_ref:SI ("cs0") [flags 0x403] <function_decl 0x42e03980 cs0>) [0 S4 A8]) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
860 (const_int 256 [0x100])) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
861 (use (const_int 0 [0x0])) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
862 (use (reg:SI 125)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
863 (return) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
864 ]) -1 (nil) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
865 (expr_list:REG_EH_REGION (const_int 0 [0x0]) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
866 (nil)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
867 (expr_list:REG_DEP_TRUE (use (reg:SI 6 r6)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
868 (expr_list:REG_DEP_TRUE (use (reg:SI 5 r5)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
869 (expr_list:REG_DEP_TRUE (use (reg:SI 4 r4)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
870 (expr_list:REG_DEP_TRUE (use (reg:SI 3 r3)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
871 (nil)))))) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
872 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
873 indirect tail call |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
874 (call_insn/j 25 24 0 (parallel [ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
875 (call (mem:SI (reg/f:SI 129) [0 S4 A8]) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
876 (const_int 256 [0x100])) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
877 (use (const_int 0 [0x0])) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
878 (use (reg:SI 130)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
879 (return) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
880 ]) -1 (nil) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
881 (nil) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
882 (expr_list:REG_DEP_TRUE (use (reg:SI 6 r6)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
883 (expr_list:REG_DEP_TRUE (use (reg:SI 5 r5)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
884 (expr_list:REG_DEP_TRUE (use (reg:SI 4 r4)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
885 (expr_list:REG_DEP_TRUE (use (reg:SI 3 r3)) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
886 (nil)))))) |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
887 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
888 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
889 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
890 CFLAGS='-O0 -gdwarf-2 -g3' ../GCC/configure --disable-nls --disable-bootstrap --enable-languages=c --prefix=$PWD/INSTALL-DIR --enable-checking=tree,rtl,assert --disable-shared --disable-threads --with-headers --with-system-zlib --with-newlib --enable-version-specific-runtime-libs --disable-libssp --target=spu |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
891 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
892 ../toolchain/gcc/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --disable-shared --disable-threads --disable-checking --with-headers --with-system-zlib --with-newlib --enable-languages=c,c++,fortran --disable-nls --enable-version-specific-runtime-libs --disable-libssp --program-prefix=spu- --target=spu |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
893 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
894 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
895 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
896 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
897 $ cvs checkout CbC_project/GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
898 $ mkdir tmp; cd tmp |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
899 $ wget http://www.bsc.es/projects/deepcomputing/linuxoncell/cellsimulator/sdk3.0/SRPMS/spu-gcc-4.1.1-107.src.rpm |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
900 $ rpm2cpio spu-gcc--4.1.1-107.src.rpm | cpio -i -v |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
901 $ tar xjvf gcc-r886.tar.bz2 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
902 $ cat *.diff | patch -d ../CbC_project/GCC -p2 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
903 $ cp toolchain/gcc/config.sub ../CbC_project/GCC/ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
904 $ cp toolchain/gcc/gcc/config.gcc ../CbC_project/GCC/gcc/ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
905 $ cd ../CbC_project/GCC |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
906 $ |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
907 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
908 |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
909 change bit_merge to vec_merge in gcc/config/spu/spu.md |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
910 split0_completed; in recog.c, rtl.h, final.c |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
911 SPU_FLOAT_FORMAT |
cc07adb17855
deleting old commented out code.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
912 : |