annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 #include<stdlib.h>
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 #define dprint(f, args...) \
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(1), ## args)
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 /*
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 * コードセグメント間の遷移をテスト
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 *
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 */
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 __code end (int a);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 __code cs0a (int a, double b, int c, float d, char e);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 __code cs1a (char e, int a, double b, int c, float d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 __code cs2a (float d, char e, int a, double b, int c);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 __code cs3a (int c, float d, char e, int a, double b);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 __code cs4a (double b, int c, float d, char e, int a);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 int main ();
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 __code end(int a) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 dprint("exit code is %d\n",a);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 exit(a);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 }
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 int i=0;
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 __code cs0a(int a, double b, int c, float d, char e) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 if ( i++ >= 10 ) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
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);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 goto end((int)(a*b*c*d*e));
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 goto cs1a(e, a, b, c, d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 __code cs1a(char e, int a, double b, int c, float d) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
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);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34 goto cs2a(d, e, a, b, c);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 __code cs2a(float d, char e, int a, double b, int c) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
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);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 goto cs3a(c, d, e, a, b);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 __code cs3a(int c, float d, char e, int a, double b) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
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);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 goto cs4a(b, c, d, e, a);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44 __code cs4a(double b, int c, float d, char e, int a) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
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);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 goto cs0a(a, b, c, d, e);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 __code starter(int a, double b, int c, float d, char e) {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 dprint("exit code is expected to %d\n",(int)(a*b*c*d*e));
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
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);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 goto cs0a(a,b,c,d,e);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 int main() {
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 goto starter(11, 22.2, 33, 44.44, 55);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57