Mercurial > hg > CbC > CbC_gcc
annotate CbC-examples/test05.c @ 117:f81c5aa9f14f
fix
author | mir3636 |
---|---|
date | Tue, 28 Nov 2017 21:17:15 +0900 |
parents | f9b1a53df341 |
children | 5d30d517ebed |
rev | line source |
---|---|
27
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
1 //#include<stdio.h> |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
2 #define dprint(f, args...) \ |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
3 printf("in %s: "f, __FUNCTION__, ## args) |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
4 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
5 __code caller (int a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
6 void f01 (int a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
7 void f02 (int a, float b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
8 __code cs01 (int a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
9 __code cs02 (int a, float b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
10 int main (); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
11 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
12 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
13 int g=0; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
14 void (*funcp)(int); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
15 __code (*csp)(int); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
16 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
17 __code caller(int a) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
18 f01(a+2); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
19 f02(a+3, 13.2); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
20 funcp(a+4); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
21 goto csp(a+4); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
22 dprint("\n"); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
23 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
24 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
25 __code end() { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
26 dprint("\n"); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
27 exit(0); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
28 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
29 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
30 void f01(int a) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
31 dprint("%d\n", a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
32 g += a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
33 return ; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
34 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
35 void f02(int a, float b) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
36 dprint("%d, %f\n", a, b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
37 g -= a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
38 g += b*0.3; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
39 return ; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
40 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
41 __code cs01(int a) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
42 dprint("%d\n", a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
43 g += a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
44 goto end() ; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
45 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
46 __code cs02(int a, float b) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
47 dprint("%d, %f\n", a, b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
48 g -= a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
49 g += b*0.3; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
50 goto end() ; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
51 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
52 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
53 int main() { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
54 funcp = f01; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
55 csp = cs01; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
56 caller(10); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
57 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
58 |