diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CbC-examples/code_segment_pointer_check/code_segment_check.cbc	Tue Nov 10 16:34:29 2009 +0900
@@ -0,0 +1,57 @@
+#include<stdio.h>
+#include<stdlib.h>
+#define dprint(f, args...) \
+	printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(1), ## args)
+
+/*
+ * コードセグメント間の遷移をテスト
+ *
+ */
+
+__code end (int a);
+__code cs0a (int a, double b, int c, float d, char e);
+__code cs1a (char e, int a, double b, int c, float d);
+__code cs2a (float d, char e, int a, double b, int c);
+__code cs3a (int c, float d, char e, int a, double b);
+__code cs4a (double b, int c, float d, char e, int a);
+int main ();
+
+__code end(int a) {
+	dprint("exit code is %d\n",a);
+	exit(a);
+}
+
+int i=0;
+__code cs0a(int a, double b, int c, float d, char e) {
+	if ( i++ >= 10 ) {
+		dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e);
+		goto end((int)(a*b*c*d*e));
+	}
+	goto cs1a(e, a, b, c, d);
+}
+__code cs1a(char e, int a, double b, int c, float d) {
+	//dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e);
+	goto cs2a(d, e, a, b, c);
+}
+__code cs2a(float d, char e, int a, double b, int c) {
+	//dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e);
+	goto cs3a(c, d, e, a, b);
+}
+__code cs3a(int c, float d, char e, int a, double b) {
+	//dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e);
+	goto cs4a(b, c, d, e, a);
+}
+__code cs4a(double b, int c, float d, char e, int a) {
+	//dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e);
+	goto cs0a(a, b, c, d, e);
+}
+
+__code starter(int a, double b, int c, float d, char e) {
+	dprint("exit code is expected to %d\n",(int)(a*b*c*d*e));
+	dprint("int a=%d,double b=%2.3lf,int c=%d,float d=%2.3f,char e=%d\n", a, b, c, d, e);
+	goto cs0a(a,b,c,d,e);
+}
+int main() {
+	goto starter(11, 22.2, 33, 44.44, 55);
+}
+