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