annotate gcc/ChangeLog.CbC @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 5066dc73ff8f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 2009-08-20 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 どうも、goto hoge(0),env; で、env を渡すのがよろしくない。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 goto hoge(0,env);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 と言う形にして、hoge 側で env を設定するのはどうか?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 __code main_return2_1(int i,stack sp) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 goto (( (struct main_continuation *)sp)->main_ret)(0),
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 ((struct main_continuation *)sp)->env;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 を、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 __code main_return2_1(int i,stack sp) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 goto (( (struct main_continuation *)sp)->main_ret)(0,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 ((struct main_continuation *)sp)->env);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 という形にする。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 そうすれば、goto 文は、かなり簡単になる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 2009-08-20 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 以下のようにすれば良いらしい... いっそ #define でも出来るが。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 extern int printf(const char *, ...);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 void g( void (*ret)(int retval_,void *f) , void *fp) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 printf("g: fp = 0x%x\n",__builtin_frame_address(0));
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 (*ret)(5,fp);
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 int f()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 int retval = 1;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 void (*ret)(int retval_,void *fp) ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 ret = ({
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 __label__ exit0;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 volatile static flag = 0;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 void __return_func(int retval_,void *fp) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 retval = retval_;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 goto exit0;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 if (flag) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 exit0:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 printf("f1: fp = 0x%x\n",__builtin_frame_address(0));
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 return retval;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 __return_func;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 });
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 printf("f0: fp = 0x%x\n",__builtin_frame_address(0));
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 g(ret,__builtin_frame_address(0));
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 printf("bad\n");
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 return retval;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 int
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 main()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 printf("%d\n",f());
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69