Mercurial > hg > CbC > CbC_gcc
comparison CbC-examples/code_segment_pointer_check/code_segment_check.cbc @ 27:f9b1a53df341
implemented indirect sibcall for ppc.
author | kent@teto.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 10 Nov 2009 16:34:29 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
26:b388631e4738 | 27:f9b1a53df341 |
---|---|
1 #include<stdio.h> | |
2 #include<stdlib.h> | |
3 #define dprint(f, args...) \ | |
4 printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(1), ## args) | |
5 | |
6 /* | |
7 * コードセグメント間の遷移をテスト | |
8 * | |
9 */ | |
10 | |
11 __code end (int a); | |
12 __code cs0a (int a, double b, int c, float d, char e); | |
13 __code cs1a (char e, int a, double b, int c, float d); | |
14 __code cs2a (float d, char e, int a, double b, int c); | |
15 __code cs3a (int c, float d, char e, int a, double b); | |
16 __code cs4a (double b, int c, float d, char e, int a); | |
17 int main (); | |
18 | |
19 __code end(int a) { | |
20 dprint("exit code is %d\n",a); | |
21 exit(a); | |
22 } | |
23 | |
24 int i=0; | |
25 __code cs0a(int a, double b, int c, float d, char e) { | |
26 if ( i++ >= 10 ) { | |
27 dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e); | |
28 goto end((int)(a*b*c*d*e)); | |
29 } | |
30 goto cs1a(e, a, b, c, d); | |
31 } | |
32 __code cs1a(char e, int a, double b, int c, float d) { | |
33 //dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e); | |
34 goto cs2a(d, e, a, b, c); | |
35 } | |
36 __code cs2a(float d, char e, int a, double b, int c) { | |
37 //dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e); | |
38 goto cs3a(c, d, e, a, b); | |
39 } | |
40 __code cs3a(int c, float d, char e, int a, double b) { | |
41 //dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e); | |
42 goto cs4a(b, c, d, e, a); | |
43 } | |
44 __code cs4a(double b, int c, float d, char e, int a) { | |
45 //dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e); | |
46 goto cs0a(a, b, c, d, e); | |
47 } | |
48 | |
49 __code starter(int a, double b, int c, float d, char e) { | |
50 dprint("exit code is expected to %d\n",(int)(a*b*c*d*e)); | |
51 dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e); | |
52 goto cs0a(a,b,c,d,e); | |
53 } | |
54 int main() { | |
55 goto starter(11, 22.2, 33, 44.44, 55); | |
56 } | |
57 |