annotate CbC-examples/test_csp1.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents f9b1a53df341
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include<stdio.h>
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include<stdlib.h>
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 //static __code (*csp)(int, int, int, int);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
27
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
6 __code cs_end (int a);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
7 __code cs0 (int a, int b, int c, int d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
8 void* freturn ();
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
9 __code cs_goto (int a, int b, int c, int d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
10 int function (double a, float b, int c);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
11 int main (int argc, char **argv);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
12
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
13
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
14 __code cs_goto(int a, int b, int c, int d){
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
15 __code (*csp)(int, int, int, int);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
16 csp = freturn();
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
17 printf("csp = %x.\n", csp);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
18
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
19 //printf("cs_goto : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d.\n", a, b, c, d, e, f, g);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
20 //printf("cs_goto : a=%d, b=%d, c=%d, d=%d.\n", a, b, c, d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
21 //printf("cs_goto : a-4=%d, a-8=%d, a-12=%d, a-16=%d.\n", *(&a-4), *(&a-8), *(&a-12), *(&a-16));
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
22 //printf("cs_goto : cs0(a, b, c, d)\n");
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
23 #ifdef INDIRECT
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
24 goto csp(b+a, d+b, a+c, c+d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
25 #else
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
26 goto cs0(b+a, d+b, a+c, c+d);
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
27 #endif
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
28 }
f9b1a53df341 implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents: 16
diff changeset
29
16
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 __code cs_end(int a){
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 printf("cs_exit : a=%d.\n", a);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 exit(a);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 goto cs_end(a);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 __code cs0(int a, int b, int c, int d){
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 //printf("cs0 : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d.\n", a, b, c, d, e, f, g);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 printf("cs_cs0 : a=%d, b=%d, c=%d, d=%d.\n", a, b, c, d);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 goto cs_end( (int)(20*a + 30*b + 40*c + 50*d) );
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 void* freturn(){
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 return cs0;
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 }
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 int function(double a, float b, int c){
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 printf("function:\n");
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 printf("a=%lf, b=%f, c=%d\n", a, b, c);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 //goto cs_goto(10, 20, 30, 40);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 goto cs_goto(10, 20, 30, 40);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 }
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 int main(int argc, char **argv){
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 //csp = cs0;
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 function(10.01, 20.02, 30);
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 return 0;
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 }
4c6926a2b9bc examples.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60