annotate test/test1.c @ 752:a38f18a08b30

i64 continue... struct
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 14 Nov 2010 05:16:14 +0900
parents c2c709727221
children 5313ed059cee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
725
3f1f6c0610c1 goto with enviornment syntax changed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
1 #define __environment _CbC_environment
3f1f6c0610c1 goto with enviornment syntax changed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
2 #define __return _CbC_return
3f1f6c0610c1 goto with enviornment syntax changed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
3
449
c55363eff5e5 parallel assignment (modify not completed)
kono
parents: 427
diff changeset
4 /*
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
5 test for CbC converted __code from C
449
c55363eff5e5 parallel assignment (modify not completed)
kono
parents: 427
diff changeset
6 */
c55363eff5e5 parallel assignment (modify not completed)
kono
parents: 427
diff changeset
7
720
6b7372e17970 *** empty log message ***
kono
parents: 622
diff changeset
8 #include <stdio.h>
6b7372e17970 *** empty log message ***
kono
parents: 622
diff changeset
9
6b7372e17970 *** empty log message ***
kono
parents: 622
diff changeset
10 extern void *malloc(int);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
11
172
096559f07a70 some check
kono
parents: 17
diff changeset
12 typedef void *stack;
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
13
449
c55363eff5e5 parallel assignment (modify not completed)
kono
parents: 427
diff changeset
14 void *stack0; /* size of void* == 1 */
c55363eff5e5 parallel assignment (modify not completed)
kono
parents: 427
diff changeset
15
172
096559f07a70 some check
kono
parents: 17
diff changeset
16 struct cont_save { /* General Return Continuation */
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
17 __code (*ret)();
172
096559f07a70 some check
kono
parents: 17
diff changeset
18 };
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
19
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
20 /*
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
21 __code g(int,void *);
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
22 __code f_g0(int ,int ,void *);
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
23 __code f_g1(int,void *);
172
096559f07a70 some check
kono
parents: 17
diff changeset
24 */
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
25
172
096559f07a70 some check
kono
parents: 17
diff changeset
26 struct f_g0_save { /* Specialized Return Continuation */
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
27 __code (*ret)();
172
096559f07a70 some check
kono
parents: 17
diff changeset
28 int ii,kk,jj;
096559f07a70 some check
kono
parents: 17
diff changeset
29 };
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
30
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
31 __code g(int i,void *sp) {
172
096559f07a70 some check
kono
parents: 17
diff changeset
32 goto (* ((struct cont_save *)sp)->ret)(i+4,sp);
096559f07a70 some check
kono
parents: 17
diff changeset
33 }
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
34
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
35 __code f_g1(int j,void *sp) { /* Continuation */
172
096559f07a70 some check
kono
parents: 17
diff changeset
36 int k;
096559f07a70 some check
kono
parents: 17
diff changeset
37 struct f_g0_save *c;
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
38
172
096559f07a70 some check
kono
parents: 17
diff changeset
39 c = sp;
096559f07a70 some check
kono
parents: 17
diff changeset
40 k = c->kk;
096559f07a70 some check
kono
parents: 17
diff changeset
41 sp += sizeof(struct f_g0_save);
096559f07a70 some check
kono
parents: 17
diff changeset
42 goto (* ((struct cont_save *)sp)->ret)(k+4+j,sp);
096559f07a70 some check
kono
parents: 17
diff changeset
43 }
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
44
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
45 __code f(int i,void *sp) {
172
096559f07a70 some check
kono
parents: 17
diff changeset
46 int k,j;
096559f07a70 some check
kono
parents: 17
diff changeset
47 struct f_g0_save *c;
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
48 printf("#0047:f 0 sp: %x\n",sp-stack0);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
49
172
096559f07a70 some check
kono
parents: 17
diff changeset
50 k = 3+i;
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
51
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
52 printf("#0051:f 1 sp: %x\n",sp-stack0);
172
096559f07a70 some check
kono
parents: 17
diff changeset
53 sp -= sizeof(struct f_g0_save);
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
54 printf("#0053:f 2 sp: %x\n",sp-stack0);
172
096559f07a70 some check
kono
parents: 17
diff changeset
55 c = sp;
096559f07a70 some check
kono
parents: 17
diff changeset
56 c->kk = k;
096559f07a70 some check
kono
parents: 17
diff changeset
57 c->ii = i;
096559f07a70 some check
kono
parents: 17
diff changeset
58 c->jj = j;
096559f07a70 some check
kono
parents: 17
diff changeset
59 c->ret = f_g1;
096559f07a70 some check
kono
parents: 17
diff changeset
60 goto g(i,sp);
096559f07a70 some check
kono
parents: 17
diff changeset
61 }
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
62
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
63
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
64
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
65 struct f0_save { /* Specialized Return Continuation */
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
66 __code (*ret)();
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
67 __code (*exit1)();
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
68 void *exit1env;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
69 int jj;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
70 };
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
71
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
72 __code f1(int i,void *sp) ;
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
73 __code f0(int i,int j,__code(*exit2)(), void *exit2env,void *sp)
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
74 {
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
75 struct f0_save *c;
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
76 printf("#0075:f0 1 sp: %x\n",sp-stack0);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
77 sp -= sizeof(struct f0_save);
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
78 printf("#0077:f0 2 sp: %x\n",sp-stack0);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
79 c = sp;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
80 c->jj = j;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
81 c->exit1 = exit2;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
82 c->exit1env = exit2env;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
83 c->ret = f1;
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
84 printf("#0083:f0 3 sp: %x\n",sp-stack0);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
85 goto f(i,sp);
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
86 }
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
87
729
07dce42b67af examples for gcc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
88 __code print(int i,int j,__code (*exit1)(),void*exit1env);
07dce42b67af examples for gcc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 725
diff changeset
89
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
90 __code f1(int i,void *sp) {
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
91 int j;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
92 int *exit2env;
622
682c8ec38d45 _code へ
kono
parents: 573
diff changeset
93 __code (*exit2)();
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
94 struct f0_save *c;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
95
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
96 c = sp;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
97 j = c->jj;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
98 exit2 = c->exit1;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
99 exit2env = c->exit1env;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
100
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
101 sp += sizeof(struct f0_save);
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
102 goto print(i,j,exit2,exit2env);
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
103 }
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
104
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
105 int main( int ac, char *av[])
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
106 {
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
107 int i,j;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
108 int *sp;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
109
172
096559f07a70 some check
kono
parents: 17
diff changeset
110 // i = atoi(av[1]);
096559f07a70 some check
kono
parents: 17
diff changeset
111 i = 1;
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
112 stack0 = ((char *)malloc(1024)+1024);
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
113 sp = stack0;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
114 j = i;
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
115
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
116 printf("#0115:sp: %x %x\n",sp-(int*)stack0,sizeof(*stack0));
720
6b7372e17970 *** empty log message ***
kono
parents: 622
diff changeset
117 goto f0(i,j,__return,__environment,sp);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
118 }
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
119
720
6b7372e17970 *** empty log message ***
kono
parents: 622
diff changeset
120 __code print(int i,int j,__code (*exit1)(),void*exit1env)
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
121 {
748
c2c709727221 i64 continue... basic.s assembled.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 729
diff changeset
122 printf("#0121:%d %d\n",i,j);
725
3f1f6c0610c1 goto with enviornment syntax changed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 720
diff changeset
123 goto (*exit1)(0,exit1env);
17
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
124 }
fdbf2fbc8140 *** empty log message ***
kono
parents:
diff changeset
125