changeset 0:bacef8675607

init repository
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 14 Oct 2014 17:34:59 +0900
parents
children ba74047a4d78
files arg.c argForClang.c argForClang.ll bug.c code_segment_pointer_check/Makefile code_segment_pointer_check/a.out code_segment_pointer_check/code_segment_check.cbc code_segment_pointer_check/code_segment_pointer_check.cbc code_segment_pointer_check/code_segment_pointer_check2.cbc code_segment_pointer_check/code_segment_pointer_check2.h conv.c conv1.c conv1/Makefile conv1/a.out conv1/benchmark.sh conv1/conv1.c conv1/conv1.h conv1/conv1.s conv1_llvm.c conv1_llvm_no_w.c conv1_llvm_noinline.c fact-a.c fact-rectype.c factorial/a.out factorial/factorial.c factorial/factorial.cbc factorial/factorial.s factorial/test.s goto.c loto6.c matrix/compute_power.c matrix/matrix.c matrix/matrix.h normal.c normal2.c parallel_check/a.out parallel_check/c-int-double.c parallel_check/c-int.c parallel_check/c-struct.c quicksort/Makefile quicksort/a.out quicksort/benchmark.sh quicksort/mc/Makefile quicksort/quicksort_c.c quicksort/quicksort_cbc.cbc quicksort/quicksort_cbc2.cbc quicksort/quicksort_test.cbc rectype/rectype.cbc rectype/struct.cbc rectypeTest/Makefile rectypeTest/inparm.cbc rectypeTest/instruct.cbc rectypeTest/rectypeTest1.c rectypeTest/rectypeTest1.cbc rectypeTest/segmentfault.c rectypeTest/struct.cbc rectypeTest/struct2.cbc rectypeTest/typedef.cbc rectypeTest/typedef2.cbc rectypeTest/typedef3.cbc regexp/a.out regexp/dfareg regexp/dfareg.c regexp/dfareg.py return_check/test_return.c return_check/typedeffed.c return_check/variable_return_type.c selftype.c stack1.c test01.c test02.c test03.c test04.c test05.c test1.c test2.c test_array.c test_call.c test_cs.c test_csp1.c test_env.c test_func2code.c test_nest.c test_para.c test_para2.c test_para3.c test_para4.c test_return.c test_struct.c test_tailcall1.c test_tree.c tmp1.c tmp2.c tmp4.c tmpa.c too-long-argument.c
diffstat 96 files changed, 8669 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/arg.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,104 @@
+#include "stdio.h"
+
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+
+struct arg {
+   int a0;int a1;int a2;int a3;int a4;
+};
+
+extern void exit(int); 
+
+void *exit_env;
+__code (*exit___code)();
+
+__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
+{
+    printf("#0017:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env);
+    goto carg2(arg1,arg2,arg3,arg4,arg0,exit1,env);
+}
+
+__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
+{
+    struct arg args0;
+    printf("#0024:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env );
+    args0.a0 = arg0;
+    args0.a1 = arg1;
+    args0.a2 = arg2;
+    args0.a3 = arg3;
+    args0.a4 = arg4;
+    goto cargs(args0,exit1,env);
+}
+
+__code cargs(struct arg args0,__code(*exit1)(int, void*),void *env)
+{
+    printf("#0035:args: %d %d %d %d %d : %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
+    exit1==exit___code,env==exit_env);
+    // goto exit1(321),env;
+    goto (*exit1)(0,env);
+}
+
+
+__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l)
+{
+    printf("#0045:args3: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    printf("#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
+	args1.a0,args1.a1,args1.a2,args1.a3,args1.a4,
+	i,j,k,l);
+    if (args0.a0==args1.a0) exit(0);
+    goto carg4(args0,args1,j,k,l,i);
+}
+
+__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l)
+{
+    printf("#0057:args4: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    goto carg5(args1,args0,j,k,l,i);
+}
+
+__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l)
+{
+    printf("#0064:args5: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    goto carg6(i,j,k,l,args0);
+}
+
+__code carg6(int i, int j,int k,int l,struct arg args0)
+{
+    printf("#0071:args6: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    goto carg3(args0,args0,i,j,k,l);
+}
+
+int main1(int n)
+{
+    goto carg1(0,1,2,3,4,exit___code=__return,exit_env=__environment);
+    return n;
+}
+
+struct arg a00;
+struct arg a01;
+
+int main( int ac, char *av[])
+{
+    int n;
+    n = main1(123);
+    printf("#0089:321=%d\n",n);
+
+    a00.a0 = 11;
+    a00.a1 = 22;
+    a00.a2 = 33;
+    a00.a3 = 44;
+    a00.a4 = 55;
+    a01.a0 = 66;
+    a01.a1 = 77;
+    a01.a2 = 88;
+    a01.a3 = 99;
+    a01.a4 = 10;
+    goto carg3(a00,a01,1,2,3,4);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/argForClang.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,109 @@
+#include "stdio.h"
+
+struct arg {
+   int a0;int a1;int a2;int a3;int a4;
+};
+
+extern void exit(int); 
+
+void *exit_env;
+__code (*exit___code)();
+
+__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env);
+__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env);
+__code cargs(struct arg args0,__code(*exit1)(int, void*),void *env);
+__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l);
+__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l);
+__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l);
+__code carg6(int i, int j,int k,int l,struct arg args0);
+int main1(int n);
+
+__code carg1(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
+{
+    printf("#0017:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env);
+    goto carg2(arg1,arg2,arg3,arg4,arg0,exit1,env);
+}
+
+__code carg2(int arg0,int arg1,int arg2,int arg3,int arg4,__code(*exit1)(int, void*),void *env)
+{
+    struct arg args0;
+    printf("#0024:arg1: %d %d %d %d %d : %x %x\n",arg0,arg1,arg2,arg3,arg4,exit1==exit___code,env==exit_env );
+    args0.a0 = arg0;
+    args0.a1 = arg1;
+    args0.a2 = arg2;
+    args0.a3 = arg3;
+    args0.a4 = arg4;
+    goto cargs(args0,exit1,env);
+}
+
+__code cargs(struct arg args0,__code(*exit1)(int, void*),void *env)
+{
+    printf("#0035:args: %d %d %d %d %d : %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
+    exit1==exit___code,env==exit_env);
+    // goto exit1(321),env;
+    goto (*exit1)(0,env);
+}
+
+
+__code carg3(struct arg args0,struct arg args1,int i, int j,int k,int l)
+{
+    printf("#0045:args3: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    printf("#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,
+	args1.a0,args1.a1,args1.a2,args1.a3,args1.a4,
+	i,j,k,l);
+    if (args0.a0==args1.a0) exit(0);
+    goto carg4(args0,args1,j,k,l,i);
+}
+
+__code carg4(struct arg args0,struct arg args1,int i, int j,int k,int l)
+{
+    printf("#0057:args4: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    goto carg5(args1,args0,j,k,l,i);
+}
+
+__code carg5(struct arg args0,struct arg args1,int i, int j,int k,int l)
+{
+    printf("#0064:args5: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    goto carg6(i,j,k,l,args0);
+}
+
+__code carg6(int i, int j,int k,int l,struct arg args0)
+{
+    printf("#0071:args6: %d %d %d %d %d : %x %x %x %x\n",
+	args0.a0,args0.a1,args0.a2,args0.a3,args0.a4,i,j,k,l);
+    goto carg3(args0,args0,i,j,k,l);
+}
+
+int main1(int n)
+{
+  goto carg1(0,1,2,3,4,exit___code=__return,exit_env=__environment);
+  return n;
+}
+
+struct arg a00;
+struct arg a01;
+
+int main( int ac, char *av[])
+{
+    int n;
+    n = main1(123);
+    printf("#0089:321=%d\n",n);
+
+    a00.a0 = 11;
+    a00.a1 = 22;
+    a00.a2 = 33;
+    a00.a3 = 44;
+    a00.a4 = 55;
+    a01.a0 = 66;
+    a01.a1 = 77;
+    a01.a2 = 88;
+    a01.a3 = 99;
+    a01.a4 = 10;
+    goto carg3(a00,a01,1,2,3,4);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/argForClang.ll	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,281 @@
+; ModuleID = 'argForClang.c'
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.9.0"
+
+%struct.arg = type { i32, i32, i32, i32, i32 }
+%struct.__CbC_env = type { i8*, i32* }
+
+@.str = private unnamed_addr constant [36 x i8] c"#0017:arg1: %d %d %d %d %d : %x %x\0A\00", align 1
+@exit___code = common global void (...)* null, align 8
+@exit_env = common global i8* null, align 8
+@.str1 = private unnamed_addr constant [36 x i8] c"#0024:arg1: %d %d %d %d %d : %x %x\0A\00", align 1
+@.str2 = private unnamed_addr constant [36 x i8] c"#0035:args: %d %d %d %d %d : %x %x\0A\00", align 1
+@.str3 = private unnamed_addr constant [43 x i8] c"#0045:args3: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
+@.str4 = private unnamed_addr constant [72 x i8] c"#0047:args3: args0 %d %d %d %d %d : args1 %d %d %d %d %d : %x %x %x %x\0A\00", align 1
+@.str5 = private unnamed_addr constant [43 x i8] c"#0057:args4: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
+@.str6 = private unnamed_addr constant [43 x i8] c"#0064:args5: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
+@.str7 = private unnamed_addr constant [43 x i8] c"#0071:args6: %d %d %d %d %d : %x %x %x %x\0A\00", align 1
+@.str8 = private unnamed_addr constant [14 x i8] c"#0089:321=%d\0A\00", align 1
+@a00 = common global %struct.arg zeroinitializer, align 4
+@a01 = common global %struct.arg zeroinitializer, align 4
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @carg1(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, void (i32, i8*)* %exit1, i8* %env) #0 {
+entry:
+  %0 = load void (...)** @exit___code, align 8
+  %1 = bitcast void (...)* %0 to void (i32, i8*)*
+  %cmp = icmp eq void (i32, i8*)* %exit1, %1
+  %conv = zext i1 %cmp to i32
+  %2 = load i8** @exit_env, align 8
+  %cmp1 = icmp eq i8* %env, %2
+  %conv2 = zext i1 %cmp1 to i32
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([36 x i8]* @.str, i32 0, i32 0), i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %conv, i32 %conv2)
+  tail call fastcc void @carg2(i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg0, void (i32, i8*)* %exit1, i8* %env)
+  ret void
+}
+
+declare i32 @printf(i8*, ...) #1
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @carg2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, void (i32, i8*)* %exit1, i8* %env) #0 {
+entry:
+  %args0 = alloca %struct.arg, align 8
+  %0 = load void (...)** @exit___code, align 8
+  %1 = bitcast void (...)* %0 to void (i32, i8*)*
+  %cmp = icmp eq void (i32, i8*)* %exit1, %1
+  %conv = zext i1 %cmp to i32
+  %2 = load i8** @exit_env, align 8
+  %cmp1 = icmp eq i8* %env, %2
+  %conv2 = zext i1 %cmp1 to i32
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([36 x i8]* @.str1, i32 0, i32 0), i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %conv, i32 %conv2)
+  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
+  store i32 %arg0, i32* %a0, align 4
+  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
+  store i32 %arg1, i32* %a1, align 4
+  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
+  store i32 %arg2, i32* %a2, align 4
+  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
+  store i32 %arg3, i32* %a3, align 4
+  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
+  store i32 %arg4, i32* %a4, align 4
+  call fastcc void @cargs(%struct.arg* byval align 8 %args0, void (i32, i8*)* %exit1, i8* %env)
+  ret void
+}
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @cargs(%struct.arg* byval align 8 %args0, void (i32, i8*)* %exit1, i8* %env) #0 {
+entry:
+  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
+  %0 = load i32* %a0, align 4
+  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
+  %1 = load i32* %a1, align 4
+  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
+  %2 = load i32* %a2, align 4
+  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
+  %3 = load i32* %a3, align 4
+  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
+  %4 = load i32* %a4, align 4
+  %5 = load void (...)** @exit___code, align 8
+  %6 = bitcast void (...)* %5 to void (i32, i8*)*
+  %cmp = icmp eq void (i32, i8*)* %exit1, %6
+  %conv = zext i1 %cmp to i32
+  %7 = load i8** @exit_env, align 8
+  %cmp1 = icmp eq i8* %env, %7
+  %conv2 = zext i1 %cmp1 to i32
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([36 x i8]* @.str2, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %conv, i32 %conv2)
+  tail call fastcc void %exit1(i32 0, i8* %env)
+  ret void
+}
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @carg3(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %i, i32 %j, i32 %k, i32 %l) #0 {
+entry:
+  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
+  %0 = load i32* %a0, align 4
+  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
+  %1 = load i32* %a1, align 4
+  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
+  %2 = load i32* %a2, align 4
+  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
+  %3 = load i32* %a3, align 4
+  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
+  %4 = load i32* %a4, align 4
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str3, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
+  %5 = load i32* %a0, align 4
+  %6 = load i32* %a1, align 4
+  %7 = load i32* %a2, align 4
+  %8 = load i32* %a3, align 4
+  %9 = load i32* %a4, align 4
+  %a06 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 0
+  %10 = load i32* %a06, align 4
+  %a17 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 1
+  %11 = load i32* %a17, align 4
+  %a28 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 2
+  %12 = load i32* %a28, align 4
+  %a39 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 3
+  %13 = load i32* %a39, align 4
+  %a410 = getelementptr inbounds %struct.arg* %args1, i32 0, i32 4
+  %14 = load i32* %a410, align 4
+  %call11 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([72 x i8]* @.str4, i32 0, i32 0), i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %i, i32 %j, i32 %k, i32 %l)
+  %15 = load i32* %a0, align 4
+  %16 = load i32* %a06, align 4
+  %cmp = icmp eq i32 %15, %16
+  br i1 %cmp, label %if.then, label %if.end
+
+if.then:                                          ; preds = %entry
+  call void @exit(i32 0) #5
+  unreachable
+
+if.end:                                           ; preds = %entry
+  tail call fastcc void @carg4(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %j, i32 %k, i32 %l, i32 %i)
+  ret void
+}
+
+; Function Attrs: noreturn
+declare void @exit(i32) #2
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @carg4(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %i, i32 %j, i32 %k, i32 %l) #0 {
+entry:
+  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
+  %0 = load i32* %a0, align 4
+  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
+  %1 = load i32* %a1, align 4
+  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
+  %2 = load i32* %a2, align 4
+  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
+  %3 = load i32* %a3, align 4
+  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
+  %4 = load i32* %a4, align 4
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str5, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
+  tail call fastcc void @carg5(%struct.arg* byval align 8 %args1, %struct.arg* byval align 8 %args0, i32 %j, i32 %k, i32 %l, i32 %i)
+  ret void
+}
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @carg5(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args1, i32 %i, i32 %j, i32 %k, i32 %l) #0 {
+entry:
+  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
+  %0 = load i32* %a0, align 4
+  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
+  %1 = load i32* %a1, align 4
+  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
+  %2 = load i32* %a2, align 4
+  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
+  %3 = load i32* %a3, align 4
+  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
+  %4 = load i32* %a4, align 4
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str6, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
+  tail call fastcc void @carg6(i32 %i, i32 %j, i32 %k, i32 %l, %struct.arg* byval align 8 %args0)
+  ret void
+}
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @carg6(i32 %i, i32 %j, i32 %k, i32 %l, %struct.arg* byval align 8 %args0) #0 {
+entry:
+  %a0 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 0
+  %0 = load i32* %a0, align 4
+  %a1 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 1
+  %1 = load i32* %a1, align 4
+  %a2 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 2
+  %2 = load i32* %a2, align 4
+  %a3 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 3
+  %3 = load i32* %a3, align 4
+  %a4 = getelementptr inbounds %struct.arg* %args0, i32 0, i32 4
+  %4 = load i32* %a4, align 4
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([43 x i8]* @.str7, i32 0, i32 0), i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %i, i32 %j, i32 %k, i32 %l)
+  tail call fastcc void @carg3(%struct.arg* byval align 8 %args0, %struct.arg* byval align 8 %args0, i32 %i, i32 %j, i32 %k, i32 %l)
+  ret void
+}
+
+; Function Attrs: nounwind ssp uwtable
+define fastcc void @main1..ret0(i32 %retval, i8* %env) #0 {
+entry:
+  %0 = bitcast i8* %env to %struct.__CbC_env*
+  %ret_p = getelementptr inbounds %struct.__CbC_env* %0, i32 0, i32 0
+  %1 = load i8** %ret_p, align 8
+  %2 = bitcast i8* %1 to i32*
+  store i32 %retval, i32* %2, align 4
+  %env1 = getelementptr inbounds %struct.__CbC_env* %0, i32 0, i32 1
+  %3 = load i32** %env1, align 8
+  call void @longjmp(i32* %3, i32 1) #5
+  unreachable
+}
+
+; Function Attrs: noreturn
+declare void @longjmp(i32*, i32) #2
+
+; Function Attrs: nounwind ssp uwtable
+define i32 @main1(i32 %n) #0 {
+entry:
+  %__CbC_environment = alloca %struct.__CbC_env, align 8
+  %retval3 = alloca i32, align 4
+  %env_buf = alloca [37 x i32], align 16
+  store void (...)* bitcast (void (i32, i8*)* @main1..ret0 to void (...)*), void (...)** @exit___code, align 8
+  %0 = bitcast i32* %retval3 to i8*
+  %ret_p = getelementptr inbounds %struct.__CbC_env* %__CbC_environment, i32 0, i32 0
+  store i8* %0, i8** %ret_p, align 8
+  %arraydecay = getelementptr inbounds [37 x i32]* %env_buf, i32 0, i32 0
+  %env = getelementptr inbounds %struct.__CbC_env* %__CbC_environment, i32 0, i32 1
+  store i32* %arraydecay, i32** %env, align 8
+  %call = call i32 @setjmp(i32* %arraydecay) #6
+  %tobool = icmp ne i32 %call, 0
+  br i1 %tobool, label %if.then, label %if.end
+
+if.then:                                          ; preds = %entry
+  %1 = load i32* %retval3, align 4
+  br label %return
+
+if.end:                                           ; preds = %entry
+  %2 = bitcast %struct.__CbC_env* %__CbC_environment to i8*
+  store i8* %2, i8** @exit_env, align 8
+  call fastcc void @carg1(i32 0, i32 1, i32 2, i32 3, i32 4, void (i32, i8*)* @main1..ret0, i8* %2)
+  br label %return
+
+return:                                           ; preds = %if.end, %if.then
+  %retval.0 = phi i32 [ %1, %if.then ], [ %n, %if.end ]
+  ret i32 %retval.0
+}
+
+; Function Attrs: returns_twice
+declare i32 @setjmp(i32*) #3
+
+; Function Attrs: nounwind ssp uwtable
+define i32 @main(i32 %ac, i8** %av) #0 {
+entry:
+  %tmp = alloca %struct.arg, align 8
+  %tmp2 = alloca %struct.arg, align 8
+  %call = call i32 @main1(i32 123)
+  %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([14 x i8]* @.str8, i32 0, i32 0), i32 %call)
+  store i32 11, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 0), align 4
+  store i32 22, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 1), align 4
+  store i32 33, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 2), align 4
+  store i32 44, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 3), align 4
+  store i32 55, i32* getelementptr inbounds (%struct.arg* @a00, i32 0, i32 4), align 4
+  store i32 66, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 0), align 4
+  store i32 77, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 1), align 4
+  store i32 88, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 2), align 4
+  store i32 99, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 3), align 4
+  store i32 10, i32* getelementptr inbounds (%struct.arg* @a01, i32 0, i32 4), align 4
+  %0 = bitcast %struct.arg* %tmp to i8*
+  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast (%struct.arg* @a00 to i8*), i64 20, i32 4, i1 false)
+  %1 = bitcast %struct.arg* %tmp2 to i8*
+  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* bitcast (%struct.arg* @a01 to i8*), i64 20, i32 4, i1 false)
+  call fastcc void @carg3(%struct.arg* byval align 8 %tmp, %struct.arg* byval align 8 %tmp2, i32 1, i32 2, i32 3, i32 4)
+  ret i32 0
+}
+
+; Function Attrs: nounwind
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #4
+
+attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #2 = { noreturn "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #3 = { returns_twice "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #4 = { nounwind }
+attributes #5 = { noreturn }
+attributes #6 = { returns_twice }
+
+!llvm.ident = !{!0}
+
+!0 = metadata !{metadata !"clang version 3.5 (trunk)"}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bug.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,19 @@
+typedef void (*atexit_callback)(void);
+typedef void (*cxa_atexit_callback)(void *);
+struct one_atexit_routine 
+{
+  int callback;
+};
+
+
+static int
+atexit_common (const struct one_atexit_routine *r, const void *dso)
+
+
+{
+    return 0;
+}
+
+int main(){
+    printf("hello\n");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_segment_pointer_check/Makefile	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,25 @@
+
+CbCC=/Users/e105711/prog/seminar/CbC/gcc-inst/bin/gcc 
+
+#CC=gcc
+CC=/Users/e105711/prog/seminar/CbC/gcc-inst/bin/gcc 
+
+
+# fastcall版では-O0,-O2は動作確認、-O3以上はだめ
+CFLAGS=-g -O2 -fomit-frame-pointer
+#CFLAGS=-g -O0
+
+.SUFFIXES: .cbc .o
+
+all: code_segment_pointer_check2
+
+.cbc.o:
+	$(CbCC) $(CFLAGS) -c -o $@ $<
+
+code_segment_pointer_check2: code_segment_pointer_check2.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+
+clean: 
+	rm -rf *.o *.s code_segment_pointer_check2
+
Binary file code_segment_pointer_check/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_segment_pointer_check/code_segment_check.cbc	Tue Oct 14 17:34:59 2014 +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);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_segment_pointer_check/code_segment_pointer_check.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,120 @@
+#include<stdio.h>
+#include<stdlib.h>
+#define dprint(f, args...) \
+	printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(0), ## args)
+
+/*
+ * コードセグメント間の遷移で
+ *
+ *
+ *
+ */
+
+__code schedule ();
+__code cs0a ();
+__code cs1a (int a);
+__code cs2a (int a, double b);
+__code cs3a (int a, double b, int c);
+__code cs4a (int a, double b, int c, float d);
+__code cs0b ();
+__code cs1b (int a);
+__code cs2b (int a, double b);
+__code cs3b (int a, double b, int c);
+__code cs4b (int a, double b, int c, float d);
+
+/* defined in file code_segment_pointer_check.cbc at offset 1649  */
+int main ();
+
+__code end(int a) {
+	dprint("exit with code %d\n",a);
+	exit(a);
+}
+
+__code (*cs0) ();
+__code (*cs1) (int);
+__code (*cs2) (int, double);
+__code (*cs3) (int, double, int);
+__code (*cs4) (int, double, int, float);
+int i=0;
+__code schedule() {
+	dprint("i=%d\n",i);
+	if ( i>=100 ) {
+		goto end(0);
+	}
+	switch (i++%5) {
+	case 0:
+		goto cs0();
+	case 1:
+		goto cs1(i);
+	case 2:
+		goto cs2(i, i*1.3);
+	case 3:
+		goto cs3(i, i*1.3, 20*i);
+	case 4:
+		goto cs4(i, i*1.3, 20*i, i*0.8);
+	default:
+		exit(0);
+	}
+	dprint("code unreachable!\n");
+}
+
+__code cs0a() {
+	dprint("no args\n");
+	cs0 = cs0b;
+	goto schedule();
+}
+__code cs1a(int a) {
+	dprint("int a=%d\n", a);
+	cs1 = cs1b;
+	goto schedule();
+}
+__code cs2a(int a, double b) {
+	dprint("int a=%d, double b=%lf\n", a, b);
+	cs2 = cs2b;
+	goto schedule();
+}
+__code cs3a(int a, double b, int c) {
+	dprint("int a=%d, double b=%lf, int c=%d\n", a, b, c);
+	cs3 = cs3b;
+	goto schedule();
+}
+__code cs4a(int a, double b, int c, float d) {
+	dprint("int a=%d, double b=%lf, int c=%d, float d=%f\n", a, b, c, d);
+	cs4 = cs4b;
+	goto schedule();
+}
+
+__code cs0b() {
+	dprint("no args\n");
+	cs0 = cs0a;
+	goto schedule();
+}
+__code cs1b(int a) {
+	dprint("int a=%d\n", a);
+	cs1 = cs1a;
+	goto schedule();
+}
+__code cs2b(int a, double b) {
+	dprint("int a=%d, double b=%lf\n", a, b);
+	cs2 = cs2a;
+	goto schedule();
+}
+__code cs3b(int a, double b, int c) {
+	dprint("int a=%d, double b=%lf, int c=%d\n", a, b, c);
+	cs3 = cs3a;
+	goto schedule();
+}
+__code cs4b(int a, double b, int c, float d) {
+	dprint("int a=%d, double b=%lf, int c=%d, float d=%f\n", a, b, c, d);
+	cs4 = cs4a;
+	goto schedule();
+}
+
+int main() {
+	cs0 = cs0a;
+	cs1 = cs1a;
+	cs2 = cs2a;
+	cs3 = cs3a;
+	cs4 = cs4a;
+	goto schedule();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_segment_pointer_check/code_segment_pointer_check2.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,655 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include"code_segment_pointer_check2.h"
+#define dprint(f, args...) \
+	printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(0), ## args)
+
+/*
+ * コードセグメント間の遷移をチェック
+ *
+ */
+
+typedef __code (*CODEP)(int,int,int,int,int,int);
+extern CODEP csps[];
+CODEP csps[] = {
+	//cs0,cs1
+	cs0,cs1,cs2,cs3,cs4,cs5,cs6,cs7,cs8,cs9,
+	cs10,cs11,cs12,cs13,cs14,cs15,cs16,cs17,cs18,cs19,
+	cs20,cs21,cs22,cs23,cs24,cs25,cs26,cs27,cs28,cs29,
+	cs30,cs31,cs32,cs33,cs34,cs35,cs36,cs37,cs38,cs39,
+	cs40,cs41,cs42,cs43,cs44,cs45,cs46,cs47,cs48,cs49,
+	cs50,cs51,cs52,cs53,cs54,cs55,cs56,cs57,cs58,cs59,
+	cs60,cs61,cs62,cs63,cs64,cs65,cs66,cs67,cs68,cs69,
+	cs70,cs71,cs72,cs73,cs74,cs75,cs76,cs77,cs78,cs79,
+	cs80,cs81,cs82,cs83,cs84,cs85,cs86,cs87,cs88,cs89,
+	cs90,cs91,cs92,cs93,cs94,cs95,cs96,cs97,cs98,cs99,
+	cs100,cs101,cs102,cs103,cs104,cs105,cs106,cs107,cs108,cs109,
+	cs110,cs111,cs112,cs113,cs114,cs115,cs116,cs117,cs118,cs119
+};
+
+__code end(int a, int b, int c, int d, int e) {
+	dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	exit(a);
+}
+
+__code schedule(int i, int a, int b, int c, int d, int e) {
+	//CODEP p;
+	//p = csps[i%120];
+
+	if ( i>=1000 ) {
+		goto end(a, b, c, d, e);
+	}
+
+	dprint("i=%d\n", i);
+	goto csps[i%120](i+1, a, b, c, d, e);
+
+	dprint("code unreachable!\n");
+}
+
+int main() {
+	goto schedule(0, 11,22,33,44,55);
+}
+
+
+
+/* created by script make_permutations.py.  */
+
+__code cs0(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,b,c,d,e);
+}
+
+__code cs1(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,a,c,d,e);
+}
+
+__code cs2(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,c,a,d,e);
+}
+
+__code cs3(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,c,d,a,e);
+}
+
+__code cs4(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,c,d,e,a);
+}
+
+__code cs5(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,c,b,d,e);
+}
+
+__code cs6(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,a,b,d,e);
+}
+
+__code cs7(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,b,a,d,e);
+}
+
+__code cs8(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,b,d,a,e);
+}
+
+__code cs9(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,b,d,e,a);
+}
+
+__code cs10(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,c,d,b,e);
+}
+
+__code cs11(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,a,d,b,e);
+}
+
+__code cs12(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,d,a,b,e);
+}
+
+__code cs13(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,d,b,a,e);
+}
+
+__code cs14(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,d,b,e,a);
+}
+
+__code cs15(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,c,d,e,b);
+}
+
+__code cs16(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,a,d,e,b);
+}
+
+__code cs17(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,d,a,e,b);
+}
+
+__code cs18(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,d,e,a,b);
+}
+
+__code cs19(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,d,e,b,a);
+}
+
+__code cs20(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,b,d,c,e);
+}
+
+__code cs21(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,a,d,c,e);
+}
+
+__code cs22(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,d,a,c,e);
+}
+
+__code cs23(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,d,c,a,e);
+}
+
+__code cs24(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,d,c,e,a);
+}
+
+__code cs25(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,d,b,c,e);
+}
+
+__code cs26(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,a,b,c,e);
+}
+
+__code cs27(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,b,a,c,e);
+}
+
+__code cs28(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,b,c,a,e);
+}
+
+__code cs29(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,b,c,e,a);
+}
+
+__code cs30(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,d,c,b,e);
+}
+
+__code cs31(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,a,c,b,e);
+}
+
+__code cs32(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,c,a,b,e);
+}
+
+__code cs33(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,c,b,a,e);
+}
+
+__code cs34(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,c,b,e,a);
+}
+
+__code cs35(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,d,c,e,b);
+}
+
+__code cs36(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,a,c,e,b);
+}
+
+__code cs37(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,c,a,e,b);
+}
+
+__code cs38(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,c,e,a,b);
+}
+
+__code cs39(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,c,e,b,a);
+}
+
+__code cs40(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,b,d,e,c);
+}
+
+__code cs41(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,a,d,e,c);
+}
+
+__code cs42(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,d,a,e,c);
+}
+
+__code cs43(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,d,e,a,c);
+}
+
+__code cs44(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,d,e,c,a);
+}
+
+__code cs45(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,d,b,e,c);
+}
+
+__code cs46(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,a,b,e,c);
+}
+
+__code cs47(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,b,a,e,c);
+}
+
+__code cs48(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,b,e,a,c);
+}
+
+__code cs49(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,b,e,c,a);
+}
+
+__code cs50(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,d,e,b,c);
+}
+
+__code cs51(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,a,e,b,c);
+}
+
+__code cs52(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,e,a,b,c);
+}
+
+__code cs53(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,e,b,a,c);
+}
+
+__code cs54(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,e,b,c,a);
+}
+
+__code cs55(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,d,e,c,b);
+}
+
+__code cs56(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,a,e,c,b);
+}
+
+__code cs57(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,e,a,c,b);
+}
+
+__code cs58(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,e,c,a,b);
+}
+
+__code cs59(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, d,e,c,b,a);
+}
+
+__code cs60(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,b,c,e,d);
+}
+
+__code cs61(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,a,c,e,d);
+}
+
+__code cs62(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,c,a,e,d);
+}
+
+__code cs63(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,c,e,a,d);
+}
+
+__code cs64(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,c,e,d,a);
+}
+
+__code cs65(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,c,b,e,d);
+}
+
+__code cs66(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,a,b,e,d);
+}
+
+__code cs67(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,b,a,e,d);
+}
+
+__code cs68(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,b,e,a,d);
+}
+
+__code cs69(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,b,e,d,a);
+}
+
+__code cs70(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,c,e,b,d);
+}
+
+__code cs71(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,a,e,b,d);
+}
+
+__code cs72(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,e,a,b,d);
+}
+
+__code cs73(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,e,b,a,d);
+}
+
+__code cs74(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,e,b,d,a);
+}
+
+__code cs75(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,c,e,d,b);
+}
+
+__code cs76(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,a,e,d,b);
+}
+
+__code cs77(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,e,a,d,b);
+}
+
+__code cs78(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,e,d,a,b);
+}
+
+__code cs79(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, c,e,d,b,a);
+}
+
+__code cs80(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,b,e,c,d);
+}
+
+__code cs81(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,a,e,c,d);
+}
+
+__code cs82(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,e,a,c,d);
+}
+
+__code cs83(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,e,c,a,d);
+}
+
+__code cs84(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,e,c,d,a);
+}
+
+__code cs85(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,e,b,c,d);
+}
+
+__code cs86(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,a,b,c,d);
+}
+
+__code cs87(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,b,a,c,d);
+}
+
+__code cs88(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,b,c,a,d);
+}
+
+__code cs89(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,b,c,d,a);
+}
+
+__code cs90(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,e,c,b,d);
+}
+
+__code cs91(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,a,c,b,d);
+}
+
+__code cs92(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,c,a,b,d);
+}
+
+__code cs93(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,c,b,a,d);
+}
+
+__code cs94(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,c,b,d,a);
+}
+
+__code cs95(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,e,c,d,b);
+}
+
+__code cs96(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,a,c,d,b);
+}
+
+__code cs97(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,c,a,d,b);
+}
+
+__code cs98(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,c,d,a,b);
+}
+
+__code cs99(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,c,d,b,a);
+}
+
+__code cs100(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,b,e,d,c);
+}
+
+__code cs101(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,a,e,d,c);
+}
+
+__code cs102(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,e,a,d,c);
+}
+
+__code cs103(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,e,d,a,c);
+}
+
+__code cs104(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, b,e,d,c,a);
+}
+
+__code cs105(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,e,b,d,c);
+}
+
+__code cs106(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,a,b,d,c);
+}
+
+__code cs107(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,b,a,d,c);
+}
+
+__code cs108(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,b,d,a,c);
+}
+
+__code cs109(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,b,d,c,a);
+}
+
+__code cs110(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,e,d,b,c);
+}
+
+__code cs111(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,a,d,b,c);
+}
+
+__code cs112(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,d,a,b,c);
+}
+
+__code cs113(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,d,b,a,c);
+}
+
+__code cs114(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,d,b,c,a);
+}
+
+__code cs115(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, a,e,d,c,b);
+}
+
+__code cs116(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,a,d,c,b);
+}
+
+__code cs117(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,d,a,c,b);
+}
+
+__code cs118(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,d,c,a,b);
+}
+
+__code cs119(int i, int a, int b, int c, int d, int e) {
+	//dprint("a=%d,b=%d,c=%d,d=%d,e=%d\n", a, b, c, d, e);
+	goto schedule(i, e,d,c,b,a);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code_segment_pointer_check/code_segment_pointer_check2.h	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,369 @@
+/* defined in file code_segment_pointer_check2.cbc at offset 987  */
+__code end (int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1102  */
+__code schedule (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1345  */
+int main ();
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1398  */
+__code cs0 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1542  */
+__code cs1 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1686  */
+__code cs2 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1830  */
+__code cs3 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 1974  */
+__code cs4 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2118  */
+__code cs5 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2262  */
+__code cs6 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2406  */
+__code cs7 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2550  */
+__code cs8 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2694  */
+__code cs9 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2838  */
+__code cs10 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 2983  */
+__code cs11 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3128  */
+__code cs12 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3273  */
+__code cs13 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3418  */
+__code cs14 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3563  */
+__code cs15 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3708  */
+__code cs16 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3853  */
+__code cs17 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 3998  */
+__code cs18 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 4143  */
+__code cs19 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 4288  */
+__code cs20 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 4433  */
+__code cs21 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 4578  */
+__code cs22 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 4723  */
+__code cs23 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 4868  */
+__code cs24 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5013  */
+__code cs25 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5158  */
+__code cs26 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5303  */
+__code cs27 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5448  */
+__code cs28 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5593  */
+__code cs29 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5738  */
+__code cs30 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 5883  */
+__code cs31 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6028  */
+__code cs32 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6173  */
+__code cs33 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6318  */
+__code cs34 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6463  */
+__code cs35 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6608  */
+__code cs36 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6753  */
+__code cs37 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 6898  */
+__code cs38 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7043  */
+__code cs39 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7188  */
+__code cs40 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7333  */
+__code cs41 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7478  */
+__code cs42 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7623  */
+__code cs43 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7768  */
+__code cs44 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 7913  */
+__code cs45 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8058  */
+__code cs46 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8203  */
+__code cs47 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8348  */
+__code cs48 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8493  */
+__code cs49 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8638  */
+__code cs50 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8783  */
+__code cs51 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 8928  */
+__code cs52 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9073  */
+__code cs53 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9218  */
+__code cs54 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9363  */
+__code cs55 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9508  */
+__code cs56 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9653  */
+__code cs57 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9798  */
+__code cs58 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 9943  */
+__code cs59 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10088  */
+__code cs60 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10233  */
+__code cs61 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10378  */
+__code cs62 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10523  */
+__code cs63 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10668  */
+__code cs64 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10813  */
+__code cs65 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 10958  */
+__code cs66 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11103  */
+__code cs67 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11248  */
+__code cs68 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11393  */
+__code cs69 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11538  */
+__code cs70 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11683  */
+__code cs71 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11828  */
+__code cs72 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 11973  */
+__code cs73 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12118  */
+__code cs74 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12263  */
+__code cs75 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12408  */
+__code cs76 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12553  */
+__code cs77 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12698  */
+__code cs78 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12843  */
+__code cs79 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 12988  */
+__code cs80 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 13133  */
+__code cs81 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 13278  */
+__code cs82 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 13423  */
+__code cs83 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 13568  */
+__code cs84 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 13713  */
+__code cs85 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 13858  */
+__code cs86 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14003  */
+__code cs87 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14148  */
+__code cs88 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14293  */
+__code cs89 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14438  */
+__code cs90 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14583  */
+__code cs91 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14728  */
+__code cs92 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 14873  */
+__code cs93 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15018  */
+__code cs94 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15163  */
+__code cs95 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15308  */
+__code cs96 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15453  */
+__code cs97 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15598  */
+__code cs98 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15743  */
+__code cs99 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 15888  */
+__code cs100 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16034  */
+__code cs101 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16180  */
+__code cs102 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16326  */
+__code cs103 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16472  */
+__code cs104 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16618  */
+__code cs105 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16764  */
+__code cs106 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 16910  */
+__code cs107 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17056  */
+__code cs108 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17202  */
+__code cs109 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17348  */
+__code cs110 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17494  */
+__code cs111 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17640  */
+__code cs112 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17786  */
+__code cs113 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 17932  */
+__code cs114 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 18078  */
+__code cs115 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 18224  */
+__code cs116 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 18370  */
+__code cs117 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 18516  */
+__code cs118 (int i, int a, int b, int c, int d, int e);
+
+/* defined in file code_segment_pointer_check2.cbc at offset 18662  */
+__code cs119 (int i, int a, int b, int c, int d, int e);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,92 @@
+#include "stdio.h"
+
+f0(int i) {
+    int k,j;
+    k = 3+i;
+    j = g0(i+3);
+    return k+4+j;
+}
+
+g0(int i) {
+    return i+4;
+}
+
+
+typedef void *stack;
+
+__code f_g0(int i,int k,stack sp) ;
+
+struct cont_interface { // General Return Continuation
+    __code (*ret)(int, void*);
+};
+
+__code f(int i,stack sp) {
+    int k,j;
+    k = 3+i;
+    goto f_g0(i,k,sp);
+}
+
+struct f_g0_interface {  // Specialized Return Continuation
+    __code (*ret)();
+    int i_,k_,j_;
+};
+
+__code f_g1(int j,stack sp);
+__code g(int i,stack sp) ;
+
+__code f_g0(int i,int k,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = f_g1;
+    c->k_ = k;
+    c->i_ = i;
+
+    goto g(i+3,sp);
+}
+
+__code f_g1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int k = c->k_;
+    sp += sizeof(struct f_g0_interface);
+    goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+}
+
+__code g(int i,stack sp) {
+    goto (( (struct cont_interface *)sp)->ret)(i+4,sp);
+}
+
+struct main_continuation { // General Return Continuation
+    __code (*ret)(int, void*);
+    __code (*main_ret)(int, void*);
+    void *env;
+};
+
+__code main_return(int i,stack sp) {
+    printf("#0061:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(i,
+           ((struct main_continuation *)sp)->env);
+}
+
+#define STACK_SIZE 2048
+char main_stack[STACK_SIZE];
+#define stack_last (&main_stack[STACK_SIZE])
+
+typedef __code (*return_type)(int, void*);
+int
+main(int argc, char **argv)
+{
+    struct main_continuation *cont;
+    stack sp = stack_last;
+
+    printf("#0075:%d\n",f0(233));
+
+    sp -= sizeof(*cont);
+    cont = (struct main_continuation *)sp;
+    cont->ret = main_return;
+    cont->main_ret = (return_type) _CbC_return;
+    cont->env = _CbC_environment;
+    goto f(233,sp);
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,225 @@
+#include "stdio.h"
+
+static int loop;
+
+#if 1 // def __micro_c__
+#define CC_ONLY 0
+#else
+#define CC_ONLY 1
+#endif
+
+/* classical function call case (0) */
+
+f0(int i) {
+    int k,j;
+    k = 3+i;
+    j = g0(i+3);
+    return k+4+j;
+}
+
+g0(int i) {
+    return h0(i+4)+i;
+}
+
+h0(int i) {
+    return i+4;
+}
+
+#if !CC_ONLY
+
+/* straight conversion case (1) */
+
+typedef char *stack;
+
+struct cont_interface { // General Return Continuation
+    __code (*ret)(int, void *);
+};
+
+__code f(int i,stack sp) {
+    int k,j;
+    k = 3+i;
+    goto f_g0(i,k,sp);
+}
+
+struct f_g0_interface {  // Specialized Return Continuation
+    __code (*ret)(int, void *);
+    int i_,k_,j_;
+};
+
+__code f_g1(int j,stack sp);
+
+__code f_g0(int i,int k,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = f_g1;
+    c->k_ = k;
+    c->i_ = i;
+
+    goto g(i+3,sp);
+}
+
+__code f_g1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int k = c->k_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(k+4+j,sp);
+}
+
+__code g_h1(int j,stack sp);
+
+__code g(int i,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = g_h1;
+    c->i_ = i;
+
+    goto h(i+3,sp);
+}
+
+__code g_h1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int i = c->i_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(j+i,sp);
+}
+
+__code h(int i,stack sp) {
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    goto (c->ret)(i+4,sp);
+}
+
+struct main_continuation { // General Return Continuation
+    __code (*ret)();
+    __code (*main_ret)();
+    void *env;
+};
+
+__code main_return(int i,stack sp) {
+    if (loop-->0)
+	goto f(233,sp);
+    printf("#0103:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+/* little optimzation without stack continuation (2) */
+
+__code f2(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2(i,k,i+3,sp);
+}
+
+__code g2(int i,int k,int j,char *sp) {
+    j = j+4;
+    goto h2(i,k+4+j,sp);
+}
+
+__code h2_1(int i,int k,int j,char *sp) {
+    goto main_return2(i+j,sp);
+}
+
+__code h2(int i,int k,char *sp) {
+    goto h2_1(i,k,i+4,sp);
+}
+
+__code main_return2(int i,stack sp) {
+    if (loop-->0)
+	goto f2(233,sp);
+    printf("#0132:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+/* little optimizaed case (3) */
+
+__code f2_1(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2_1(k,i+3,sp);
+}
+
+__code g2_1(int k,int i,char *sp) {
+    goto h2_11(k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp);
+__code h2_1_1(int i,int k,int j,char *sp) {
+    goto f2_0_1(k,i+j,sp);
+}
+
+__code h2_11(int i,int k,char *sp) {
+    goto h2_1_1(i,k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp) {
+    goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+}
+
+__code main_return2_1(int i,stack sp) {
+    if (loop-->0)
+        goto f2_1(233,sp);
+    printf("#0165:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+#define STACK_SIZE 2048
+char main_stack[STACK_SIZE];
+#define stack_last (main_stack+STACK_SIZE)
+
+#endif
+
+#define LOOP_COUNT 10000000
+
+main(int ac,char *av[])
+{
+#if !CC_ONLY
+    struct main_continuation *cont;
+    stack sp = stack_last;
+#endif
+    int sw;
+    int j;
+    if (ac==2) sw = atoi(av[1]);
+    else sw=3;
+
+    if (sw==0) {
+	for(loop=0;loop<LOOP_COUNT;loop++) {
+	   j = f0(233);
+	}
+	printf("#0193:%d\n",j);
+#if !CC_ONLY
+    } else if (sw==1) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f(233,sp);
+    } else if (sw==2) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2(233,sp);
+    } else if (sw==3) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2_1;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2_1(233,sp);
+#endif
+    }
+return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1/Makefile	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,12 @@
+#CbCC = ../../../build_cbc44/INSTALL_DIR/libexec/gcc/i686-pc-linux-gnu/4.4.1/cc1
+CbCC = /Users/e105711/prog/seminar/CbC/cell/gccInst/bin/gcc
+CbClang = /Users/e105711/prog/seminar/CbC/llvmInst/Debug+Asserts/bin/clang
+
+time:
+	for exe in *; do \
+	    if [ -x $$exe ]; then \
+	    	echo $$exe; \
+	    	time ./$$exe; \
+	    fi; \
+	done
+
Binary file conv1/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1/benchmark.sh	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+
+time=/usr/bin/time
+CONV1=./a.out
+num=10
+
+count=0
+amount=0
+max=0
+min=99999
+
+echo "$CONV1 $1"
+while [[ $count -lt $num ]]; do
+    # /usr/bin/time -p ./conv1 1 2>&1 >& - |grep '^user'|tr -s " "|cut -f2 -d" "
+    usertime=$( $time -p $CONV1 $1 2>&1 >& - |grep '^user'|tr -s " " |cut -f2 -d" ")
+    echo $usertime
+
+    amount=$(($usertime+$amount))
+    if [[ $usertime -lt $min ]]; then
+	min=$usertime
+    fi
+    if [[ $usertime -gt $max ]]; then
+	max=$usertime
+    fi
+    count=$(($count+1))
+done
+
+echo "amount time = $amount"
+echo "maxtime = $max"
+echo "mintime = $min"
+
+
+amount=$(($amount - $max - $min))
+echo "amount time - mintime - maxtime = $amount"
+count=$(($count-2))
+echo "count = $count"
+averagetime=$(($amount/($count)))
+echo "average time = $averagetime"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1/conv1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,232 @@
+#include <stdio.h>
+#include <stdlib.h>
+static int loop;
+
+#if 1 // def __micro_c__
+#define CC_ONLY 0
+#else
+#define CC_ONLY 1
+#endif
+
+#ifdef CLANG // for clang/LLVM
+#define _CbC_return __return
+#define _CbC_environment __environment
+#endif
+
+typedef char *stack;
+#include "conv1.h"
+
+/* classical function call case (0) */
+int f0(int i) {
+  int k,j;
+  k = 3+i;
+  j = g0(i+3);
+  return k+4+j;
+}
+
+int g0(int i) {
+  return h0(i+4)+i;
+}
+
+int h0(int i) {
+  return i+4;
+}
+
+#if !CC_ONLY
+
+/* straight conversion case (1) */
+
+
+struct cont_interface { // General Return Continuation
+  __code (*ret)(int,stack);
+};
+
+__code f(int i,stack sp) {
+  int k,j;
+  k = 3+i;
+  goto f_g0(i,k,sp);
+}
+
+struct f_g0_interface {  // Specialized Return Continuation
+  __code (*ret)(int,stack);
+  int i_,k_,j_;
+};
+
+__code f_g1(int j,stack sp);
+
+__code f_g0(int i,int k,stack sp) { // Caller
+  struct f_g0_interface *c = 
+    (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+  c->ret = f_g1;
+  c->k_ = k;
+  c->i_ = i;
+
+  goto g(i+3,sp);
+}
+
+__code f_g1(int j,stack sp) {  // Continuation 
+  struct f_g0_interface *c = (struct f_g0_interface *)sp;
+  int k = c->k_;
+  sp+=sizeof(struct f_g0_interface);
+  c = (struct f_g0_interface *)sp;
+  goto (c->ret)(k+4+j,sp);
+}
+
+__code g_h1(int j,stack sp);
+
+__code g(int i,stack sp) { // Caller
+  struct f_g0_interface *c = 
+    (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+  c->ret = g_h1;
+  c->i_ = i;
+
+  goto h(i+3,sp);
+}
+
+__code g_h1(int j,stack sp) {  // Continuation 
+  struct f_g0_interface *c = (struct f_g0_interface *)sp;
+  int i = c->i_;
+  sp+=sizeof(struct f_g0_interface);
+  c = (struct f_g0_interface *)sp;
+  goto (c->ret)(j+i,sp);
+}
+
+__code h(int i,stack sp) {
+  struct f_g0_interface *c = (struct f_g0_interface *)sp;
+  goto (c->ret)(i+4,sp);
+}
+
+struct main_continuation { // General Return Continuation
+  __code (*ret)(int,stack);
+  __code (*main_ret)(int,void*);
+  void *env;
+};
+
+__code main_return(int i,stack sp) {
+  if (loop-->0)
+    goto f(233,sp);
+  printf("#0103:%d\n",i);
+  goto (( (struct main_continuation *)sp)->main_ret)(0,
+						     ((struct main_continuation *)sp)->env);
+}
+
+/* little optimzation without stack continuation (2) */
+
+__code f2(int i,char *sp) {
+  int k,j;
+  k = 3+i;
+  goto g2(i,k,i+3,sp);
+}
+
+__code g2(int i,int k,int j,char *sp) {
+  j = j+4;
+  goto h2(i,k+4+j,sp);
+}
+
+__code h2_1(int i,int k,int j,char *sp) {
+  goto main_return2(i+j,sp);
+}
+
+__code h2(int i,int k,char *sp) {
+  goto h2_1(i,k,i+4,sp);
+}
+
+__code main_return2(int i,stack sp) {
+  if (loop-->0)
+    goto f2(233,sp);
+  printf("#0132:%d\n",i);
+  goto (( (struct main_continuation *)sp)->main_ret)(0,
+						     ((struct main_continuation *)sp)->env);
+}
+
+/* little optimizaed case (3) */
+
+__code f2_1(int i,char *sp) {
+  int k,j;
+  k = 3+i;
+  goto g2_1(k,i+3,sp);
+}
+
+__code g2_1(int k,int i,char *sp) {
+  goto h2_11(k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp);
+__code h2_1_1(int i,int k,int j,char *sp) {
+  goto f2_0_1(k,i+j,sp);
+}
+
+__code h2_11(int i,int k,char *sp) {
+  goto h2_1_1(i,k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp) {
+  goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+}
+
+__code main_return2_1(int i,stack sp) {
+  if (loop-->0)
+    goto f2_1(233,sp);
+  printf("#0165:%d\n",i);
+  exit(0);
+  //goto (( (struct main_continuation *)sp)->main_ret)(0,
+  //((struct main_continuation *)sp)->env);
+}
+
+#define STACK_SIZE 2048
+char main_stack[STACK_SIZE];
+#define stack_last (main_stack+STACK_SIZE)
+
+#endif
+
+#define LOOP_COUNT 500000000
+int
+main(int ac,char *av[])
+{
+#if !CC_ONLY
+  struct main_continuation *cont;
+  stack sp = stack_last;
+#endif
+  int sw;
+  int j;
+  if (ac==2) sw = atoi(av[1]);
+  else sw=3;
+
+  if (sw==0) {
+    for(loop=0;loop<LOOP_COUNT;loop++) {
+      j = f0(loop);
+    }
+    printf("#0193:%d\n",j);
+#if !CC_ONLY
+  } else if (sw==1) {
+    loop = LOOP_COUNT;
+    sp -= sizeof(*cont);
+    cont = (struct main_continuation *)sp;
+    cont->ret = main_return;
+    cont->main_ret = _CbC_return;
+    cont->env = _CbC_environment;
+    goto f(loop,sp);
+  } else if (sw==2) {
+    loop = LOOP_COUNT;
+    sp -= sizeof(*cont);
+    cont = (struct main_continuation *)sp;
+    cont->ret = main_return2;
+    cont->main_ret = _CbC_return;
+    cont->env = _CbC_environment;
+    goto f2(loop,sp);
+  } else if (sw==3) {
+    loop = LOOP_COUNT;
+    sp -= sizeof(*cont);
+    cont = (struct main_continuation *)sp;
+    cont->ret = main_return2_1;
+    cont->main_ret = _CbC_return;
+    cont->env = _CbC_environment;
+    goto f2_1(loop,sp);
+#endif
+  }
+  return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1/conv1.h	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,57 @@
+/* defined in file conv1.c at offset 468 */
+__code f (int i,stack sp);
+
+/* defined in file conv1.c at offset 680 */
+__code f_g0 (int i,int k,stack sp);
+
+/* defined in file conv1.c at offset 897 */
+__code f_g1 (int j,stack sp);
+
+/* defined in file conv1.c at offset 1162 */
+__code g (int i,stack sp);
+
+/* defined in file conv1.c at offset 1355 */
+__code g_h1 (int j,stack sp);
+
+/* defined in file conv1.c at offset 1588 */
+__code h (int i,stack sp);
+
+/* defined in file conv1.c at offset 1838 */
+__code main_return (int i,stack sp);
+
+/* defined in file conv1.c at offset 2107 */
+__code f2 (int i,char *sp);
+
+/* defined in file conv1.c at offset 2189 */
+__code g2 (int i,int k,int j,char *sp);
+
+/* defined in file conv1.c at offset 2270 */
+__code h2_1 (int i,int k,int j,char *sp);
+
+/* defined in file conv1.c at offset 2346 */
+__code h2 (int i,int k,char *sp);
+
+/* defined in file conv1.c at offset 2410 */
+__code main_return2 (int i,stack sp);
+
+/* defined in file conv1.c at offset 2658 */
+__code f2_1 (int i,char *sp);
+
+/* defined in file conv1.c at offset 2742 */
+__code g2_1 (int k,int i,char *sp);
+
+/* defined in file conv1.c at offset 2844 */
+__code h2_1_1 (int i,int k,int j,char *sp);
+
+/* defined in file conv1.c at offset 2918 */
+__code h2_11 (int i,int k,char *sp);
+
+/* defined in file conv1.c at offset 2987 */
+__code f2_0_1 (int k,int j,char *sp);
+
+/* defined in file conv1.c at offset 3086 */
+__code main_return2_1 (int i,stack sp);
+
+int f0(int i);
+int g0(int i);
+int h0(int i);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1/conv1.s	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,1021 @@
+	.section	__TEXT,__text,regular,pure_instructions
+	.macosx_version_min 10, 9
+	.globl	_f0
+	.align	4, 0x90
+_f0:                                    ## @f0
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp0:
+	.cfi_def_cfa_offset 16
+Ltmp1:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp2:
+	.cfi_def_cfa_register %rbp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	leal	21(%rdi,%rdi,2), %eax
+	popq	%rbp
+	retq
+	.cfi_endproc
+
+	.globl	_g0
+	.align	4, 0x90
+_g0:                                    ## @g0
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp3:
+	.cfi_def_cfa_offset 16
+Ltmp4:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp5:
+	.cfi_def_cfa_register %rbp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	leal	8(%rdi,%rdi), %eax
+	popq	%rbp
+	retq
+	.cfi_endproc
+
+	.globl	_h0
+	.align	4, 0x90
+_h0:                                    ## @h0
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp6:
+	.cfi_def_cfa_offset 16
+Ltmp7:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp8:
+	.cfi_def_cfa_register %rbp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	leal	4(%rdi), %eax
+	popq	%rbp
+	retq
+	.cfi_endproc
+
+	.globl	_f
+	.align	4, 0x90
+_f:                                     ## @f
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp9:
+	.cfi_def_cfa_offset 16
+Ltmp10:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp11:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	leal	3(%rdi), %eax
+	leaq	_f_g1(%rip), %rcx
+	movq	%rcx, -24(%rsi)
+	movl	%eax, -12(%rsi)
+	movl	%edi, -16(%rsi)
+	leaq	_g_h1(%rip), %rcx
+	movq	%rcx, -48(%rsi)
+	movl	%eax, -40(%rsi)
+	movq	(%rsi), %rax
+	leal	20(%rdi,%rdi,2), %edi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_f_g0
+	.align	4, 0x90
+_f_g0:                                  ## @f_g0
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp12:
+	.cfi_def_cfa_offset 16
+Ltmp13:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp14:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: ESI<def> ESI<kill> RSI<def>
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	leaq	_f_g1(%rip), %rax
+	movq	%rax, -24(%rdx)
+	movl	%esi, -12(%rdx)
+	movl	%edi, -16(%rdx)
+	leal	3(%rdi), %eax
+	leaq	_g_h1(%rip), %rcx
+	movq	%rcx, -48(%rdx)
+	movl	%eax, -40(%rdx)
+	movq	(%rdx), %rax
+	leal	3(%rdi,%rdi), %ecx
+	leal	14(%rsi,%rcx), %edi
+	movq	%rdx, %rsi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_f_g1
+	.align	4, 0x90
+_f_g1:                                  ## @f_g1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp15:
+	.cfi_def_cfa_offset 16
+Ltmp16:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp17:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movl	12(%rsi), %eax
+	movq	24(%rsi), %rcx
+	addq	$24, %rsi
+	leal	4(%rdi,%rax), %edi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rcx  # TAILCALL
+	.cfi_endproc
+
+	.globl	_g
+	.align	4, 0x90
+_g:                                     ## @g
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp18:
+	.cfi_def_cfa_offset 16
+Ltmp19:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp20:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	leaq	_g_h1(%rip), %rax
+	movq	%rax, -24(%rsi)
+	movl	%edi, -16(%rsi)
+	movq	(%rsi), %rax
+	leal	7(%rdi,%rdi), %edi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_g_h1
+	.align	4, 0x90
+_g_h1:                                  ## @g_h1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp21:
+	.cfi_def_cfa_offset 16
+Ltmp22:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp23:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+	movq	24(%rsi), %rax
+	addl	8(%rsi), %edi
+	leaq	24(%rsi), %rsi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_h
+	.align	4, 0x90
+_h:                                     ## @h
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp24:
+	.cfi_def_cfa_offset 16
+Ltmp25:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp26:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+	movq	(%rsi), %rax
+	addl	$4, %edi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_main_return
+	.align	4, 0x90
+_main_return:                           ## @main_return
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp27:
+	.cfi_def_cfa_offset 16
+Ltmp28:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp29:
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+Ltmp30:
+	.cfi_offset %rbx, -24
+	movq	%rsi, %rbx
+	movl	%edi, %ecx
+	movl	_loop(%rip), %eax
+	leal	-1(%rax), %edx
+	movl	%edx, _loop(%rip)
+	testl	%eax, %eax
+	jle	LBB9_3
+## BB#1:                                ## %if.then
+	leaq	_f_g1(%rip), %rax
+	movq	%rax, -24(%rbx)
+	movl	$236, -12(%rbx)
+	movl	$233, -16(%rbx)
+	leaq	_g_h1(%rip), %rax
+	movq	%rax, -48(%rbx)
+	movl	$236, -40(%rbx)
+	movq	(%rbx), %rax
+	movl	$719, %edi              ## imm = 0x2CF
+	movq	%rbx, %rsi
+	jmp	LBB9_2
+LBB9_3:                                 ## %if.end
+	leaq	L_.str(%rip), %rdi
+	xorl	%eax, %eax
+	movl	%ecx, %esi
+	callq	_printf
+	movq	8(%rbx), %rax
+	movq	16(%rbx), %rsi
+	xorl	%edi, %edi
+LBB9_2:                                 ## %if.then
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_f2
+	.align	4, 0x90
+_f2:                                    ## @f2
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp31:
+	.cfi_def_cfa_offset 16
+Ltmp32:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp33:
+	.cfi_def_cfa_register %rbp
+	pushq	%r14
+	pushq	%rbx
+	subq	$16, %rsp
+Ltmp34:
+	.cfi_offset %rbx, -32
+Ltmp35:
+	.cfi_offset %r14, -24
+	movq	%rsi, %r14
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movl	_loop(%rip), %eax
+	movl	%eax, %ecx
+	notl	%ecx
+	cmpl	$-2, %ecx
+	movl	$-1, %edx
+	cmovgl	%ecx, %edx
+	leal	2(%rax,%rdx), %ebx
+	movl	%ebx, %ecx
+	andl	$7, %ecx
+	testl	%ebx, %ebx
+	je	LBB10_2
+## BB#1:                                ## %entry
+	xorl	%esi, %esi
+	testl	%ecx, %ecx
+	movl	%eax, %edx
+	je	LBB10_16
+LBB10_2:                                ## %unr.cmp42
+	cmpl	$1, %ecx
+	jne	LBB10_4
+## BB#3:
+	leal	4(%rdi,%rdi), %esi
+	movl	%eax, %edx
+	jmp	LBB10_15
+LBB10_4:                                ## %unr.cmp35
+	cmpl	$2, %ecx
+	movl	%eax, %edx
+	je	LBB10_14
+## BB#5:                                ## %unr.cmp28
+	cmpl	$3, %ecx
+	movl	%eax, %edx
+	je	LBB10_13
+## BB#6:                                ## %unr.cmp21
+	cmpl	$4, %ecx
+	movl	%eax, %edx
+	je	LBB10_12
+## BB#7:                                ## %unr.cmp14
+	cmpl	$5, %ecx
+	movl	%eax, %edx
+	je	LBB10_11
+## BB#8:                                ## %unr.cmp
+	cmpl	$6, %ecx
+	movl	%eax, %edx
+	je	LBB10_10
+## BB#9:                                ## %tailrecurse.unr
+	leal	-1(%rax), %edx
+LBB10_10:                               ## %tailrecurse.unr6
+	decl	%edx
+LBB10_11:                               ## %tailrecurse.unr9
+	decl	%edx
+LBB10_12:                               ## %tailrecurse.unr16
+	decl	%edx
+LBB10_13:                               ## %tailrecurse.unr23
+	decl	%edx
+LBB10_14:                               ## %tailrecurse.unr30
+	decl	%edx
+	movl	$470, %esi              ## imm = 0x1D6
+LBB10_15:                               ## %tailrecurse.unr37
+	decl	%edx
+LBB10_16:                               ## %entry.split
+	cmpl	$8, %ebx
+	jb	LBB10_19
+## BB#17:                               ## %entry.split.split
+	incl	%edx
+	movl	$470, %esi              ## imm = 0x1D6
+	.align	4, 0x90
+LBB10_18:                               ## %tailrecurse
+                                        ## =>This Inner Loop Header: Depth=1
+	addl	$-8, %edx
+	testl	%edx, %edx
+	jg	LBB10_18
+LBB10_19:                               ## %if.end.i.i.i.i
+	leal	-1(%rax), %ecx
+	testl	%eax, %eax
+	movl	$-1, %eax
+	cmovsl	%ecx, %eax
+	movl	%eax, _loop(%rip)
+	leaq	L_.str1(%rip), %rdi
+	xorl	%eax, %eax
+	callq	_printf
+	movq	8(%r14), %rax
+	movq	16(%r14), %rsi
+	xorl	%edi, %edi
+	addq	$16, %rsp
+	popq	%rbx
+	popq	%r14
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_g2
+	.align	4, 0x90
+_g2:                                    ## @g2
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp36:
+	.cfi_def_cfa_offset 16
+Ltmp37:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp38:
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+Ltmp39:
+	.cfi_offset %rbx, -24
+	movq	%rcx, %rbx
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movl	_loop(%rip), %eax
+	leal	-1(%rax), %ecx
+	movl	%ecx, _loop(%rip)
+	testl	%eax, %eax
+	jle	LBB11_2
+## BB#1:                                ## %if.then.i.i.i
+	movl	$233, %edi
+	movq	%rbx, %rsi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmp	_f2                     ## TAILCALL
+LBB11_2:                                ## %if.end.i.i.i
+	leal	4(%rdi,%rdi), %esi
+	leaq	L_.str1(%rip), %rdi
+	xorl	%eax, %eax
+	callq	_printf
+	movq	8(%rbx), %rax
+	movq	16(%rbx), %rsi
+	xorl	%edi, %edi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_h2
+	.align	4, 0x90
+_h2:                                    ## @h2
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp40:
+	.cfi_def_cfa_offset 16
+Ltmp41:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp42:
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+Ltmp43:
+	.cfi_offset %rbx, -24
+	movq	%rdx, %rbx
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movl	_loop(%rip), %eax
+	leal	-1(%rax), %ecx
+	movl	%ecx, _loop(%rip)
+	testl	%eax, %eax
+	jle	LBB12_2
+## BB#1:                                ## %if.then.i.i
+	movl	$233, %edi
+	movq	%rbx, %rsi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmp	_f2                     ## TAILCALL
+LBB12_2:                                ## %if.end.i.i
+	leal	4(%rdi,%rdi), %esi
+	leaq	L_.str1(%rip), %rdi
+	xorl	%eax, %eax
+	callq	_printf
+	movq	8(%rbx), %rax
+	movq	16(%rbx), %rsi
+	xorl	%edi, %edi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_h2_1
+	.align	4, 0x90
+_h2_1:                                  ## @h2_1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp44:
+	.cfi_def_cfa_offset 16
+Ltmp45:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp46:
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+Ltmp47:
+	.cfi_offset %rbx, -24
+	movq	%rcx, %rbx
+	movl	_loop(%rip), %eax
+	leal	-1(%rax), %ecx
+	movl	%ecx, _loop(%rip)
+	testl	%eax, %eax
+	jle	LBB13_2
+## BB#1:                                ## %if.then.i
+	movl	$233, %edi
+	movq	%rbx, %rsi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmp	_f2                     ## TAILCALL
+LBB13_2:                                ## %if.end.i
+	addl	%edi, %edx
+	leaq	L_.str1(%rip), %rdi
+	xorl	%eax, %eax
+	movl	%edx, %esi
+	callq	_printf
+	movq	8(%rbx), %rax
+	movq	16(%rbx), %rsi
+	xorl	%edi, %edi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_main_return2
+	.align	4, 0x90
+_main_return2:                          ## @main_return2
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp48:
+	.cfi_def_cfa_offset 16
+Ltmp49:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp50:
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+Ltmp51:
+	.cfi_offset %rbx, -24
+	movq	%rsi, %rbx
+	movl	%edi, %ecx
+	movl	_loop(%rip), %eax
+	leal	-1(%rax), %edx
+	movl	%edx, _loop(%rip)
+	testl	%eax, %eax
+	jle	LBB14_2
+## BB#1:                                ## %if.then
+	movl	$233, %edi
+	movq	%rbx, %rsi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmp	_f2                     ## TAILCALL
+LBB14_2:                                ## %if.end
+	leaq	L_.str1(%rip), %rdi
+	xorl	%eax, %eax
+	movl	%ecx, %esi
+	callq	_printf
+	movq	8(%rbx), %rax
+	movq	16(%rbx), %rsi
+	xorl	%edi, %edi
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_f2_1
+	.align	4, 0x90
+_f2_1:                                  ## @f2_1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp52:
+	.cfi_def_cfa_offset 16
+Ltmp53:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp54:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movq	(%rsi), %rax
+	leal	21(%rdi,%rdi,2), %edi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_g2_1
+	.align	4, 0x90
+_g2_1:                                  ## @g2_1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp55:
+	.cfi_def_cfa_offset 16
+Ltmp56:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp57:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: ESI<def> ESI<kill> RSI<def>
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movq	(%rdx), %rax
+	leal	12(%rsi,%rdi,2), %edi
+	movq	%rdx, %rsi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_h2_11
+	.align	4, 0x90
+_h2_11:                                 ## @h2_11
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp58:
+	.cfi_def_cfa_offset 16
+Ltmp59:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp60:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: ESI<def> ESI<kill> RSI<def>
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movq	(%rdx), %rax
+	leal	8(%rsi,%rdi,2), %edi
+	movq	%rdx, %rsi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_h2_1_1
+	.align	4, 0x90
+_h2_1_1:                                ## @h2_1_1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp61:
+	.cfi_def_cfa_offset 16
+Ltmp62:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp63:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: EDX<def> EDX<kill> RDX<def>
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movq	(%rcx), %rax
+	addl	%esi, %edi
+	leal	4(%rdx,%rdi), %edi
+	movq	%rcx, %rsi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_f2_0_1
+	.align	4, 0x90
+_f2_0_1:                                ## @f2_0_1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp64:
+	.cfi_def_cfa_offset 16
+Ltmp65:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp66:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+                                        ## kill: ESI<def> ESI<kill> RSI<def>
+                                        ## kill: EDI<def> EDI<kill> RDI<def>
+	movq	(%rdx), %rax
+	leal	4(%rdi,%rsi), %edi
+	movq	%rdx, %rsi
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+	.cfi_endproc
+
+	.globl	_main_return2_1
+	.align	4, 0x90
+_main_return2_1:                        ## @main_return2_1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp67:
+	.cfi_def_cfa_offset 16
+Ltmp68:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp69:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+	movl	%edi, %ecx
+	movl	_loop(%rip), %eax
+	leal	-1(%rax), %edx
+	movl	%edx, _loop(%rip)
+	testl	%eax, %eax
+	jle	LBB20_2
+## BB#1:                                ## %if.then
+	movq	(%rsi), %rax
+	movl	$720, %edi              ## imm = 0x2D0
+	addq	$16, %rsp
+	popq	%rbp
+	jmpq	*%rax  # TAILCALL
+LBB20_2:                                ## %if.end
+	leaq	L_.str2(%rip), %rdi
+	xorl	%eax, %eax
+	movl	%ecx, %esi
+	callq	_printf
+	xorl	%edi, %edi
+	callq	_exit
+	.cfi_endproc
+
+	.globl	_main..ret0
+	.align	4, 0x90
+_main..ret0:                            ## @main..ret0
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp70:
+	.cfi_def_cfa_offset 16
+Ltmp71:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp72:
+	.cfi_def_cfa_register %rbp
+	movq	(%rsi), %rax
+	movl	%edi, (%rax)
+	movq	8(%rsi), %rdi
+	movl	$1, %esi
+	callq	_longjmp
+	.cfi_endproc
+
+	.globl	_main..ret1
+	.align	4, 0x90
+_main..ret1:                            ## @main..ret1
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp73:
+	.cfi_def_cfa_offset 16
+Ltmp74:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp75:
+	.cfi_def_cfa_register %rbp
+	movq	(%rsi), %rax
+	movl	%edi, (%rax)
+	movq	8(%rsi), %rdi
+	movl	$1, %esi
+	callq	_longjmp
+	.cfi_endproc
+
+	.globl	_main..ret2
+	.align	4, 0x90
+_main..ret2:                            ## @main..ret2
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp76:
+	.cfi_def_cfa_offset 16
+Ltmp77:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp78:
+	.cfi_def_cfa_register %rbp
+	movq	(%rsi), %rax
+	movl	%edi, (%rax)
+	movq	8(%rsi), %rdi
+	movl	$1, %esi
+	callq	_longjmp
+	.cfi_endproc
+
+	.globl	_main
+	.align	4, 0x90
+_main:                                  ## @main
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp79:
+	.cfi_def_cfa_offset 16
+Ltmp80:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp81:
+	.cfi_def_cfa_register %rbp
+	pushq	%r15
+	pushq	%r14
+	pushq	%rbx
+	subq	$248, %rsp
+Ltmp82:
+	.cfi_offset %rbx, -40
+Ltmp83:
+	.cfi_offset %r14, -32
+Ltmp84:
+	.cfi_offset %r15, -24
+	movq	___stack_chk_guard@GOTPCREL(%rip), %r14
+	movq	(%r14), %r14
+	movq	%r14, -32(%rbp)
+	cmpl	$2, %edi
+	jne	LBB24_27
+## BB#1:                                ## %if.end
+	movq	8(%rsi), %rdi
+	callq	_atoi
+	xorl	%ebx, %ebx
+	movl	%eax, %ecx
+	cmpl	$3, %eax
+	ja	LBB24_30
+## BB#2:                                ## %if.end
+	leaq	LJTI24_0(%rip), %rax
+	movslq	(%rax,%rcx,4), %rcx
+	addq	%rax, %rcx
+	jmpq	*%rcx
+LBB24_3:                                ## %for.cond.preheader
+	movl	$500000000, _loop(%rip) ## imm = 0x1DCD6500
+	leaq	L_.str3(%rip), %rdi
+	xorl	%ebx, %ebx
+	movl	$1500000018, %esi       ## imm = 0x59682F12
+	xorl	%eax, %eax
+	callq	_printf
+	jmp	LBB24_30
+LBB24_27:                               ## %if.then49
+	movl	$500000000, _loop(%rip) ## imm = 0x1DCD6500
+	leaq	_main_return2_1(%rip), %rax
+	movq	_main_stack@GOTPCREL(%rip), %r15
+	movq	%rax, 2024(%r15)
+	leaq	_main..ret2(%rip), %rax
+	movq	%rax, 2032(%r15)
+	leaq	-260(%rbp), %rax
+	movq	%rax, -256(%rbp)
+	leaq	-192(%rbp), %rdi
+	movq	%rdi, -248(%rbp)
+	callq	_setjmp
+	movl	%eax, %ebx
+	testl	%ebx, %ebx
+	cmovnel	-260(%rbp), %ebx
+	jne	LBB24_30
+## BB#28:                               ## %cleanup.cont73
+	leaq	-256(%rbp), %rax
+	movq	%rax, 2040(%r15)
+	movl	_loop(%rip), %eax
+	leaq	2024(%r15), %rsi
+	leal	21(%rax,%rax,2), %edi
+LBB24_29:                               ## %return
+	callq	*2024(%r15)
+	subq	$8, %rsp
+	xorl	%ebx, %ebx
+LBB24_30:                               ## %return
+	cmpq	-32(%rbp), %r14
+	jne	LBB24_32
+## BB#31:                               ## %return
+	movl	%ebx, %eax
+	addq	$248, %rsp
+	popq	%rbx
+	popq	%r14
+	popq	%r15
+	popq	%rbp
+	retq
+LBB24_32:                               ## %return
+	callq	___stack_chk_fail
+LBB24_4:                                ## %if.then8
+	movl	$500000000, _loop(%rip) ## imm = 0x1DCD6500
+	leaq	_main_return(%rip), %rax
+	movq	_main_stack@GOTPCREL(%rip), %r15
+	movq	%rax, 2024(%r15)
+	leaq	_main..ret0(%rip), %rax
+	movq	%rax, 2032(%r15)
+	leaq	-212(%rbp), %rax
+	movq	%rax, -208(%rbp)
+	leaq	-192(%rbp), %rdi
+	movq	%rdi, -200(%rbp)
+	callq	_setjmp
+	movl	%eax, %ebx
+	testl	%ebx, %ebx
+	cmovnel	-212(%rbp), %ebx
+	jne	LBB24_30
+## BB#5:                                ## %cleanup.cont
+	leaq	-208(%rbp), %rax
+	movq	%rax, 2040(%r15)
+	movl	_loop(%rip), %eax
+	leal	3(%rax), %ecx
+	leaq	_f_g1(%rip), %rdx
+	movq	%rdx, 2000(%r15)
+	movl	%ecx, 2012(%r15)
+	movl	%eax, 2008(%r15)
+	leaq	_g_h1(%rip), %rdx
+	movq	%rdx, 1976(%r15)
+	movl	%ecx, 1984(%r15)
+	leaq	2024(%r15), %rsi
+	leal	20(%rax,%rax,2), %edi
+	jmp	LBB24_29
+LBB24_6:                                ## %if.then21
+	movl	$500000000, _loop(%rip) ## imm = 0x1DCD6500
+	leaq	_main_return2(%rip), %rax
+	movq	_main_stack@GOTPCREL(%rip), %r15
+	movq	%rax, 2024(%r15)
+	leaq	_main..ret1(%rip), %rax
+	movq	%rax, 2032(%r15)
+	leaq	-236(%rbp), %rax
+	movq	%rax, -232(%rbp)
+	leaq	-192(%rbp), %rdi
+	movq	%rdi, -224(%rbp)
+	callq	_setjmp
+	movl	%eax, %ebx
+	testl	%ebx, %ebx
+	cmovnel	-236(%rbp), %ebx
+	jne	LBB24_30
+## BB#7:                                ## %cleanup.cont45
+	leaq	-232(%rbp), %rax
+	movq	%rax, 2040(%r15)
+	movl	_loop(%rip), %eax
+	movl	%eax, %ecx
+	notl	%ecx
+	cmpl	$-2, %ecx
+	movl	$-1, %edx
+	cmovgl	%ecx, %edx
+	leal	2(%rax,%rdx), %ecx
+	movl	%ecx, %edi
+	andl	$7, %edi
+	testl	%ecx, %ecx
+	je	LBB24_9
+## BB#8:                                ## %cleanup.cont45
+	xorl	%esi, %esi
+	testl	%edi, %edi
+	movl	%eax, %edx
+	je	LBB24_23
+LBB24_9:                                ## %unr.cmp139
+	cmpl	$1, %edi
+	jne	LBB24_11
+## BB#10:
+	leal	4(%rax,%rax), %esi
+	movl	%eax, %edx
+	jmp	LBB24_22
+LBB24_11:                               ## %unr.cmp132
+	cmpl	$2, %edi
+	movl	%eax, %edx
+	je	LBB24_21
+## BB#12:                               ## %unr.cmp125
+	cmpl	$3, %edi
+	movl	%eax, %edx
+	je	LBB24_20
+## BB#13:                               ## %unr.cmp118
+	cmpl	$4, %edi
+	movl	%eax, %edx
+	je	LBB24_19
+## BB#14:                               ## %unr.cmp111
+	cmpl	$5, %edi
+	movl	%eax, %edx
+	je	LBB24_18
+## BB#15:                               ## %unr.cmp
+	cmpl	$6, %edi
+	movl	%eax, %edx
+	je	LBB24_17
+## BB#16:                               ## %tailrecurse.i.unr
+	leal	-1(%rax), %edx
+LBB24_17:                               ## %tailrecurse.i.unr103
+	decl	%edx
+LBB24_18:                               ## %tailrecurse.i.unr106
+	decl	%edx
+LBB24_19:                               ## %tailrecurse.i.unr113
+	decl	%edx
+LBB24_20:                               ## %tailrecurse.i.unr120
+	decl	%edx
+LBB24_21:                               ## %tailrecurse.i.unr127
+	decl	%edx
+	movl	$470, %esi              ## imm = 0x1D6
+LBB24_22:                               ## %tailrecurse.i.unr134
+	decl	%edx
+LBB24_23:                               ## %cleanup.cont45.split
+	cmpl	$8, %ecx
+	jb	LBB24_26
+## BB#24:                               ## %cleanup.cont45.split.split
+	incl	%edx
+	movl	$470, %esi              ## imm = 0x1D6
+	.align	4, 0x90
+LBB24_25:                               ## %tailrecurse.i
+                                        ## =>This Inner Loop Header: Depth=1
+	addl	$-8, %edx
+	testl	%edx, %edx
+	jg	LBB24_25
+LBB24_26:                               ## %f2.exit
+	leal	-1(%rax), %ecx
+	testl	%eax, %eax
+	movl	$-1, %eax
+	cmovsl	%ecx, %eax
+	movl	%eax, _loop(%rip)
+	leaq	L_.str1(%rip), %rdi
+	xorl	%ebx, %ebx
+	xorl	%eax, %eax
+	callq	_printf
+	movq	2040(%r15), %rsi
+	xorl	%edi, %edi
+	callq	*2032(%r15)
+	subq	$8, %rsp
+	jmp	LBB24_30
+	.cfi_endproc
+	.align	2, 0x90
+L24_0_set_3 = LBB24_3-LJTI24_0
+L24_0_set_4 = LBB24_4-LJTI24_0
+L24_0_set_6 = LBB24_6-LJTI24_0
+L24_0_set_27 = LBB24_27-LJTI24_0
+LJTI24_0:
+	.long	L24_0_set_3
+	.long	L24_0_set_4
+	.long	L24_0_set_6
+	.long	L24_0_set_27
+
+.zerofill __DATA,__bss,_loop,4,2        ## @loop
+	.section	__TEXT,__cstring,cstring_literals
+L_.str:                                 ## @.str
+	.asciz	"#0103:%d\n"
+
+L_.str1:                                ## @.str1
+	.asciz	"#0132:%d\n"
+
+L_.str2:                                ## @.str2
+	.asciz	"#0165:%d\n"
+
+	.comm	_main_stack,2048,4      ## @main_stack
+L_.str3:                                ## @.str3
+	.asciz	"#0193:%d\n"
+
+
+.subsections_via_symbols
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1_llvm.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,239 @@
+#include "stdio.h"
+
+static int loop;
+
+#if 1 // def __micro_c__
+#define CC_ONLY 0
+#else
+#define CC_ONLY 1
+#endif
+
+#ifdef CLANG
+#define _CbC_return __return
+#define _CbC_environment __environment
+#endif
+
+
+/* classical function call case (0) */
+
+f0(int i) {
+    int k,j;
+    k = 3+i;
+    j = g0(i+3);
+    return k+4+j;
+}
+
+g0(int i) {
+    return h0(i+4)+i;
+}
+
+h0(int i) {
+    return i+4;
+}
+
+#if !CC_ONLY
+
+/* straight conversion case (1) */
+
+typedef char *stack;
+
+__code f_g0(int i,int k,stack sp);
+__code g(int i,stack sp);
+__code h(int i,stack sp);
+__code g2(int i,int k,int j,char *sp);
+__code g2_1(int k,int i,char *sp);
+__code h2_11(int i,int k,char *sp);
+__code h2(int i,int k,char *sp);
+__code main_return2(int i,stack sp);
+
+struct cont_interface { // General Return Continuation
+    __code (*ret)(int, void *);
+};
+
+__code f(int i,stack sp) {
+    int k,j;
+    k = 3+i;
+    goto f_g0(i,k,sp);
+}
+
+struct f_g0_interface {  // Specialized Return Continuation
+    __code (*ret)(int, void *);
+    int i_,k_,j_;
+};
+
+__code f_g1(int j,stack sp);
+
+__code f_g0(int i,int k,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = f_g1;
+    c->k_ = k;
+    c->i_ = i;
+
+    goto g(i+3,sp);
+}
+
+__code f_g1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int k = c->k_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(k+4+j,sp);
+}
+
+__code g_h1(int j,stack sp);
+
+__code g(int i,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = g_h1;
+    c->i_ = i;
+
+    goto h(i+3,sp);
+}
+
+__code g_h1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int i = c->i_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(j+i,sp);
+}
+
+__code h(int i,stack sp) {
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    goto (c->ret)(i+4,sp);
+}
+
+struct main_continuation { // General Return Continuation
+    __code (*ret)();
+    __code (*main_ret)();
+    void *env;
+};
+
+__code main_return(int i,stack sp) {
+  if (loop-->0)
+    goto f(233,sp);
+  printf("#0103:%d\n",i);
+  goto ( ( (struct main_continuation *)sp)->main_ret)(0,((struct main_continuation *)sp) ->env );
+}
+
+/* little optimzation without stack continuation (2) */
+
+__code f2(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2(i,k,i+3,sp);
+}
+
+__code g2(int i,int k,int j,char *sp) {
+    j = j+4;
+    goto h2(i,k+4+j,sp);
+}
+
+__code h2_1(int i,int k,int j,char *sp) {
+    goto main_return2(i+j,sp);
+}
+
+__code h2(int i,int k,char *sp) {
+    goto h2_1(i,k,i+4,sp);
+}
+
+__code main_return2(int i,stack sp) {
+  if (loop-->0)
+	goto f2(233,sp);
+    printf("#0132:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+/* little optimizaed case (3) */
+
+__code f2_1(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2_1(k,i+3,sp);
+}
+
+__code g2_1(int k,int i,char *sp) {
+    goto h2_11(k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp);
+__code h2_1_1(int i,int k,int j,char *sp) {
+    goto f2_0_1(k,i+j,sp);
+}
+
+__code h2_11(int i,int k,char *sp) {
+    goto h2_1_1(i,k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp) {
+    goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+}
+
+__code main_return2_1(int i,stack sp) {
+  if (loop-->0) 
+        goto f2_1(233,sp);
+    printf("#0165:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+#define STACK_SIZE 2048
+char main_stack[STACK_SIZE];
+#define stack_last (main_stack+STACK_SIZE)
+
+#endif
+
+#define LOOP_COUNT 10000000
+
+main(int ac,char *av[])
+{
+#if !CC_ONLY
+    struct main_continuation *cont;
+    stack sp = stack_last;
+#endif
+    int sw;
+    int j;
+    if (ac==2) sw = atoi(av[1]);
+    else sw=3;
+
+    if (sw==0) {
+	for(loop=0;loop<LOOP_COUNT;loop++) {
+	   j = f0(233);
+	}
+	printf("#0193:%d\n",j);
+#if !CC_ONLY
+    } else if (sw==1) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f(233,sp);
+    } else if (sw==2) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2(233,sp);
+    } else if (sw==3) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2_1;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2_1(233,sp);
+#endif
+    }
+return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1_llvm_no_w.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,243 @@
+#include "stdio.h"
+#include "stdlib.h"
+
+static int loop;
+
+#if 1 // def __micro_c__
+#define CC_ONLY 0
+#else
+#define CC_ONLY 1
+#endif
+
+#ifdef CLANG
+#define _CbC_return __return
+#define _CbC_environment __environment
+#endif
+
+
+/* classical function call case (0) */
+int g0(int i);
+int h0(int i);
+
+int f0(int i) {
+    int k,j;
+    k = 3+i;
+    j = g0(i+3);
+    return k+4+j;
+}
+
+int g0(int i) {
+    return h0(i+4)+i;
+}
+
+int h0(int i) {
+    return i+4;
+}
+
+#if !CC_ONLY
+
+/* straight conversion case (1) */
+
+typedef char *stack;
+
+__code f_g0(int i,int k,stack sp);
+__code g(int i,stack sp);
+__code h(int i,stack sp);
+__code g2(int i,int k,int j,char *sp);
+__code g2_1(int k,int i,char *sp);
+__code h2_11(int i,int k,char *sp);
+__code h2(int i,int k,char *sp);
+__code main_return2(int i,stack sp);
+
+struct cont_interface { // General Return Continuation
+    __code (*ret)(int, stack);
+};
+
+__code f(int i,stack sp) {
+    int k,j;
+    k = 3+i;
+    goto f_g0(i,k,sp);
+}
+
+struct f_g0_interface {  // Specialized Return Continuation
+    __code (*ret)(int, stack);
+    int i_,k_,j_;
+};
+
+__code f_g1(int j,stack sp);
+
+__code f_g0(int i,int k,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = f_g1;
+    c->k_ = k;
+    c->i_ = i;
+
+    goto g(i+3,sp);
+}
+
+__code f_g1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int k = c->k_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(k+4+j,sp);
+}
+
+__code g_h1(int j,stack sp);
+
+__code g(int i,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = g_h1;
+    c->i_ = i;
+
+    goto h(i+3,sp);
+}
+
+__code g_h1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int i = c->i_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(j+i,sp);
+}
+
+__code h(int i,stack sp) {
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    goto (c->ret)(i+4,sp);
+}
+
+struct main_continuation { // General Return Continuation
+    __code (*ret)();
+    __code (*main_ret)();
+    void *env;
+};
+
+__code main_return(int i,stack sp) {
+    if (loop-->0)
+	goto f(233,sp);
+    printf("#0103:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+/* little optimzation without stack continuation (2) */
+
+__code f2(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2(i,k,i+3,sp);
+}
+
+__code g2(int i,int k,int j,char *sp) {
+    j = j+4;
+    goto h2(i,k+4+j,sp);
+}
+
+__code h2_1(int i,int k,int j,char *sp) {
+    goto main_return2(i+j,sp);
+}
+
+__code h2(int i,int k,char *sp) {
+    goto h2_1(i,k,i+4,sp);
+}
+
+__code main_return2(int i,stack sp) {
+    if (loop-->0)
+	goto f2(233,sp);
+    printf("#0132:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+/* little optimizaed case (3) */
+
+__code f2_1(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2_1(k,i+3,sp);
+}
+
+__code g2_1(int k,int i,char *sp) {
+    goto h2_11(k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp);
+__code h2_1_1(int i,int k,int j,char *sp) {
+    goto f2_0_1(k,i+j,sp);
+}
+
+__code h2_11(int i,int k,char *sp) {
+    goto h2_1_1(i,k,i+4,sp);
+}
+
+__code f2_0_1(int k,int j,char *sp) {
+    goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+}
+
+__code main_return2_1(int i,stack sp) {
+    if (loop-->0)
+        goto f2_1(233,sp);
+    printf("#0165:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+#define STACK_SIZE 2048
+char main_stack[STACK_SIZE];
+#define stack_last (main_stack+STACK_SIZE)
+
+#endif
+
+#define LOOP_COUNT 10000000
+
+int main(int ac,char *av[])
+{
+#if !CC_ONLY
+    struct main_continuation *cont;
+    stack sp = stack_last;
+#endif
+    int sw;
+    int j;
+    if (ac==2) sw = atoi(av[1]);
+    else sw=3;
+
+    if (sw==0) {
+	for(loop=0;loop<LOOP_COUNT;loop++) {
+	   j = f0(233);
+	}
+	printf("#0193:%d\n",j);
+#if !CC_ONLY
+    } else if (sw==1) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f(233,sp);
+    } else if (sw==2) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2(233,sp);
+    } else if (sw==3) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2_1;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2_1(233,sp);
+#endif
+    }
+return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conv1_llvm_noinline.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,239 @@
+#include "stdio.h"
+
+static int loop;
+
+#if 1 // def __micro_c__
+#define CC_ONLY 0
+#else
+#define CC_ONLY 1
+#endif
+
+#ifdef CLANG
+#define _CbC_return __return
+#define _CbC_environment __environment
+#endif
+
+
+/* classical function call case (0) */
+
+__attribute__((noinline)) f0(int i) {
+    int k,j;
+    k = 3+i;
+    j = g0(i+3);
+    return k+4+j;
+}
+
+__attribute__((noinline)) g0(int i) {
+    return h0(i+4)+i;
+}
+
+__attribute__((noinline)) h0(int i) {
+    return i+4;
+}
+
+#if !CC_ONLY
+
+/* straight conversion case (1) */
+
+typedef char *stack;
+
+__attribute__((noinline)) __code f_g0(int i,int k,stack sp);
+__attribute__((noinline)) __code g(int i,stack sp);
+__attribute__((noinline)) __code h(int i,stack sp);
+__attribute__((noinline)) __code g2(int i,int k,int j,char *sp);
+__attribute__((noinline)) __code g2_1(int k,int i,char *sp);
+__attribute__((noinline)) __code h2_11(int i,int k,char *sp);
+__attribute__((noinline)) __code h2(int i,int k,char *sp);
+__attribute__((noinline)) __code main_return2(int i,stack sp);
+
+struct cont_interface { // General Return Continuation
+    __code (*ret)(int, void *);
+};
+
+__attribute__((noinline)) __code f(int i,stack sp) {
+    int k,j;
+    k = 3+i;
+    goto f_g0(i,k,sp);
+}
+
+struct f_g0_interface {  // Specialized Return Continuation
+    __code (*ret)(int, void *);
+    int i_,k_,j_;
+};
+
+__attribute__((noinline)) __code f_g1(int j,stack sp);
+
+__attribute__((noinline)) __code f_g0(int i,int k,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = f_g1;
+    c->k_ = k;
+    c->i_ = i;
+
+    goto g(i+3,sp);
+}
+
+__attribute__((noinline)) __code f_g1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int k = c->k_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(k+4+j,sp);
+}
+
+__attribute__((noinline)) __code g_h1(int j,stack sp);
+
+__attribute__((noinline)) __code g(int i,stack sp) { // Caller
+    struct f_g0_interface *c = 
+	(struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = g_h1;
+    c->i_ = i;
+
+    goto h(i+3,sp);
+}
+
+__attribute__((noinline)) __code g_h1(int j,stack sp) {  // Continuation 
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    int i = c->i_;
+    sp+=sizeof(struct f_g0_interface);
+    c = (struct f_g0_interface *)sp;
+    goto (c->ret)(j+i,sp);
+}
+
+__attribute__((noinline)) __code h(int i,stack sp) {
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    goto (c->ret)(i+4,sp);
+}
+
+struct main_continuation { // General Return Continuation
+    __code (*ret)();
+    __code (*main_ret)();
+    void *env;
+};
+
+__attribute__((noinline)) __code main_return(int i,stack sp) {
+  if (loop-->0)
+    goto f(233,sp);
+  printf("#0103:%d\n",i);
+  goto ( ( (struct main_continuation *)sp)->main_ret)(0,((struct main_continuation *)sp) ->env );
+}
+
+/* little optimzation without stack continuation (2) */
+
+__attribute__((noinline)) __code f2(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2(i,k,i+3,sp);
+}
+
+__attribute__((noinline)) __code g2(int i,int k,int j,char *sp) {
+    j = j+4;
+    goto h2(i,k+4+j,sp);
+}
+
+__attribute__((noinline)) __code h2_1(int i,int k,int j,char *sp) {
+    goto main_return2(i+j,sp);
+}
+
+__attribute__((noinline)) __code h2(int i,int k,char *sp) {
+    goto h2_1(i,k,i+4,sp);
+}
+
+__attribute__((noinline)) __code main_return2(int i,stack sp) {
+  if (loop-->0)
+	goto f2(233,sp);
+    printf("#0132:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+/* little optimizaed case (3) */
+
+__attribute__((noinline)) __code f2_1(int i,char *sp) {
+    int k,j;
+    k = 3+i;
+    goto g2_1(k,i+3,sp);
+}
+
+__attribute__((noinline)) __code g2_1(int k,int i,char *sp) {
+    goto h2_11(k,i+4,sp);
+}
+
+__attribute__((noinline)) __code f2_0_1(int k,int j,char *sp);
+__attribute__((noinline)) __code h2_1_1(int i,int k,int j,char *sp) {
+    goto f2_0_1(k,i+j,sp);
+}
+
+__attribute__((noinline)) __code h2_11(int i,int k,char *sp) {
+    goto h2_1_1(i,k,i+4,sp);
+}
+
+__attribute__((noinline)) __code f2_0_1(int k,int j,char *sp) {
+    goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp);
+}
+
+__attribute__((noinline)) __code main_return2_1(int i,stack sp) {
+  if (loop-->0) 
+        goto f2_1(233,sp);
+    printf("#0165:%d\n",i);
+    goto (( (struct main_continuation *)sp)->main_ret)(0,
+           ((struct main_continuation *)sp)->env);
+}
+
+#define STACK_SIZE 2048
+char main_stack[STACK_SIZE];
+#define stack_last (main_stack+STACK_SIZE)
+
+#endif
+
+#define LOOP_COUNT 10000000
+
+main(int ac,char *av[])
+{
+#if !CC_ONLY
+    struct main_continuation *cont;
+    stack sp = stack_last;
+#endif
+    int sw;
+    int j;
+    if (ac==2) sw = atoi(av[1]);
+    else sw=3;
+
+    if (sw==0) {
+	for(loop=0;loop<LOOP_COUNT;loop++) {
+	   j = f0(233);
+	}
+	printf("#0193:%d\n",j);
+#if !CC_ONLY
+    } else if (sw==1) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f(233,sp);
+    } else if (sw==2) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2(233,sp);
+    } else if (sw==3) {
+	loop = LOOP_COUNT;
+	sp -= sizeof(*cont);
+	cont = (struct main_continuation *)sp;
+	cont->ret = main_return2_1;
+	cont->main_ret = _CbC_return;
+	cont->env = _CbC_environment;
+	goto f2_1(233,sp);
+#endif
+    }
+return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fact-a.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,36 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+#include "stdio.h"
+
+__code factorial(int n,int result,int orig,__code(*print)(),__code(*exit1)(), void *exit1env)
+{
+    if (n<0) {
+	printf("#0008:err %d!\n",n);
+	goto (*exit1)(0,exit1env);
+    }
+    if (n==0)
+	goto (*print)(n,result,orig,print,exit1,exit1env);
+    else {
+	result *= n;
+	n--;
+	goto factorial(n,result,orig,print,exit1,exit1env);
+    }
+}
+
+__code print(int n,int result,int orig,__code(*print)(),__code (*exit1)(),void*exit1env);
+
+int main( int ac, char *av[])
+{
+    int n;
+    // n = atoi(av[1]);
+    n = 10;
+    goto factorial(n,1,n,print,__return,__environment);
+}
+
+__code print(int n,int result,int orig,__code(*print)(),__code (*exit1)(),void*exit1env)
+{
+    printf("#0032:%d! = %d\n",orig, result);
+    goto (*exit1)(0,exit1env);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fact-rectype.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+__code factorial(int n, int result, __rectype *print, __rectype *exit1, void *envp)
+{
+  if(n<0) {
+    print("#0008:err %dn",n);
+    goto (*exit1)(0, envp);
+  }
+    if (n==0)
+      goto (*print)(n,result,print,exit1, envp);
+    else {
+	result *= n;
+	n--;
+	goto factorial(n, result, print,exit1, envp);
+    }
+}
+
+__code print(int n, int result, __rectype *print ,__rectype *exit1 ,void *envp);
+
+int main(int argc, char *argv[]) {
+  int n;
+  n = 10;
+  goto factorial(n,1,print,__return,__environment);
+}
+
+
+__code print(int n, int result, __rectype *print ,__rectype *exit1,void *envp){
+  printf("#0032:%d = %d\n", n, result);
+  goto (*exit1)(0,envp);
+}
Binary file factorial/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/factorial/factorial.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+__code print_factorial(int prod)
+{
+  printf("factorial = %d\n",prod);
+  exit(0);
+}
+
+__code factorial0(int prod, int x)
+{
+  if ( x >= 1) {
+    goto factorial0(prod*x, x-1);
+  }else{
+    goto print_factorial(prod);
+  }
+}
+
+__code factorial(int x)
+{
+  goto factorial0(1, x);
+}
+
+int
+main(int argc, char **argv)
+{
+  int i;
+  i = atoi(argv[1]);
+
+  goto factorial(i);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/factorial/factorial.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+__code print_factorial(int prod)
+{
+  printf("factorial = %d\n",prod);
+  exit(0);
+}
+
+__code factorial0(int prod, int x)
+{
+  if ( x >= 1) {
+    goto factorial0(prod*x, x-1);
+  }else{
+    goto print_factorial(prod);
+  }
+}
+
+__code factorial(int x)
+{
+  goto factorial0(1, x);
+}
+
+int
+main(int argc, char **argv)
+{
+  int i;
+  i = atoi(argv[1]);
+
+  goto factorial(i);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/factorial/factorial.s	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,120 @@
+	.section	__TEXT,__text,regular,pure_instructions
+	.globl	_print_factorial
+	.align	4, 0x90
+_print_factorial:                       ## @print_factorial
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp2:
+	.cfi_def_cfa_offset 16
+Ltmp3:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp4:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+	leaq	L_.str(%rip), %rax
+	movl	%edi, -4(%rbp)
+	movl	-4(%rbp), %esi
+	movq	%rax, %rdi
+	movb	$0, %al
+	callq	_printf
+	movl	$0, %edi
+	movl	%eax, -8(%rbp)          ## 4-byte Spill
+	callq	_exit
+	.cfi_endproc
+
+	.globl	_factorial0
+	.align	4, 0x90
+_factorial0:                            ## @factorial0
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp7:
+	.cfi_def_cfa_offset 16
+Ltmp8:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp9:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+	movl	%edi, -4(%rbp)
+	movl	%esi, -8(%rbp)
+	cmpl	$1, -8(%rbp)
+	jl	LBB1_2
+## BB#1:                                ## %if.then
+	movl	-4(%rbp), %eax
+	imull	-8(%rbp), %eax
+	movl	-8(%rbp), %ecx
+	subl	$1, %ecx
+	movl	%eax, %edi
+	movl	%ecx, %esi
+	callq	_factorial0
+	jmp	LBB1_3
+LBB1_2:                                 ## %if.else
+	movl	-4(%rbp), %edi
+	callq	_print_factorial
+LBB1_3:                                 ## %if.end
+	addq	$16, %rsp
+	popq	%rbp
+	ret
+	.cfi_endproc
+
+	.globl	_factorial
+	.align	4, 0x90
+_factorial:                             ## @factorial
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp12:
+	.cfi_def_cfa_offset 16
+Ltmp13:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp14:
+	.cfi_def_cfa_register %rbp
+	subq	$16, %rsp
+	movl	$1, %eax
+	movl	%edi, -4(%rbp)
+	movl	-4(%rbp), %esi
+	movl	%eax, %edi
+	callq	_factorial0
+	addq	$16, %rsp
+	popq	%rbp
+	ret
+	.cfi_endproc
+
+	.globl	_main
+	.align	4, 0x90
+_main:                                  ## @main
+	.cfi_startproc
+## BB#0:                                ## %entry
+	pushq	%rbp
+Ltmp17:
+	.cfi_def_cfa_offset 16
+Ltmp18:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp19:
+	.cfi_def_cfa_register %rbp
+	subq	$32, %rsp
+	movl	%edi, -4(%rbp)
+	movq	%rsi, -16(%rbp)
+	movq	-16(%rbp), %rsi
+	movq	8(%rsi), %rdi
+	callq	_atoi
+	movl	%eax, -20(%rbp)
+	movl	-20(%rbp), %edi
+	callq	_factorial
+	movl	$0, %eax
+	addq	$32, %rsp
+	popq	%rbp
+	ret
+	.cfi_endproc
+
+	.section	__TEXT,__cstring,cstring_literals
+L_.str:                                 ## @.str
+	.asciz	 "factorial = %d\n"
+
+
+.subsections_via_symbols
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/factorial/test.s	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,27 @@
+; ModuleID = '../../../test.c'
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.8.0"
+
+@.str = private unnamed_addr constant [6 x i8] c"hello\00", align 1
+
+; Function Attrs: nounwind ssp uwtable
+define void @hello() #0 {
+entry:
+  %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([6 x i8]* @.str, i32 0, i32 0))
+  ret void
+}
+
+declare i32 @printf(i8*, ...) #1
+
+; Function Attrs: nounwind ssp uwtable
+define i32 @main() #0 {
+entry:
+  %retval = alloca i32, align 4
+  store i32 0, i32* %retval
+  call void @hello()
+  call void @hello()
+  ret i32 0
+}
+
+attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/goto.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,96 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+extern int printf(const char *,...);
+
+__code (*conv)(int,__code (*)());
+__code a2(int i,__code conv());
+__code a3(int i,__code conv());
+__code a4(int i,__code conv());
+__code a5(int i,__code conv());
+__code a6();
+__code a7();
+__code a8();
+__code a9();
+
+char* print_conv(__code conv());
+
+__code (*exit0)(int,void*);
+void *env;
+
+__code
+a2(int i,__code conv())
+{
+    printf("#0023:a2 %d %s\n",i,print_conv(conv));
+    goto conv(i+1,a4);
+}
+
+__code
+a3(int i,__code (*conv)())
+{
+    printf("#0030:a3 %d %s\n",i,print_conv(conv));
+    goto conv(i+1,a5);
+}
+
+__code
+a4(int i,__code conv())
+{
+    printf("#0037:a4 %d %s\n",i,print_conv(conv));
+    goto (*conv)(i+1,a6);
+}
+
+__code
+a5(int i,__code (*conv)())
+{
+    printf("#0044:a5 %d %s\n",i,print_conv(conv));
+    goto (*conv)(i+1,i+2,i+3,a7);
+}
+
+__code
+a6(int i,int j,int k,__code conv())
+{
+    printf("#0051:a6 %d %s\n",i,print_conv(conv));
+    goto conv(i+1,j,k,a8);
+}
+
+__code
+a7(int i,int j,int k,__code (*conv)())
+{
+    printf("#0058:a7 %d %s\n",i,print_conv(conv));
+    goto conv(i+1,j,k,a9);
+}
+
+__code
+a8(int i,int j,int k,__code conv())
+{
+    printf("#0065:a8 %d %s\n",i,print_conv(conv));
+    goto (*conv)(i+1,j,k,exit0);
+}
+
+__code
+a9(int i,int j,int k,__code (*conv)())
+{
+    printf("#0072:a9 %d %s\n",i,print_conv(conv));
+    goto (*conv)(0,env);
+}
+
+main(int ac,char *av[]) {
+    exit0 = __return;
+    env   = __environment;
+    conv = a2;
+    goto conv(1,a3);
+}
+
+char*
+print_conv(__code conv())
+{
+    if(conv==a2) return "a2";
+    if(conv==a3) return "a3";
+    if(conv==a4) return "a4";
+    if(conv==a5) return "a5";
+    if(conv==a6) return "a6";
+    if(conv==a7) return "a7";
+    if(conv==a8) return "a8";
+    if(conv==a9) return "a9";
+    else return "xx";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loto6.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,80 @@
+/*
+ *  Nov 10, 2009
+ *  created by gongo.
+ *
+ *  Nov 10, 2009
+ *  modified by kent.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+(*ret)(int, void*);
+void *env;
+
+
+__code
+print(int *numbers)
+{
+	printf("%d-%d-%d-%d-%d-%d\n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5]);
+	free(numbers);
+	goto ret(0, env);
+}
+
+	__code
+take(int *array, int size, int length)
+{
+	int *taked = (int*)malloc(sizeof(int)*length);
+
+	memcpy(taked, array, sizeof(int)*length);
+	free(array);
+
+	goto print(taked);
+}
+
+__code
+shuffle(int *array, int size, int idx)
+{
+	int j = random() % size;
+	int tmp = array[idx];
+	array[idx] = array[j];
+	array[j] = tmp;
+
+	if (++idx < size) {
+		goto shuffle(array, size, idx);
+	} else {
+		goto take(array, size, 6);
+	}
+}
+
+__code
+range_loop(int *array, int idx, int from, int to, int step, int size)
+{
+	array[idx] = from;
+
+	if (from+step > to) {
+		goto shuffle(array, size, 0);
+	} else {
+		goto range_loop(array, idx+1, from+step, to, step, size);
+	}
+}
+
+__code
+range(int from, int to, int step)
+{
+	int size = (to-from+1)/step;
+	int *array = (int*)malloc(sizeof(int)*size);
+
+	goto range_loop(array, 0, from, to, step, size);
+}
+
+int
+main()
+{
+	srand(time(NULL));
+	ret = _CbC_return;
+	env = _CbC_environment;
+
+	goto range(1, 43, 1);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/matrix/compute_power.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include "matrix.h"
+
+void compute();
+double ** create_identity_matrix(int size);
+double ** multiply(double **a, double **b, int l, int m, int n);
+void print_matrix(double **a, int row, int col);
+
+int
+main(int argc, char **argv)
+{
+	compute();
+	return 0;
+}
+
+void
+compute()
+{
+	double **A, **B, **C;
+	A = create_identity_matrix(4);
+	B = create_identity_matrix(4);
+	printf("A = \n");
+	print_matrix(A, 4, 4);
+	printf("B = \n");
+	print_matrix(B, 4, 4);
+
+	C = multiply(A, B, 4,4,4);
+	printf("C = \n");
+	print_matrix(C, 4, 4);
+
+
+	free(A);
+	free(B);
+	free(C);
+}
+
+double **
+create_identity_matrix(int size)
+{
+	int i,j;
+	double **ret;
+	ret = create_matrix(sizeof(double), size, size);
+
+	for (j=0; j<size; j++) {
+		for (i=0; i<size; i++) {
+			ret[j][i] = 0;
+		}
+	}
+	for (i=0; i<size; i++) {
+		ret[i][i] = 1.0f;
+	}
+	return ret;
+}
+
+double **
+power_of_matrix(double **a, int n)
+{
+	int r,c,i;
+	double **result;
+	result = create_identity_matrix(n);
+
+	for (r=0; r<l; r++) {
+		for (c=0; c<n; c++) {
+			result[r][c] = 0;
+			for (i=0; i<m; i++) {
+				result[r][c] += a[r][i] * b[i][c];
+			}
+		}
+	}
+	return result;
+}
+
+double **
+multiply(double **a, double **b, int l, int m, int n)
+{
+	int r,c,i;
+	double **result;
+	result = create_matrix(sizeof(double), l, n);
+
+	for (r=0; r<l; r++) {
+		for (c=0; c<n; c++) {
+			result[r][c] = 0;
+			for (i=0; i<m; i++) {
+				result[r][c] += a[r][i] * b[i][c];
+			}
+		}
+	}
+	return result;
+}
+
+/** 表示用 */
+void
+print_matrix(double **a, int row, int col)
+{
+        int i,j;
+        for( j=0; j<row; j++){
+                printf("\t");
+                for( i=0; i<col; i++){
+                        printf("%6.2f ", a[j][i]);
+                }
+                printf("\n");
+        }
+}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/matrix/matrix.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,21 @@
+#include "matrix.h"
+
+void
+*create_matrix(size_t size, int row, int col)
+{
+	int i;
+	void *body;
+	void **ret;
+
+	ret = malloc( size*row*col + sizeof(void*)*row );
+	if (ret==NULL) return NULL;
+
+	body = (void*)(ret+row);
+	for( i=0; i<row; i++){
+		ret[i] = body + size*col*i;
+	}
+	return ret;
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/matrix/matrix.h	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,3 @@
+#include "stdlib.h"
+
+void *create_matrix(size_t size, int row, int col);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/normal.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,26 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+//size_t size;
+int size;
+typedef int test_int;
+
+test_int ti;
+
+void end(){
+	exit(0);
+}
+
+int main(int argc, char **argv){
+	size=0;
+	ti=10;
+
+	printf("main: ");
+	printf("normal:%d\n", argc);
+
+	size = 10;
+	printf("size = %d\n", size);
+	printf("  ti = %d\n",   ti);
+	end();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/normal2.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,65 @@
+//#include<stdio.h>
+//#include<stdlib.h>
+
+struct abc {
+	int a;
+	double b;
+	char c;
+	double *d;
+};
+
+struct def {
+	int d;
+	struct abc e;
+	struct abc *f;
+};
+
+void print_abc(struct abc a){
+	printf("\tstruct abc:\n");
+	printf("\ta=%d, b=%lf, c=%d, d=%p\n", a.a, a.b, a.c, a.d);
+}
+void print_def(struct def b){
+	printf("\tstruct def:\n");
+	printf("\ta=%d, b=%p\n", b.d, b.f);
+	print_abc(b.e);
+}
+
+void cs_exit(int a){
+	printf("cs_exit : a=%d.\n", a);
+	exit(a);
+}
+
+void cs0(struct abc a, struct def b, int c){
+	printf("cs0     :\n");
+	print_abc(a);
+	print_def(b);
+	return cs_exit( c*a.a+b.e.c );
+}
+
+
+void cs_goto(int c, struct abc a, struct def b){
+	printf("cs_return :\n");
+	print_abc(a);
+	print_def(b);
+	return cs0(a, b, c);
+}
+
+int main(int argc, char **argv){
+	struct abc A;
+	struct def B;
+	//int a=10, b=20, c=30, d=40, e=50, f=60, g=70;
+	A.a = 10, A.b = 20.02, A.c = '\0', A.d = 0;
+	B.d = 30, B.f = &A;
+	B.e.a = 50, B.e.b = 60.06, B.e.c = '\1', B.e.d = 0;
+
+	printf("main    :\n");
+	print_abc(A);
+	print_def(B);
+	//printf("20*%d + 30*%d + 40*%d + 50*%d  =\n", a, b, c, d);
+	cs_goto(100, A, B);
+	return 0;
+}
+
+
+
+
Binary file parallel_check/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_check/c-int-double.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,46 @@
+#include<stdio.h>
+#include<math.h>
+
+#define dprint(f, args...) \
+	printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(1), ## args)
+
+int
+test(int a)
+{
+	return (int)pow(a, 2.0);
+}
+
+int
+callee(double a, double b, double c, int d)
+{
+	dprint("a=%d,b=%d,c=%d,d=%d\n", a,b,c,d);
+	return a+b+c+d;
+}
+
+int
+caller(int a, double b, double c, double d)
+{
+	int x;
+	double y,z,w;
+	//x = test(a);
+	//y = test(b);
+	//z = test(c);
+	//w = test(d);
+	x=a, y=b;
+	z=c, w=d;
+
+	return callee(y,z,w,x);
+	//return callee(b,c,d, a);
+}
+
+int
+main (int argc, char **argv)
+{
+	int r;
+	r = caller(11,22,33,44);
+	//r = caller(11,22,33,44, 55,66,77,88);
+	printf("r = %d\n", r);
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_check/c-int.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,71 @@
+#include<stdio.h>
+#define dprint(f, args...) \
+	printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(1), ## args)
+
+void
+callee(int a, int b, int c, int d)
+{
+	int r;
+	dprint("a=%d,b=%d,c=%d,d=%d\n", a,b,c,d);
+	r = a+b+c+d;
+	printf("r = %d\n", r);
+	return;
+}
+
+void
+caller1(int a, int b, int c, int d)
+{
+	int x,y,z,w;
+	x=a, y=b;
+	z=c, w=d;
+
+	callee(x,y,z,w);
+	return;
+}
+
+void
+caller2(int a, int b, int c, int d)
+{
+	int x,y,z,w;
+	x=a, y=b;
+	z=c, w=d;
+
+	callee(y,z,w,x);
+	return;
+}
+
+void
+caller3(int a, int b, int c, int d)
+{
+	callee(b,c,d,a);
+	return;
+}
+
+void
+caller4(int a, int b, int c, int d)
+{
+	callee(a+b,b+c,c+d,d+a);
+	return;
+}
+
+void
+caller5(int a, int b, int c, int d)
+{
+	int x,y,z,w;
+	x = a+b;
+	y = b+c;
+	z = c+d;
+	w = d+a;
+
+	callee(x,y,z,w);
+	return;
+}
+
+int
+main (int argc, char **argv)
+{
+	int r;
+	caller(11,22,33,44);
+	//r = caller(11,22,33,44, 55,66,77,88);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parallel_check/c-struct.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,51 @@
+#include<stdio.h>
+#include<math.h>
+
+#define dprint(f, args...) \
+	printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(1), ## args)
+
+typedef struct {
+	int a;
+	double b;
+	char *c;
+} STRUCT;
+
+int
+test(int a)
+{
+	return (int)pow(a, 2.0);
+}
+
+
+int
+callee(int a, STRUCT s, int b)
+	/*  |-|----|-|  */
+{
+	dprint("a=%d,b=%d\n", a,b);
+	dprint("s.a=%d,s.b=%lf,s.c=%s\n", s.a, s.b, s.c);
+	return a+b+ s.a;
+}
+
+int
+caller(STRUCT s, int a, double b)
+	/*  |----|-|--|  */
+{
+	STRUCT s0;// = {44, 55.5, "aiueo2"};
+	//int a0 = 55;
+	//a0 = a;
+	s0 = s;
+
+	return callee(10, s0, 20);
+}
+
+int
+main (int argc, char **argv)
+{
+	int r;
+	STRUCT s = { 33, 44.4, "aiueo" };
+
+	r = caller(s, 11, 22.2);
+	//r = caller(11,22,33,44, 55,66,77,88);
+	printf("r = %d\n", r);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/Makefile	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,41 @@
+
+#CbCC=../../BUILD/INSTALL_DIR/bin/gcc
+CbCC=/Users/e105711/prog/seminar/CbC/gcc-inst/bin/gcc
+
+#CC=gcc
+#CC=../../../build_gcc/INSTALL_DIR/bin/gcc
+#CC=../../BUILD/INSTALL_DIR/bin/gcc
+CC=/Users/e105711/prog/seminar/CbC/gcc-inst/bin/gcc
+
+HEADERMAKER=../../CbC-scripts/make_headers.py2
+
+# fastcall版では-O0,-O2は動作確認、-O3以上はだめ
+#CFLAGS=-g -O2 -fomit-frame-pointer
+#CFLAGS=-g -O2
+CFLAGS=-g -O0
+#CFLAGS=-g -Os # an error occurred.
+
+.SUFFIXES: .cbc .o
+
+all: quicksort_cbc quicksort_c quicksort_cbc2
+
+.cbc.o:
+	$(CbCC) $(CFLAGS) -c -o $@ $<
+.cbc.h:
+	$(HEADERMAKER) $^ > $@
+
+quicksort_cbc.o: quicksort_cbc.h
+quicksort_cbc2.o: quicksort_cbc2.h
+quicksort_test.o: quicksort_test.h
+
+quicksort_cbc: quicksort_cbc.o quicksort_test.o
+	$(CC) $(CFLAGS) -o $@ $^
+quicksort_cbc2: quicksort_cbc2.o quicksort_test.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+quicksort_c: quicksort_c.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+
+clean: 
+	rm -rf *.o *.s quicksort_c quicksort_cbc quicksort_cbc2 
Binary file quicksort/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/benchmark.sh	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+
+time=/usr/bin/time
+QS=./quicksort_cbc
+size=10000000
+seed=123456789
+num=10
+
+
+max=0
+min=99999
+count=0
+amount=0
+
+echo "size of array = $size"
+while [[ $count -lt $num ]]; do
+        echo "$time -p $QS -n $size -s $seed 2>&1 >& - |grep '^user'|tr -s \" \"|cut -f2 -d\" \" "
+	usertime=$( $time -p $QS -n $size -s $seed 2>&1 >& - |grep '^user'|tr -s " "|cut -f2 -d" ")
+	#usertime=$(printf "%d" $usertime)
+	echo $usertime
+
+	amount=$(($usertime+$amount))
+	if [[ $usertime -lt $min ]]; then
+	    min=$usertime
+	fi
+	if [[ $usertime -gt $max ]]; then
+	    max=$usertime
+	fi
+	#seed=$seed[1,-2]
+	seed=$(($seed+10))
+	count=$(($count+1))
+done
+
+echo "amount time = $amount"
+echo "maxtime = $max"
+echo "mintime = $min"
+
+amount=$(($amount - $max - $min))
+echo "amount time - mintime - maxtime = $amount"
+count=$(($count-2))
+echo "count = $count"
+averagetime=$(($amount/($count)))
+echo "average time = $averagetime"
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/mc/Makefile	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,39 @@
+
+CbCC=../../../../device/mc
+
+#CC=gcc
+CC=../../../../build_gcc/INSTALL_DIR/bin/gcc
+
+HEADERMAKER=../../../CbC-scripts/make_headers.py2
+
+CFLAGS=-g -Wall
+
+.SUFFIXES: .cbc .o .s .c
+
+all: quicksort_cbc quicksort_c quicksort_cbc2
+
+quicksort_c.c quicksort_cbc.cbc quicksort_cbc2.cbc quicksort_test.cbc benchmark.sh:
+	ln -s ../$@
+
+.s.o:
+	$(CC) -c -o $@ $<
+.cbc.s:
+	$(CbCC) $<
+.cbc.h:
+	$(HEADERMAKER) $^ > $@
+
+quicksort_cbc.o: quicksort_cbc.h
+quicksort_cbc2.o: quicksort_cbc2.h
+quicksort_test.o: quicksort_test.h
+
+quicksort_cbc: quicksort_cbc.o quicksort_test.o
+	$(CC) $(CFLAGS) -o $@ $^
+quicksort_cbc2: quicksort_cbc2.o quicksort_test.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+quicksort_c: quicksort_c.o
+	$(CC) $(CFLAGS) -o $@ $^
+
+
+clean: 
+	rm -rf *.o *.s quicksort_c quicksort_cbc quicksort_cbc2 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/quicksort_c.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,183 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<unistd.h>
+#include<assert.h>
+
+static inline void
+SWAP (int *a, int *b)
+{
+	int tmp;
+	tmp = *a;
+	*a = *b;
+	*b = tmp;
+}
+
+static inline int
+mid_point(int a, int b, int c)
+{
+	if (a < b) {
+		if (b < c)
+			return b;
+		else if (a < c)
+			return c;
+		else 
+			return a;
+	} else {
+		if (a < c)
+			return a;
+		else if (b < c)
+			return c;
+		else 
+			return b;
+	}
+}
+
+void
+selectsort(int *v, int s0, int e0)
+{
+	int i,j;
+	int m;
+	int size = e0-s0+1;
+	v += s0;
+	for (i=0; i<size; i++) {
+		m = i;
+		for (j=i+1; j<size; j++) {
+			if (v[m] > v[j])
+				m = j;
+		}
+		if (m!=i)
+			SWAP(&v[i],&v[m]);
+	}
+	return;
+}
+
+void
+quicksort(int *v, int s0, int e0)
+{
+	int p;
+	int s=s0, e=e0;
+#if 0
+	if (e<=s) return;
+	if (e-s<5) {
+		selectsort(v,s0,e0);
+		return;
+	}
+#else
+	if (e<=s) return;
+#endif
+
+	//p = (v[s]+v[(s+e)/2]+v[e])/3;
+	p = mid_point(v[s],v[e],v[(s+e)/2]);
+
+	while (1) {
+		 while (v[s]<p) s++;
+		 while (p<v[e]) e--;
+
+		 if (!(s<e)) break;
+		 SWAP(&v[s], &v[e]);
+		 s++; e--;
+	}
+	assert(e+1==s || s==e);
+
+	quicksort(v, s0, e);
+	quicksort(v, e+1, e0);
+	return;
+}
+
+static void
+print_array(int *v, int size)
+{
+	int i;
+	printf("[");
+	for (i=0; i<size; i++) {
+		printf("%s%4d", (i%10==0)? "\n  ":" ", v[i]);
+	}
+	printf("]\n");
+}
+
+static int
+check_sort(int *v, int size)
+{
+	int i;
+	for (i=0; i<size-1; i++) {
+		if (v[i] > v[i+1])
+			return 0;
+	}
+	return 1;
+}
+
+void
+random_initialize(int *v, int size, int min, int max)
+{
+	int i;
+	int diff = max-min+1;
+
+	for (i=0; i<size; i++) {
+		v[i] = min+random()%diff;
+	}
+	return;
+}
+
+int
+start_sort(int size)
+{
+	int *target;
+
+	target = (int*)malloc(sizeof(int)*size);
+	if (!target) {
+		perror("malloc");
+		exit(1);
+	}
+
+	random_initialize(target, size, 0, 1);
+
+	//print_array(target, size);
+	quicksort(target, 0, size-1);
+	//selectsort(target, 0, size-1);
+	//print_array(target, size);
+	return check_sort(target, size);
+}
+
+int
+main(int argc, char **argv)
+{
+	//unsigned int seed= -1074072728;
+	unsigned int seed;
+	int size=101;
+	int loop=1;
+	int opt, i;
+
+	while ((opt = getopt(argc, argv, "t:s:n:")) != -1) {
+		switch (opt) {
+			case 'n':
+				size = atoi(optarg);
+				break;
+			case 't':
+				loop = atoi(optarg);
+				break;
+			case 's':
+				seed = atoi(optarg);
+				break;
+			default:
+				fprintf(stderr, "Usage: %s [-t times] [-n sizeofarray] [-s seed]\n", argv[0]);
+				exit(1);
+		}
+	}
+
+	printf("start seed = %u\n", seed);
+	printf("sort size = %d\n", size);
+	for (i=0; i<loop; i++) {
+		srandom(seed+i);
+		int b = start_sort(size);
+		if (b) {
+			printf("seed = %d+%u, success\n", i, seed);
+		} else {
+			fprintf(stderr, "sorting failure!  seed=%u+%d\n", seed,i);
+			exit(1);
+		}
+	}
+	exit(0);
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/quicksort_cbc.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,244 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<assert.h>
+
+typedef void *stack;
+typedef struct {
+	int size;
+	void *interface;
+	__code  (*ret)(void*, stack) ;
+} frame, *framep;
+
+/* quickstart main routine. */
+typedef struct {
+	int *v;
+	int s;
+	int e;
+} QS_IF ;
+typedef __code  (*RET)(void*);
+
+#include"quicksort_cbc.h"
+
+/* for check. */
+void *mustbefreed;
+
+__code  returner(stack sp)
+{
+	framep fp = (framep)sp;
+	sp += fp->size;
+	goto fp->ret(fp->interface, sp);
+}
+
+__code  quicksort_start(void *arg, stack sp)
+{
+	QS_IF *recvif = arg;
+	int a,b,c,p;
+	a = recvif->v[recvif->s];
+	b = recvif->v[recvif->e];
+	c = recvif->v[(recvif->s+recvif->e)/2];
+
+	//printf("quicksort_start: s=%d,e=%d", recvif->s, recvif->e);
+	if (recvif->e <= recvif->s) goto returner(sp);
+
+	if (a < b) {
+		if (b < c)
+			p = b;
+		else if (a < c)
+			p = c;
+		else 
+			p = a;
+	} else {
+		if (a < c)
+			p = a;
+		else if (b < c)
+			p = c;
+		else 
+			p = b;
+	}
+
+	goto quicksort_divider (recvif, recvif->s, recvif->e, p, sp);
+}
+/* main routine end. */
+
+/* divide routine. */
+__code  quicksort_divider(QS_IF *recvif, int s, int e, int p, stack sp)
+{
+	goto quicksort_divider_s(recvif, s, e, p, sp);
+}
+__code  quicksort_divider_s(QS_IF *recvif, int s, int e, int p, stack sp)
+{
+	if (recvif->v[s]<p) {
+		goto quicksort_divider_s(recvif, s+1, e, p, sp);
+	} else
+		goto quicksort_divider_e(recvif, s, e, p, sp);
+}
+__code  quicksort_divider_e(QS_IF *recvif, int s, int e, int p, stack sp)
+{
+	if (p<recvif->v[e]) {
+		e--;
+		goto quicksort_divider_e(recvif, s, e, p, sp);
+	} else
+		goto quicksort_swapper(recvif, s, e, p, sp);
+}
+__code  quicksort_swapper(QS_IF *recvif, int s, int e, int p, stack sp)
+{
+	if (s<e) {
+		int tmp;
+		tmp = recvif->v[s];
+		recvif->v[s] = recvif->v[e];
+		recvif->v[e] = tmp;
+		goto quicksort_divider(recvif, s+1, e-1, p, sp);
+	} else {
+		goto quicksort_treecall(recvif, s, e, sp);
+	}
+}
+/* divide routin end. */
+
+
+/* recursive call routine. */
+__code  quicksort_treecall(QS_IF *recvif, int s, int e, stack sp)
+{
+	framep fp;
+	QS_IF *outif;
+
+	/* interface for first quicksort_start this segment directly jump to.  */
+	outif = (sp-=sizeof(QS_IF));
+	outif->v = recvif->v;
+	outif->s = recvif->s;
+	outif->e = e;
+	fp = (sp-=sizeof(frame));
+	fp->ret = quicksort_start;
+	fp->interface = recvif;
+	fp->size = sizeof(frame)+sizeof(QS_IF);
+
+	/* recvif is used by second quicksort_start.  */
+	recvif->s = e+1;
+	goto quicksort_start(outif, sp);
+}
+/* recursive call routine end. */
+
+#define STACK_SIZE 10240
+
+typedef struct {
+	__code  (*ret)(void*);
+	void *ret_arg;
+	stack *sp;
+} QS_FINISH;
+__code 
+quicksort(int *v, int s, int e,  RET ret, void *arg )
+{
+	framep fp;
+	stack sp0, sp;
+	sp0 = mustbefreed = malloc(STACK_SIZE);
+	sp = sp0 + STACK_SIZE;
+	QS_FINISH *finish_if;
+	QS_IF *outif;
+	
+	/* interface for quicksort_finish.  */
+	finish_if = (sp -= sizeof(QS_FINISH));
+	finish_if->ret = ret;
+	finish_if->ret_arg = arg;
+	finish_if->sp = sp0;
+
+	/* interface for quicksort_start.  */
+	outif = (sp -= sizeof(QS_IF));
+	outif->v = v;
+	outif->s = s;
+	outif->e = e;
+	/* frame for quicksort_finish.  */
+	fp = (sp -= sizeof(frame));
+	fp->ret = quicksort_finish;
+	fp->interface = finish_if;
+	fp->size = sizeof(frame)+sizeof(QS_IF);
+
+	goto quicksort_start(outif, sp);
+}
+__code 
+quicksort_finish(void *arg, stack sp)
+{
+	QS_FINISH interface;
+	interface = *(QS_FINISH*)arg;
+	//assert((void*)interface.sp==(void*)mustbefreed);
+	free(interface.sp);
+	goto interface.ret(interface.ret_arg);
+}
+
+
+
+#if 0
+void
+quicksort_c(int *v, int s0, int e0, stack sp)
+{
+	int p;
+	int s=s0, e=e0;
+	if (e<=s) return;
+
+	//p = (v[s]+v[(s+e)/2]+v[e])/3;
+	p = mid_point(v[s],v[e],v[(s+e)/2]);
+
+	while (1) {
+		 while (v[s]<p) s++;
+		 while (p<v[e]) e--;
+
+		 if (!(s<e)) break;
+		 SWAP(&v[s], &v[e]);
+		 s++; e--;
+	}
+	assert(e+1==s || s==e);
+
+	quicksort(v, s0, e);
+	quicksort(v, e+1, e0);
+	return;
+}
+
+
+
+/*  --------------------
+ *     | args |fp| 
+ *  --------------------
+ *  +            ↑     -
+ *               sp
+ */ 
+/* ret segmentへgotoしたときのstack spの状態
+ *
+ * sp が直接さすのは frame 構造体
+ * frame.size:
+ * frame.ret: そのret segmentが終了した時にgotoすべきret segment.
+ * frame.interface: frame.retへgotoするときのinterface.
+ *                  このポインタが指すメモリ領域は stack
+ *                  中にあっても良いしなくても良い。
+ *                  ただしframe.retを登録した側で解放すべき。
+ * sp+sizeof(frame)が指すのは実行中のret segmentのinterface(引数)
+ * これは実行中のret segmentがメモリ管理する
+ * 通常はこのret segmentが終了する際に sp+=frame.size とすればよい
+ */
+__code caller0(void *arg, stack sp)
+{
+	/* interface for caller_finish0.  */
+	double *finish_arg = (sp -= sizeof(double));
+
+	/* arg for quicksort_start.  */
+	outif = (sp -= sizeof(*outif));
+	framep fp = (sp -= sizeof(frame));
+	fp->ret = caller_finish;
+	fp->interface = NULL;
+	fp->size = sizeof(*outif)+sizeof(frame);
+
+	goto quicksort_start(outif, sp);
+}
+__code caller_finish0(void *arg, stack sp)
+{
+}
+
+__code __returner0(void *arg , stack sp)
+{
+	framep fp = sp;
+	sp += fp->size;
+	goto fp->ret(fp->interface, sp);
+}
+
+#endif
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/quicksort_cbc2.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,159 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<assert.h>
+
+typedef struct {
+	int *v;
+	int s;
+	int e;
+} QS_IF;
+
+typedef void *stack;
+typedef __code (*RET)(QS_IF, stack);
+typedef struct {
+	int size;
+	QS_IF interface;
+	RET ret;
+} frame, *framep;
+
+typedef __code (*RETTYPE)(void*);
+typedef struct {
+	RETTYPE ret;
+	void *ret_arg;
+	stack *sp;
+} QS_FINISH;
+#define STACK_SIZE 10240
+
+#include"quicksort_cbc2.h"
+
+__code returner(stack sp)
+{
+	framep fp = (framep)sp;
+	sp += fp->size;
+	goto fp->ret(fp->interface, sp);
+}
+
+__code quicksort_start(QS_IF recvif, stack sp)
+{
+	int a,b,c,p;
+	a = recvif.v[recvif.s];
+	b = recvif.v[recvif.e];
+	c = recvif.v[(recvif.s+recvif.e)/2];
+
+	//printf("quicksort_start: s=%d,e=%d", recvif->s, recvif->e);
+	if (recvif.e <= recvif.s) goto returner(sp);
+
+	if (a < b) {
+		if (b < c)
+			p = b;
+		else if (a < c)
+			p = c;
+		else 
+			p = a;
+	} else {
+		if (a < c)
+			p = a;
+		else if (b < c)
+			p = c;
+		else 
+			p = b;
+	}
+
+	goto quicksort_divider (recvif, recvif.s, recvif.e, p, sp);
+}
+/* main routine end. */
+
+/* divide routine. */
+__code quicksort_divider(QS_IF recvif, int s, int e, int p, stack sp)
+{
+	goto quicksort_divider_s(recvif, s, e, p, sp);
+}
+__code quicksort_divider_s(QS_IF recvif, int s, int e, int p, stack sp)
+{
+	if (recvif.v[s]<p) {
+		s++;
+		goto quicksort_divider_s(recvif, s, e, p, sp);
+	} else
+		goto quicksort_divider_e(recvif, s, e, p, sp);
+}
+__code quicksort_divider_e(QS_IF recvif, int s, int e, int p, stack sp)
+{
+	if (p<recvif.v[e]) {
+		e--;
+		goto quicksort_divider_e(recvif, s, e, p, sp);
+	} else
+		goto quicksort_swapper(recvif, s, e, p, sp);
+}
+__code quicksort_swapper(QS_IF recvif, int s, int e, int p, stack sp)
+{
+	if (s<e) {
+		int tmp;
+		tmp = recvif.v[s];
+		recvif.v[s] = recvif.v[e];
+		recvif.v[e] = tmp;
+		s++;
+		e--;
+		goto quicksort_divider(recvif, s, e, p, sp);
+	} else {
+		//assert(e+1==s || s==e);
+		goto quicksort_treecall(recvif, s, e, sp);
+	}
+}
+/* divide routin end. */
+
+
+/* recursive call routine. */
+__code quicksort_treecall(QS_IF recvif, int s, int e, stack sp)
+{
+	framep fp;
+
+	/* interface for first quicksort_start this segment directly jump to.  */
+	fp = (sp-=sizeof(frame));
+	fp->ret = quicksort_start;
+	fp->size = sizeof(frame);
+	fp->interface.v = recvif.v;
+	fp->interface.s = e+1;
+	fp->interface.e = recvif.e;
+
+	/* recvif is used by second quicksort_start.  */
+	recvif.e = e;
+	goto quicksort_start(recvif, sp);
+}
+/* recursive call routine end. */
+
+__code
+quicksort(int *v, int s, int e,  RETTYPE ret, void *arg )
+{
+	framep fp;
+	stack sp0, sp;
+	sp0 = malloc(STACK_SIZE);
+	printf("allocate a stack %p\n", sp0);
+	sp = sp0 + STACK_SIZE;
+	QS_FINISH *finish_if;
+	
+	/* interface for quicksort_finish.  */
+	finish_if = (sp -= sizeof(*finish_if));
+	finish_if->ret = ret;
+	finish_if->ret_arg = arg;
+	finish_if->sp = sp0;
+
+	/* interface for quicksort_start.  */
+	/* frame for quicksort_finish.  */
+	fp = (sp -= sizeof(frame));
+	fp->ret = quicksort_finish;
+	fp->size = sizeof(frame);
+	fp->interface.v = v;
+	fp->interface.s = s;
+	fp->interface.e = e;
+
+	goto quicksort_start(fp->interface, sp);
+}
+__code
+quicksort_finish(QS_IF recvif, stack sp)
+{
+	QS_FINISH *interface = (QS_FINISH*)sp;
+	free(interface->sp);
+	printf("free the stack %p\n", interface->sp);
+	goto interface->ret(interface->ret_arg);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/quicksort/quicksort_test.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,106 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<assert.h>
+#include<unistd.h>
+
+#include"quicksort_test.h"
+
+extern __code quicksort(int *,int,int, __code (*)(void*), void*);
+
+
+void
+random_initialize(int *v, int size, int min, int max)
+{
+	int i;
+	int diff = max-min+1;
+
+	for (i=0; i<size; i++) {
+		v[i] = min+random()%diff;
+	}
+	return;
+}
+
+static void
+print_array(int *v, int size)
+{
+	int i;
+	printf("[");
+	for (i=0; i<size; i++) {
+		printf("%s%4d", (i%10==0)? "\n  ":" ", v[i]);
+	}
+	printf(" ]\n");
+}
+
+void
+starter(int size)
+{
+	int *target;
+
+	target = (int*)malloc(sizeof(int)*size);
+	if (!target) {
+		perror("malloc");
+		exit(1);
+	}
+
+	random_initialize(target, size, 0, 90);
+
+	//print_array(target, size);
+	goto quicksort(target, 0, size-1, exit0, (void*)target);
+
+	printf("bad region\n");
+}
+
+static int size=100;
+
+int
+main(int argc, char **argv)
+{
+	unsigned int seed=0;
+	int opt;
+
+	while ((opt = getopt(argc, argv, "s:n:")) != -1) {
+		switch (opt) {
+			case 's':
+				seed = atoi(optarg);
+				break;
+			case 'n':
+				size = atoi(optarg);
+				break;
+			default:
+				fprintf(stderr, "Usage: %s [-t times] [-n sizeofarray] [-s seed]\n", argv[0]);
+				exit(1);
+		}
+	}
+
+	srandom(seed);
+	starter(size);
+	return 0;
+}
+
+static int
+check_sort(int *v, int size)
+{
+	int i;
+	for (i=0; i<size-1; i++) {
+		if (v[i] > v[i+1])
+			return 0;
+	}
+	return 1;
+}
+
+__code
+exit0(void *arg)
+{
+	int *v = arg;
+	int b;
+	//print_array(arg, size);
+	b = check_sort(arg, size);
+	if (b) {
+		printf("sorting successful!\n");
+		exit(EXIT_SUCCESS);
+	} else {
+		printf("sorting failure! \n");
+		exit(EXIT_FAILURE);
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectype/rectype.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <stdlib.h>
+__code print(__rectype *p)
+{
+	printf("print\n");
+	exit(0);
+}
+__code csA(__rectype *p)
+{
+	goto p(csA);
+}
+
+void main1()
+{
+	goto csA(print);
+}
+
+int main()
+{
+	main1();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectype/struct.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <stdlib.h>
+struct interface {
+	__code (*next)(struct interface);
+};
+
+__code print(struct interface p)
+{
+	printf("print\n");
+	exit(0);
+}
+__code csA(struct interface p)
+{
+	struct interface ds;
+	ds.next = csA;
+	goto p.next(ds);
+}
+
+void main1()
+{
+	struct interface ds;
+	ds.next = print;
+	goto csA(ds);
+}
+
+int main()
+{
+	main1();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/Makefile	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,39 @@
+# Makefile
+CbCC = /Users/e105711/prog/seminar/CbC/gcc-inst/bin/gcc 
+
+CFLAGS = -g -O2 -Wall
+
+
+.SUFFIXES: .cbc .o
+
+all: rectypeTest1 typedef struct instruct inparm
+
+.cbc.o:
+	$(CbCC) $(CFLAGS) -c -o $@ $<
+
+rectypeTest1.o: rectypeTest1.cbc
+typedef.o: typedef.cbc
+struct.o: struct.cbc
+instruct.o: instruct.cbc
+inparm.o: inparm.cbc
+
+
+rectypeTest1: rectypeTest1.o
+	$(CbCC) $(CFLAGS) -o $@ $^
+
+typedef: typedef.o
+	$(CbCC) $(CFLAGS) -o $@ $^
+
+struct: struct.o
+	$(CbCC) $(CFLAGS) -o $@ $^
+
+instruct: instruct.o
+	$(CbCC) $(CFLAGS) -o $@ $^
+
+inparm: inparm.o
+	$(CbCC) $(CFLAGS) -o $@ $^
+
+clean:
+	rm -rf *.o *.s typedef rectypeTest1 struct instruct inparm
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/inparm.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+__code print(__rectype *p) {
+	puts("inparm: hello");
+	exit(0);
+}
+
+__code csA(__code (*p)(__rectype*)) {
+	goto p(csA);
+}
+
+void main1() {
+	goto csA(print);
+}
+
+int main() {
+	main1();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/instruct.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,28 @@
+#include <stdlib.h>
+
+// miss
+struct interface {
+  __rectype *next;
+};
+
+__code print(struct interface p) {
+  puts("print");
+  exit(0);
+}
+
+__code csA(struct interface p) {
+  struct interface ds;
+  ds.next = csA;
+  goto p.next(ds);
+}
+
+void main1() {
+  struct interface ds;
+  ds.next = print;
+  goto csA(ds);
+}
+
+int main() {
+  main1();
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/rectypeTest1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,22 @@
+#include <stdio.h>
+__code print(__rectype *p, int num) {
+  printf("num = %d\n",num);
+}
+
+__code csA(__rectype *p, int num) {
+  goto p(csA,3,4);
+  goto p(2,3);
+  goto p(csA,3);
+  return;
+}
+
+void funcA(__code (*p)()){
+  goto p(print, 3);
+  return;
+}
+
+int main() {
+  funcA(csA);
+
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/rectypeTest1.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+__code print(__rectype *p, int num) {
+  printf("num = %d\n",num);
+  exit(0);
+}
+
+//__code csA(__rectype *p, int num) {
+__code csA(__code (*p)(void*,int), int num) {//  goto p(csA,3,4); // error: too many arguments
+  goto p(2,3); // error : internal compiler error
+//  goto p(csA,3); 
+  return;
+}
+
+void funcA(__code (*p)()){
+  goto p(print, 3);
+  return;
+}
+
+int main() {
+  funcA(csA);
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/segmentfault.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+void func( void (*p)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)(void(*)()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) {
+	p(3);
+}
+
+
+
+
+int main() {
+
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/struct.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,33 @@
+struct aaa {
+	__rectype *child;
+};
+__code test() {
+	struct aaa b;
+}
+
+struct interface {
+	__code (*next)(struct interface);
+};
+
+
+#include <stdio.h>
+#include <stdlib.h>
+__code csB() {
+	exit(0);
+}
+__code print(struct interface p) {
+	puts("hello");
+	exit(0);
+}
+
+__code csA(struct interface p) {
+	struct interface ds = { csB };
+	goto p.next(ds);
+//	goto p.next(3); // error
+}
+
+int main() {
+	struct interface ds = { print };
+	goto csA(ds);
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/struct2.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,33 @@
+
+struct interface {
+  __code (*next)();
+ __rectype child;
+  // __rectype *child;
+  //  struct interface *child;
+};
+
+#include <stdio.h>
+__code csA()
+{
+  printf("csA\n");
+}
+
+__code csB()
+{
+  printf("csB\n");
+}
+
+int main()
+{
+  struct interface p;
+  p.next = csA;
+
+  struct interface pp;
+  pp.next = csB;
+  p.child = &pp;
+
+  //  goto p.child->next();
+  goto p.child->next();
+  
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/typedef.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,24 @@
+typedef __code (CS)(__rectype*); // CS *p
+
+//typedef __code (*CS)(__code(*p)());
+//typedef __code (CS)(__code(*p)()); // CS *p
+
+#include <stdio.h>
+__code cs_end(CS *p)
+{
+  printf("end\n");
+}
+
+__code cs(CS *p)
+{
+  CS *b; 
+  goto p(b);
+//  goto p("aaa"); //note: expected ‘void (*)’ but argument is of type ‘char
+}
+
+int main() {
+  CS *p;
+  p = cs_end;
+  goto cs(p);
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/typedef2.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,24 @@
+typedef __code (*csPtr)(__rectype);
+
+//typedef __code (*csPtr)(__code(*p)());
+//typedef __code (csPtr)(__code(*p)()); // csPtr *p
+
+#include <stdio.h>
+__code cs_end(csPtr p)
+{
+  printf("end\n");
+}
+
+__code cs(csPtr p)
+{
+  csPtr b;
+  goto p(b);
+  //  goto p(3); // note: expected ‘void (*)()’ but argument is of type ‘int’
+}
+
+int main() {
+  csPtr p;
+  p = cs_end;
+  goto cs(p);
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rectypeTest/typedef3.cbc	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,21 @@
+typedef __code (*csPtr)(__rectype*);
+
+#include <stdio.h>
+__code cs_end(csPtr *p)
+{
+  printf("end\n");
+}
+
+__code cs(csPtr p)
+{
+  csPtr *b; //  <- This declaration please care.
+  goto p(b);
+  //  goto p(3); // note: expected ‘void (**’ but argument is of type ‘int’
+}
+
+int main() {
+  csPtr p;
+  p = cs_end;
+  goto cs(p);
+  return 0;
+}
Binary file regexp/a.out has changed
Binary file regexp/dfareg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regexp/dfareg.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,182 @@
+#include <stdio.h>
+
+#include <stdlib.h>
+
+__code state_20_21(char* s);
+__code state_1(char* s);
+__code state_3_8_9_13_23_24(char* s);
+__code state_6_7(char* s);
+__code state_2_3_9_13_23_24_25(char* s);
+__code state_10_11(char* s);
+__code state_18_19(char* s);
+__code state_4_5(char* s);
+__code state_14_15(char* s);
+__code state_3_9_13_22_23_24(char* s);
+__code state_3_9_12_13_23_24(char* s);
+__code state_16_17(char* s);
+__code accept();
+__code reject();
+
+int main(int argc, char* argv[]) {
+	if (argc == 1) {
+		printf("usage: %s text\n", argv[0]);
+		exit(0);
+}
+
+	puts("regexp: P(erl|HP|ython)*");
+	puts("number of state: 12");
+	printf("string: %s\n", argv[1]);
+	goto state_1(argv[1]);
+	return 0;
+}
+
+__code state_20_21(char* s) {
+	switch(*s++) {
+		case 'n': 
+			goto state_3_9_13_22_23_24(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_1(char* s) {
+	switch(*s++) {
+		case 'P': 
+			goto state_2_3_9_13_23_24_25(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_3_8_9_13_23_24(char* s) {
+	switch(*s++) {
+		case 'y': 
+			goto state_14_15(s);
+			break;
+		case 'H': 
+			goto state_10_11(s);
+			break;
+		case 'e': 
+			goto state_4_5(s);
+			break;
+		case '\0': goto accept();
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_6_7(char* s) {
+	switch(*s++) {
+		case 'l': 
+			goto state_3_8_9_13_23_24(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_2_3_9_13_23_24_25(char* s) {
+	switch(*s++) {
+		case 'y': 
+			goto state_14_15(s);
+			break;
+		case 'H': 
+			goto state_10_11(s);
+			break;
+		case 'e': 
+			goto state_4_5(s);
+			break;
+		case '\0': goto accept();
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_10_11(char* s) {
+	switch(*s++) {
+		case 'P': 
+			goto state_3_9_12_13_23_24(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_18_19(char* s) {
+	switch(*s++) {
+		case 'o': 
+			goto state_20_21(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_4_5(char* s) {
+	switch(*s++) {
+		case 'r': 
+			goto state_6_7(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_14_15(char* s) {
+	switch(*s++) {
+		case 't': 
+			goto state_16_17(s);
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_3_9_13_22_23_24(char* s) {
+	switch(*s++) {
+		case 'y': 
+			goto state_14_15(s);
+			break;
+		case 'H': 
+			goto state_10_11(s);
+			break;
+		case 'e': 
+			goto state_4_5(s);
+			break;
+		case '\0': goto accept();
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_3_9_12_13_23_24(char* s) {
+	switch(*s++) {
+		case 'y': 
+			goto state_14_15(s);
+			break;
+		case 'H': 
+			goto state_10_11(s);
+			break;
+		case 'e': 
+			goto state_4_5(s);
+			break;
+		case '\0': goto accept();
+			break;
+		default: goto reject();
+	}
+}
+
+__code state_16_17(char* s) {
+	switch(*s++) {
+		case 'h': 
+			goto state_18_19(s);
+			break;
+		default: goto reject();
+	}
+}
+
+
+__code accept() {
+	printf("\nstring matches regexp. \n\n");
+}
+
+
+__code reject() {
+	printf("\nstring does not match regexp. \n\n");
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regexp/dfareg.py	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,414 @@
+#!/usr/bin/env python
+
+import copy
+import sys
+
+class NondeterministicFiniteAutomaton(object):
+    def __init__(self, transition, start, accepts, map_):
+        self.transition = transition
+        self.start = start
+        self.accepts = accepts
+        self.map = map_
+
+    def epsilonExpand(self, set_):
+        que = set(set_)
+        done = set()
+        while que:
+            stat = que.pop()
+            nexts = self.transition(stat, "")
+            done.add(stat)
+            for nextStat in nexts:
+                if not nextStat in done: que.add(nextStat)
+        return frozenset(done)
+
+class DeterministicFiniteAutomaton(object):
+    def __init__(self, transition, start, accepts, map_):
+        self.transition = transition
+        self.start = start
+        self.accepts = accepts
+        self.map = map_
+    def getRuntime(self):
+        return DFARuntime(self)
+
+class DFARuntime(object):
+    def __init__(self, DFA):
+        self.DFA = DFA
+        self.curState = self.DFA.start
+
+    def doTransition(self, char):
+        self.curState = self.DFA.transition(
+            self.curState, char)
+
+    def isAcceptState(self):
+        return self.curState in self.DFA.accepts
+
+    def doesAccept(self, input):
+        for alphabet in input:
+            self.doTransition(alphabet)
+        return self.isAcceptState()
+
+class Token(object):
+    CHARACTER  = 0
+    OPE_UNION  = 1
+    OPE_STAR   = 2
+    LPAREN     = 3
+    RPAREN     = 4
+    EOF        = 5
+
+    def __init__(self, value, kind):
+        self.value = value
+        self.kind  = kind
+
+
+class Lexer(object):
+    def __init__(self, str):
+        self.stringList = list(str)
+
+    def scan(self):
+        if not self.stringList:
+            return Token(None, Token.EOF)
+
+        ch = self.stringList.pop(0)
+        if   ch == '\\':
+            return Token(self.stringList.pop(0), Token.CHARACTER)
+        elif ch == '|':
+            return Token(ch, Token.OPE_UNION)
+        elif ch == '(':
+            return Token(ch, Token.LPAREN)
+        elif ch == ')':
+            return Token(ch, Token.RPAREN)
+        elif ch == '*':
+            return Token(ch, Token.OPE_STAR)
+        else:
+            return Token(ch, Token.CHARACTER)
+
+"""
+ Context-free Grammer:
+ (A) expression -> subexpr EOF
+ (B) subexpr -> seq '|' subexpr | seq
+ (C) seq -> subseq | ''
+ (D) subseq -> star subseq | star
+ (E) star -> factor '*' | factor
+ (F) factor -> '(' subexpr ')' | CHARACTER
+"""
+
+class Parser(object):
+    def __init__(self, lexer):
+        self.lexer = lexer
+        self.look  = None
+        self.move()
+
+    def match(self, tag):
+        if self.look.kind != tag:
+            raise Exeption("syntax error")
+        self.move()
+
+    def move(self):
+        self.look = self.lexer.scan()
+
+    def factor(self):
+        if self.look.kind == Token.LPAREN:
+            # factor -> '(' subexpr ')'
+            self.match(Token.LPAREN)
+            node = self.subexpr()
+            self.match(Token.RPAREN)
+            return node
+        else:
+            # factor -> CHARACTER
+            node = Character(self.look.value)
+            self.match(Token.CHARACTER)
+            return node
+
+    def star(self):
+        # star -> factor '*' | factor
+        node = self.factor()
+        if self.look.kind == Token.OPE_STAR:
+            self.match(Token.OPE_STAR)
+            node = Star(node)
+        return node
+
+    def seq(self):
+        if self.look.kind == Token.LPAREN \
+               or self.look.kind == Token.CHARACTER:
+            # seq -> subseq
+            return self.subseq()
+        else:
+            # seq -> ''
+            return Character("")
+
+    def subseq(self):
+        node1 = self.star()
+        if self.look.kind == Token.LPAREN \
+               or self.look.kind == Token.CHARACTER:
+            # subseq -> star subseq
+            node2 = self.subseq()
+            node  = Concat(node1, node2)
+            return node
+        else:
+            # subseq -> star
+            return node1
+
+    def subexpr(self):
+        node1 = self.seq()
+        if self.look.kind == Token.OPE_UNION:
+            self.match(Token.OPE_UNION)
+            # subexpr    -> seq '|' subexpr
+            node2 = self.subexpr()
+            node  = Union(node1, node2)
+            return node
+        else:
+            # subexpr    -> seq
+            return node1
+
+    def expression(self):
+        # expression -> subexpr EOF
+        node     = self.subexpr()
+        self.match(Token.EOF)
+
+        # Create TREE, NFA
+        context  = Context()
+        fragment = node.assemble(context)
+        return fragment.build()
+
+class Context(object):
+    def __init__(self):
+        self.stateCount = 0
+
+    def newState(self):
+        self.stateCount += 1
+        return self.stateCount
+
+class NFAFragment(object):
+    def __init__(self):
+        self.start   = None    # integer
+        self.accepts = None    # frozenset
+        self.map     = dict()  # transition
+
+    def connect(self, from_, char, to):
+        slot = self.map.setdefault((from_, char), set())
+        slot.add(to)
+
+    def newSkelton(self):
+        # copy fragment (self), and it return
+        newFrag = NFAFragment();
+        newFrag.map = copy.deepcopy(self.map)
+        return newFrag
+
+    def __or__(self, frag):
+        newFrag = self.newSkelton()
+        for k, v in frag.map.iteritems():
+            newFrag.map[k] = v.copy()
+        return newFrag
+
+    def build(self):
+        map_ = self.map
+        def transition(state, char):
+            return frozenset(map_.get((state, char), []))
+
+        return NondeterministicFiniteAutomaton(
+            transition,
+            self.start,
+            self.accepts,
+            self.map
+            )
+
+class Character(object):
+    def __init__(self, char):
+        self.char = char
+
+    def assemble(self, context):
+        frag = NFAFragment()
+        s1 = context.newState()
+        s2 = context.newState()
+        frag.connect(s1, self.char, s2)
+        frag.start = s1
+        frag.accepts = frozenset([s2])
+        return frag
+
+class Union(object):
+    def __init__(self, op1, op2):
+        self.op1 = op1
+        self.op2 = op2
+
+    def assemble(self, context):
+        frag1 = self.op1.assemble(context)
+        frag2 = self.op2.assemble(context)
+        frag = frag1 | frag2
+        s = context.newState()
+        frag.connect(s, "", frag1.start)
+        frag.connect(s, "", frag2.start)
+        frag.start = s
+        frag.accepts = frag1.accepts | frag2.accepts
+        return frag
+
+class Concat(object):
+    def __init__(self, op1, op2):
+        self.op1 = op1
+        self.op2 = op2
+
+    def assemble(self, context):
+        frag1 = self.op1.assemble(context)
+        frag2 = self.op2.assemble(context)
+        frag = frag1 | frag2
+
+        for state in frag1.accepts:
+            frag.connect(state, "", frag2.start)
+
+        frag.start   = frag1.start
+        frag.accepts = frag2.accepts
+        return frag
+
+class Star(object):
+    def __init__(self, op):
+        self.op = op
+
+    def assemble(self, context):
+        fragOrig = self.op.assemble(context)
+        frag = fragOrig.newSkelton()
+
+        for state in fragOrig.accepts:
+            frag.connect(state, "", fragOrig.start)
+
+        s = context.newState()
+        frag.connect(s, "", fragOrig.start)
+        frag.start = s
+        frag.accepts = fragOrig.accepts | frozenset([s])
+        return frag
+
+class NonDisjoinSets(object):
+    def __init__(self, sub):
+        self.sub = sub
+    def __contains__(self, a_set):
+        return a_set & self.sub
+
+def nfa2dfa(nfa):
+    def transition(set_, alpha):
+        ret = set()
+        for elem in set_:
+            ret |= nfa.transition(elem, alpha)
+        return nfa.epsilonExpand(frozenset(ret))
+
+    def stateSetTransition(stateSet, char):
+        trans = set()
+        for state in stateSet:
+            t = nfa.map.setdefault((state, char), None)
+            if not t == None: trans.update(nfa.epsilonExpand(t))
+        return frozenset(trans)
+
+    map_ = dict()
+    que =  set(frozenset([nfa.epsilonExpand(set([nfa.start]))]))
+    done = set()
+
+    while que:
+        stateSet = que.pop()
+
+        for state in stateSet:
+            for k, v in nfa.map.iteritems():
+                if state == k[0] and k[1] != '':
+                    slot = map_.setdefault((stateSet, k[1]), set())
+                    slot.update(nfa.epsilonExpand(v))
+
+        done.add(stateSet)
+
+        for v in map_.itervalues():
+            if not v in done:
+                que.add(frozenset(v))
+
+    return DeterministicFiniteAutomaton(
+        transition,
+        nfa.epsilonExpand(frozenset([nfa.start])),
+        NonDisjoinSets(nfa.accepts),
+        map_
+        )
+
+# emit CbC-souce, from dfa
+def dfa2CbC(dfa, regexp):
+
+    # return state name from set
+    def set2name(set_):
+        l = list(set_)
+        l.sort()
+        return '_'.join(str(x) for x in l)
+
+    funcMap = dict()
+    funcMap[dfa.start] = set()
+
+    # dfa.map => {(frozenset([1, 15]), 'd'): frozenset([16]), ....}
+    #             : frozenset(1, 15) x 'd' -> frozenset([16])
+
+    for v in dfa.map.itervalues():
+        funcMap[frozenset(v)] = set()
+
+    for key in dfa.map.iterkeys():
+        slot = funcMap.setdefault(key[0], set())
+        slot.add(key[1])
+
+    # emit cbc code
+    print "#include <stdio.h>\n"
+    print "#include <stdlib.h>\n"
+    for k in funcMap.iterkeys():
+        print '__code state_' + set2name(k) + "(char* s);"
+    print '__code accept();'
+    print '__code reject();'
+    print """
+int main(int argc, char* argv[]) {
+\tif (argc == 1) {
+\t\tprintf(\"usage: %%s text\\n\", argv[0]);
+\t\texit(0);
+}
+
+\tputs(\"regexp: %s\");
+\tputs(\"number of state: %d\");
+\tprintf(\"string: %%s\\n\", argv[1]);
+\tgoto state_%s(argv[1]);
+\treturn 0;
+}\n""" % (regexp, len(funcMap), set2name(dfa.start))
+
+    for k, v in funcMap.iteritems():
+        print '__code state_' + set2name(k) + "(char* s) {"
+        print "\tswitch(*s++) {"
+        for case in v:
+            print "\t\tcase '%c': " % (case)
+            print "\t\t\tgoto state_%s(s);\n\t\t\tbreak;" % set2name(dfa.map[(frozenset(k), case)])
+        if k in dfa.accepts: print "\t\tcase '\\0': goto accept();\n\t\t\tbreak;"
+        print "\t\tdefault: goto reject();\n\t}"
+        print "}\n"
+
+    print """
+__code accept() {
+\tprintf(\"\\nstring matches regexp. \\n\\n\");
+}\n"""
+    print """
+__code reject() {
+\tprintf(\"\\nstring does not match regexp. \\n\\n\");
+}\n"""
+
+class Regexp(object):
+    def __init__(self, regexp):
+        self.regexp = regexp
+        self.nfa    = None
+        self.dfa    = None
+        self._compile()
+
+    def _compile(self):
+        lexer_  = Lexer(self.regexp)
+        parser_ = Parser(lexer_)
+        self.nfa = parser_.expression()
+        self.dfa = nfa2dfa(self.nfa)
+
+    def emitCbC(self):
+        dfa2CbC(self.dfa, self.regexp)
+
+    def matches(self, string):
+        runtime = self.dfa.getRuntime()
+        return runtime.doesAccept(string)
+
+def compile(regexp):
+    return Regexp(regexp)
+
+def main(argv):
+    if len(argv) == 1 : exit("usage: dfareg.py regexp [> file]")
+    r = compile(argv[1])
+    r.emitCbC()
+
+if __name__ == '__main__' : main(sys.argv)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/return_check/test_return.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,89 @@
+#include<stdio.h>
+
+#if 0
+typedef float testtype;
+testtype good = 33.3f;
+testtype bad = 0.0f;
+void print_testtype(testtype t)
+{
+	printf("return value = %2.3f  good=%2.3f,bad=%2.3f\n", t,good,bad);
+}
+#elif 1
+typedef char testtype;
+testtype good = 33;
+testtype bad  = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d, good=%d,bad=%d\n", t,good,bad);
+}
+#elif 0
+typedef double testtype;
+testtype good = 333.3;
+testtype bad  = 0.00;
+void print_testtype(testtype t)
+{
+	printf("return value = %3.3lf, good=%3.3lf,bad=%3.3lf\n", t,good,bad);
+}
+#elif 0
+typedef
+struct {
+	int a;
+	float b;
+	int c[4];
+} testtype;
+testtype good = {33, 33.3, {4,4,4,4}};
+testtype bad  = {0, 00.0, {0,0,0,0}};
+void print_testtype(testtype t)
+{
+	printf( "return value = {\n"
+			"	a = %d\n"
+			"	b = %2.3f\n"
+			"	c = { %d, %d, %d, %d }"
+			"}\n", t.a, t.b,
+			t.c[0],t.c[1],t.c[2],t.c[3]);
+}
+#else
+typedef int testtype;
+testtype good = 33;
+testtype bad = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d,  good=%d,bad=%d\n", t,good,bad);
+}
+#endif
+
+typedef void (*RET_FUNC)(testtype, void *);
+
+void g(RET_FUNC func)
+{
+	func(good, NULL);
+}
+
+testtype f_cbc()
+{
+	//__label__ _cbc_exit0;
+	//int retval;
+	void *ret;
+
+	ret = _CbC_return;
+
+	printf("f0: fp = %p\n", __builtin_frame_address(0));
+	printf("__return_func = %p\n", ret);
+	g(ret);
+
+	printf("not good\n");
+	return bad;
+//_cbc_exit0:
+	//printf("f1: fp = 0x%x\n", __builtin_frame_address(0));
+	//return retval;
+}
+
+int main(int argc, char **argv)
+{
+	testtype t;
+	printf("main before: fp = %p\n", __builtin_frame_address(0));
+	t = f_cbc();
+	print_testtype(t);
+	printf("main after: fp = %p\n", __builtin_frame_address(0));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/return_check/typedeffed.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,89 @@
+#include<stdio.h>
+
+#if 0
+typedef float testtype;
+testtype good = 33.3f;
+testtype bad = 0.0f;
+void print_testtype(testtype t)
+{
+	printf("return value = %2.3f  good=%2.3f,bad=%2.3f\n", t,good,bad);
+}
+#elif 1
+typedef char testtype;
+testtype good = 33;
+testtype bad  = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d, good=%d,bad=%d\n", t,good,bad);
+}
+#elif 0
+typedef double testtype;
+testtype good = 333.3;
+testtype bad  = 0.00;
+void print_testtype(testtype t)
+{
+	printf("return value = %3.3lf, good=%3.3lf,bad=%3.3lf\n", t,good,bad);
+}
+#elif 0
+typedef
+struct {
+	int a;
+	float b;
+	int c[4];
+} testtype;
+testtype good = {33, 33.3, {4,4,4,4}};
+testtype bad  = {0, 00.0, {0,0,0,0}};
+void print_testtype(testtype t)
+{
+	printf( "return value = {\n"
+			"	a = %d\n"
+			"	b = %2.3f\n"
+			"	c = { %d, %d, %d, %d }"
+			"}\n", t.a, t.b,
+			t.c[0],t.c[1],t.c[2],t.c[3]);
+}
+#else
+typedef int testtype;
+testtype good = 33;
+testtype bad = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d,  good=%d,bad=%d\n", t,good,bad);
+}
+#endif
+
+typedef void (*RET_FUNC)(testtype, void *);
+
+void g(RET_FUNC func)
+{
+	func(good, NULL);
+}
+
+testtype f_cbc()
+{
+	//__label__ _cbc_exit0;
+	//int retval;
+	void *ret;
+
+	ret = _CbC_return;
+
+	printf("f0: fp = %p\n", __builtin_frame_address(0));
+	printf("__return_func = %p\n", ret);
+	g(ret);
+
+	printf("not good\n");
+	return bad;
+//_cbc_exit0:
+	//printf("f1: fp = 0x%x\n", __builtin_frame_address(0));
+	//return retval;
+}
+
+int main(int argc, char **argv)
+{
+	testtype t;
+	printf("main before: fp = %p\n", __builtin_frame_address(0));
+	t = f_cbc();
+	print_testtype(t);
+	printf("main after: fp = %p\n", __builtin_frame_address(0));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/return_check/variable_return_type.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,196 @@
+#include<stdio.h>
+#include<assert.h>
+
+#define dprint(f, args...) \
+	fprintf(stdout, "in %s\t: "f, __FUNCTION__, ## args)
+
+
+/* for integer.  */
+int goodint = 33;
+int badint = 0;
+typedef void (*RETINT_FUNC)(int, void *);
+void g_int(RETINT_FUNC func)
+{
+	func(goodint, NULL);
+}
+int f_int()
+{
+	void *ret;
+
+	ret = _CbC_return;
+
+	dprint("fp = %p\n", __builtin_frame_address(0));
+	dprint("__return_func = %p\n", ret);
+	g_int(ret);
+	//goto g(ret);
+
+	dprint("not good\n");
+	return badint;
+}
+
+
+/* for double.  */
+double gooddouble = 333.3;
+double baddouble  = 0.00;
+typedef void (*RETDOUBLE_FUNC)(double, void *);
+void g_double(RETDOUBLE_FUNC func)
+{
+	func(gooddouble, NULL);
+}
+double f_double()
+{
+	void *ret;
+	ret = _CbC_return;
+
+	dprint("fp = %p\n", __builtin_frame_address(0));
+	dprint("__return_func = %p\n", ret);
+	g_double(ret);
+	//goto g_double(ret);
+
+	dprint("not good\n");
+	return baddouble;
+}
+
+/* for float.  */
+float goodfloat = 33.3f;
+float badfloat = 0.0f;
+typedef void (*RETFLOAT_FUNC)(float, void *);
+void g_float(RETFLOAT_FUNC func)
+{
+	func(goodfloat, NULL);
+}
+float f_float()
+{
+	void *ret;
+	ret = _CbC_return;
+
+	dprint("fp = %p\n", __builtin_frame_address(0));
+	dprint("__return_func = %p\n", ret);
+	g_float(ret);
+	//goto g_float(ret);
+
+	dprint("not good\n");
+	return badfloat;
+}
+
+/* for char.  */
+char goodchar = 33;
+char badchar  = 0;
+typedef void (*RETCHAR_FUNC)(char, void *);
+void g_char(RETCHAR_FUNC func)
+{
+	func(goodchar, NULL);
+}
+char f_char()
+{
+	void *ret;
+
+	ret = _CbC_return;
+
+	dprint("fp = %p\n", __builtin_frame_address(0));
+	dprint("__return_func = %p\n", ret);
+	g_char(ret);
+	//goto g(ret);
+
+	dprint("not good\n");
+	return badchar;
+}
+
+
+/* for struct.  */
+struct ifid {
+	int a;
+	float b;
+	int c[4];
+	double d;
+};
+struct ifid goodstruct = {33, 33.3, {4,4,4,4}, 333.333};
+struct ifid badstruct  = {0, 00.0, {0,0,0,0}, 0.0};
+typedef void (*RETSTRUCT_FUNC)(struct ifid, void *);
+void g_struct(RETSTRUCT_FUNC func)
+{
+	func(goodstruct, NULL);
+}
+struct ifid f_struct()
+{
+	void *ret;
+
+	ret = _CbC_return;
+
+	dprint("fp = %p\n", __builtin_frame_address(0));
+	dprint("__return_func = %p\n", ret);
+	g_struct(ret);
+	//goto g(ret);
+
+	dprint("not good\n");
+	return badstruct;
+}
+
+int main(int argc, char **argv)
+{
+	void *bptr;
+	int rint;
+	float rfloat;
+	double rdouble;
+	char rchar;
+	struct ifid rstruct;
+
+	bptr = __builtin_frame_address(0);
+
+	dprint("before int: fp = %p\n", __builtin_frame_address(0));
+	rint = f_int();
+	dprint("f_int = %d,  good=%d,bad=%d\n", rint,goodint,badint);
+
+	dprint("before float: fp = %p\n", __builtin_frame_address(0));
+	rfloat = f_float();
+	dprint("f_float = %3.3f, good=%3.3f,bad=%3.3f\n", rfloat,goodfloat,badfloat);
+	assert(bptr==__builtin_frame_address(0));
+
+	dprint("before double: fp = %p\n", __builtin_frame_address(0));
+	rdouble = f_double();
+	dprint("f_double = %3.3lf, good=%3.3lf,bad=%3.3lf\n", rdouble,gooddouble,baddouble);
+	assert(bptr==__builtin_frame_address(0));
+
+	dprint("before char: fp = %p\n", __builtin_frame_address(0));
+	rchar = f_char();
+	dprint("f_char = %d,  good=%d,bad=%d\n", rchar,goodchar,badchar);
+	assert(bptr==__builtin_frame_address(0));
+
+	dprint("before struct: fp = %p\n", __builtin_frame_address(0));
+	rstruct = f_struct();
+	dprint( "return value = {\n"
+			"	a = %d\n"
+			"	b = %2.3f\n"
+			"	c = { %d, %d, %d, %d }\n"
+			"	d = %3.3f\n"
+			"}\n", rstruct.a, rstruct.b,
+			rstruct.c[0],rstruct.c[1],rstruct.c[2],rstruct.c[3], rstruct.d);
+
+
+
+	dprint("end: fp = %p\n", __builtin_frame_address(0));
+
+	if (bptr!=__builtin_frame_address(0)) {
+		dprint("CbC_return failure!\n");
+		return 1;
+	}
+	if ( rint!=goodint 
+		|| rchar!=goodchar
+		|| (rfloat < goodfloat-0.01 || goodfloat+0.01 < rfloat)
+		|| (rdouble < gooddouble-0.01 || gooddouble+0.01 < rdouble)
+		|| rstruct.a!=goodstruct.a
+		|| (rstruct.b < goodstruct.b-0.01 || goodstruct.b+0.01 < rstruct.b)
+		|| (rstruct.d < goodstruct.d-0.01 || goodstruct.d+0.01 < rstruct.d)
+		|| rstruct.c[0]!=goodstruct.c[0]
+		|| rstruct.c[1]!=goodstruct.c[1]
+		|| rstruct.c[2]!=goodstruct.c[2]
+		|| rstruct.c[3]!=goodstruct.c[3] ) {
+		dprint("CbC_return failure!\n");
+		return 1;
+	}
+
+
+	dprint("CbC_return successful!\n");
+	return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/selftype.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,29 @@
+
+/*
+struct node {
+  int num;
+  struct node *child;
+  //  struct node **array_node;
+};
+*/
+
+#include <stdio.h>
+
+struct node {
+  int num;
+  selftype *child;
+};
+
+int main() {
+  struct node n, nc;
+  n.num = 1;
+  nc.num = 2;
+  n.child = &nc;
+
+  printf("n.num = %d\n",n.num);
+  printf("n.child.num = %d\n",n.child->num);
+
+  return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stack1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,126 @@
+/*
+    test for CbC converted __code from C
+ */
+
+//#include <stdio.h>
+#define NULL 0
+
+extern void *malloc(int);
+
+typedef void *stack;
+
+void *stack0;      /* size of void* == 1 */
+
+struct cont_save { /* General Return Continuation */
+    __code (*ret)();
+};
+
+    __code g(int,void *);
+    __code f_g0(int ,int ,void *);
+    __code f_g1(int,void *);
+	__code print(int i,int j,__code (*exit1)(),void*exit1env);
+
+struct f_g0_save {  /* Specialized Return Continuation */
+    __code (*ret)();
+    int ii,kk,jj;
+};
+
+__code g(int i,void *sp) {
+    goto (* ((struct cont_save *)sp)->ret)(i+4,sp);
+}
+
+__code __attribute__ ((fastcall)) f_g1(int j,void *sp) {  /* Continuation  */
+    int k;
+    struct f_g0_save *c;
+
+    c = sp;
+    k = c->kk;
+    sp += sizeof(struct f_g0_save);
+    goto (* ((struct cont_save *)sp)->ret)(k+4+j,sp);
+}
+
+__code f(int i,void *sp) {
+    int k,j;
+    struct f_g0_save *c;
+printf("#0042:f 0 sp: %x\n",sp-stack0);
+
+    k = 3+i;
+
+printf("#0046:f 1 sp: %x\n",sp-stack0);
+    sp -= sizeof(struct f_g0_save);
+printf("#0048:f 2 sp: %x\n",sp-stack0);
+    c = sp;
+    c->kk = k;
+    c->ii = i;
+    c->jj = j;
+    c->ret = f_g1;
+    goto g(i,sp);
+}
+
+
+
+struct f0_save {  /* Specialized Return Continuation */
+	__code (*ret)();
+	__code (*exit1)();
+	void *exit1env;
+	int jj;
+};
+
+__code f1(int i,void *sp) ;
+__code f0(int i,int j,__code(*exit2)(), void *exit2env,void *sp)
+{
+	struct f0_save *c;
+    printf("#0070:f0 1 sp: %x\n",sp-stack0);
+	sp -= sizeof(struct f0_save);
+    printf("#0072:f0 2 sp: %x\n",sp-stack0);
+	c = sp;
+	c->jj = j;
+        c->exit1 = exit2;
+        c->exit1env = exit2env;
+	c->ret = f1;
+    printf("#0078:f0 3 sp: %x\n",sp-stack0);
+	goto f(i,sp);
+}
+
+__code f1(int i,void *sp) {
+	int j;
+	int *exit2env;
+	__code (*exit2)();
+	struct f0_save *c;
+
+        c = sp;
+        j = c->jj;
+        exit2 = c->exit1;
+        exit2env = c->exit1env;
+
+	sp += sizeof(struct f0_save);
+	goto print(i,j,exit2,exit2env);
+}
+
+int main(int ac, char*av[]){
+	main0(ac,av);
+}
+
+int main0( int ac, char *av[])
+{
+    int i,j;
+    int *sp;
+
+    // i = atoi(av[1]);
+    i = 1;
+    stack0 = ((char *)malloc(1024)+1024);
+    sp = stack0;
+    j = i;
+    
+    printf("#0108:sp: %x %x\n",sp-(int*)stack0,sizeof(*stack0));
+    //goto f0(i,j,_CbC_return,_CbC_environment,sp);
+    goto f0(i,j,NULL,NULL,sp);
+}
+
+__code print(int i,int j,__code (*exit1)(),void*exit1env)
+{
+    printf("#0114:%d %d\n",i,j);
+    //goto (*exit1)(0),exit1env;
+	exit(0);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test01.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,34 @@
+#include<stdio.h>
+
+int test_code(void){
+	printf("\t\ttest_code: return 10\n");
+	return 10;
+}
+
+int test_goto(int a){
+	printf("\ttest_goto: a = %d\n", a);
+	//return test_code();
+	return test_code();
+}
+
+int main(int argc, char **argv){
+	int ret;
+	printf("test code\n");
+	ret = test_goto(20);
+	printf("main: ret = %d\n", ret);
+
+	return test_goto2(10,20,30,40,50,60,70,80,90,100);
+	return 0;
+}
+
+int test_code2(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j,int k){
+	printf("\t\ttest_code: return 10\n");
+	printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d,g=%d,h=%d,i=%d,j=%d,k=%d\n",a,b,c,d,e,f,g,h,i,j,k );
+	return a+b+c+d+e+f+g+h+i+j+k;
+}
+
+int test_goto2(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j,int k){
+	printf("\ttest_goto: a = %d\n", a);
+	//return test_code();
+	return test_code2(a,b,c,d,e,f,g,h,i,j,k);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test02.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,22 @@
+#include<stdio.h>
+
+__code test_code(void){
+	printf("\t\ttest_code: return 10\n");
+	return;
+}
+
+__code test_goto(int a){
+	printf("\ttest_goto: a = %d\n", a);
+	//return test_code();
+	goto test_code();
+}
+
+int main(int argc, char **argv){
+	int ret=0;
+	printf("test code\n");
+	test_goto(20);
+	printf("main: ret = %d\n", ret);
+
+	return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test03.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,26 @@
+
+extern void test02() ;
+extern void test03() ;
+
+extern int data;
+
+extern void
+test01() {
+    test02();
+}
+
+extern void
+test02() {
+    test03();
+}
+
+extern void
+test03() {
+    data = 3;
+}
+
+int
+main()
+{
+    test01();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test04.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,33 @@
+
+int test01(int a, double b, int *c){
+    return a+b- *c;
+}
+
+int test(int *a, double b){
+    int c;
+    c = *a*b + 10;
+    printf("a = %x, *a = %d, b = %d\n", a, *a, b);
+    *a = test01( *a+b, 0.02, &c);
+    return *a+b;
+}
+
+
+int test02(int a, int b){
+    int i,sum=0;
+    i = a;
+    while ( i <= b ) {
+	sum += i;
+	i++;
+    }
+    return sum - a*b;
+}
+
+int main(int argc, char **argv){
+    int a=10;
+
+    printf("= %d\n", test02(0, 10));
+    test( &a, 10.1);
+    return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test05.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,58 @@
+//#include<stdio.h>
+#define dprint(f, args...) \
+    printf("in %s: "f, __FUNCTION__, ## args)
+
+__code caller (int a);
+void f01 (int a);
+void f02 (int a, float b);
+__code cs01 (int a);
+__code cs02 (int a, float b);
+int main ();
+
+
+int g=0;
+void (*funcp)(int);
+__code (*csp)(int);
+
+__code caller(int a) {
+    f01(a+2);
+    f02(a+3, 13.2);
+    funcp(a+4);
+    goto csp(a+4);
+    dprint("\n");
+}
+
+__code end() {
+    dprint("\n");
+    exit(0);
+}
+
+void f01(int a) {
+    dprint("%d\n", a);
+    g += a;
+    return ;
+}
+void f02(int a, float b) {
+    dprint("%d, %f\n", a, b);
+    g -= a;
+    g += b*0.3;
+    return ;
+}
+__code cs01(int a) {
+    dprint("%d\n", a);
+    g += a;
+    goto end() ;
+}
+__code cs02(int a, float b) {
+    dprint("%d, %f\n", a, b);
+    g -= a;
+    g += b*0.3;
+    goto end() ;
+}
+
+int main() {
+    funcp = f01;
+    csp = cs01;
+    caller(10);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,125 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+/*
+    test for CbC converted __code from C
+ */
+
+#include <stdio.h>
+
+extern void *malloc(int);
+
+typedef void *stack;
+
+void *stack0;      /* size of void* == 1 */
+
+struct cont_save { /* General Return Continuation */
+    __code (*ret)();
+};
+
+/*
+    __code g(int,void *);
+    __code f_g0(int ,int ,void *);
+    __code f_g1(int,void *);
+*/
+
+struct f_g0_save {  /* Specialized Return Continuation */
+    __code (*ret)();
+    int ii,kk,jj;
+};
+
+__code g(int i,void *sp) {
+    goto (* ((struct cont_save *)sp)->ret)(i+4,sp);
+}
+
+__code f_g1(int j,void *sp) {  /* Continuation  */
+    int k;
+    struct f_g0_save *c;
+
+    c = sp;
+    k = c->kk;
+    sp += sizeof(struct f_g0_save);
+    goto (* ((struct cont_save *)sp)->ret)(k+4+j,sp);
+}
+
+__code f(int i,void *sp) {
+    int k,j;
+    struct f_g0_save *c;
+printf("#0047:f 0 sp: %x\n",sp-stack0);
+
+    k = 3+i;
+
+printf("#0051:f 1 sp: %x\n",sp-stack0);
+    sp -= sizeof(struct f_g0_save);
+printf("#0053:f 2 sp: %x\n",sp-stack0);
+    c = sp;
+    c->kk = k;
+    c->ii = i;
+    c->jj = j;
+    c->ret = f_g1;
+    goto g(i,sp);
+}
+
+
+
+struct f0_save {  /* Specialized Return Continuation */
+	__code (*ret)();
+	__code (*exit1)();
+	void *exit1env;
+	int jj;
+};
+
+__code f1(int i,void *sp) ;
+__code f0(int i,int j,__code(*exit2)(), void *exit2env,void *sp)
+{
+	struct f0_save *c;
+    printf("#0075:f0 1 sp: %x\n",sp-stack0);
+	sp -= sizeof(struct f0_save);
+    printf("#0077:f0 2 sp: %x\n",sp-stack0);
+	c = sp;
+	c->jj = j;
+        c->exit1 = exit2;
+        c->exit1env = exit2env;
+	c->ret = f1;
+    printf("#0083:f0 3 sp: %x\n",sp-stack0);
+	goto f(i,sp);
+}
+
+__code print(int i,int j,__code (*exit1)(),void*exit1env);
+
+__code f1(int i,void *sp) {
+	int j;
+	int *exit2env;
+	__code (*exit2)();
+	struct f0_save *c;
+
+        c = sp;
+        j = c->jj;
+        exit2 = c->exit1;
+        exit2env = c->exit1env;
+
+	sp += sizeof(struct f0_save);
+	goto print(i,j,exit2,exit2env);
+}
+
+int main( int ac, char *av[])
+{
+    int i,j;
+    int *sp;
+
+    // i = atoi(av[1]);
+    i = 1;
+    stack0 = ((char *)malloc(1024)+1024);
+    sp = stack0;
+    j = i;
+    
+    printf("#0115:sp: %x %x\n",sp-(int*)stack0,sizeof(*stack0));
+    goto f0(i,j,__return,__environment,sp);
+}
+
+__code print(int i,int j,__code (*exit1)(),void*exit1env)
+{
+    printf("#0121:%d %d\n",i,j);
+    goto (*exit1)(0,exit1env);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test2.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,45 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+#include <stdio.h>
+int sender_bit;
+
+__code (*ret)(int,void *);
+void *env;
+
+struct packet {
+        int bit;
+        char *msg;
+        __code (*next)();
+};
+
+__code print_struct(struct packet pkt)
+{
+        printf("#0017:bit: %d\n", pkt.bit);
+        printf("#0018:message: %s\n", pkt.msg);
+        goto ret(0, env);
+}
+
+__code initSender(int init_bit, struct packet pkt)
+{
+        sender_bit = init_bit;
+        pkt.next = print_struct;
+        printf("#0026:initSender bit: %d\n", pkt.bit);
+        printf("#0027:initSender message: %s\n", pkt.msg);
+        printf("#0028:sender_bit: %d\n", sender_bit);
+        goto print_struct(pkt);
+}
+
+int main(void)
+{
+        struct packet pkt;
+        pkt.bit = 1;
+        pkt.msg = "hogehoge";
+        pkt.next = initSender;
+        ret = __return;
+        env = __environment;
+        printf("#0040:main bit: %d\n", pkt.bit);
+        printf("#0041:main message: %s\n", pkt.msg);
+        goto initSender(0, pkt);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_array.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,17 @@
+//#include<stdio.h>
+void print_array(int *, int);
+
+int main(int argc, char **argv){
+	int array[10] = {10, 2, 3, 0, 7, 5};
+	array[1] += array[2]+array[4];
+	print_array(array, 10);
+	return 0;
+}
+
+void print_array(int *a, int size){
+	while( size-->0 ){
+		printf(" %7d", *a++);
+	}
+	printf("\n");
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_call.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,12 @@
+
+int test(int a){
+	printf("a = %d\n", a);
+	return 10*a;
+}
+
+int main(){
+	test(10);
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_cs.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,43 @@
+//#include<stdio.h>
+//#include<stdlib.h>
+
+__code cs_exit(int , double , char );
+__code cs1(int, int, int, int);
+__code cs2(double, double, int, double);
+void test_goto(void);
+
+int main(int argc, char **argv){
+	printf("main start\n");
+	//goto cs2(2.22, 3.33, 4, 5.55);
+	test_goto();
+	return 0;
+}
+
+void test_goto(){
+	goto cs1(10, 20, 30, 40);
+}
+
+__code cs1(int a, int b, int c, int d){
+	printf("%4d, %4d, %4d, %4d\n", a, b, c, d);
+	a += 40, b += 40, c += 40, d += 40;
+	goto cs2((double)a, (double)b, c, (double)d);
+}
+
+__code cs2(double a, double b, int c, double d){
+	printf("%4d, %4d, %4d, %4d\n", (int)a, (int)b, (int)c, (int)d);
+	a += 40, b += 40, c += 40, d += 40;
+	goto cs_exit((int)a, b, (char)c);
+}
+
+__code cs_exit(int a, double b, char c){
+	printf("%4d, %4d, %4d\n", (int)a, (int)b, (int)c);
+	printf("cs_exit was called!\n");
+	exit(0);
+}
+
+
+void caller(int a, double b){
+	cs2(b,20.0,a, 40.4);
+	cs1(10,20,30, 40);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_csp1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,60 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+//static __code (*csp)(int, int, int, int);
+
+__code cs_end (int a);
+__code cs0 (int a, int b, int c, int d);
+void* freturn ();
+__code cs_goto (int a, int b, int c, int d);
+int function (double a, float b, int c);
+int main (int argc, char **argv);
+
+
+__code cs_goto(int a, int b, int c, int d){
+	__code (*csp)(int, int, int, int);
+	csp = freturn();
+	printf("csp = %x.\n", csp);
+
+	//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);
+	//printf("cs_goto : a=%d, b=%d, c=%d, d=%d.\n", a, b, c, d);
+	//printf("cs_goto : a-4=%d, a-8=%d, a-12=%d, a-16=%d.\n", *(&a-4), *(&a-8), *(&a-12), *(&a-16));
+	//printf("cs_goto : cs0(a, b, c, d)\n");
+#ifdef INDIRECT
+	goto csp(b+a, d+b, a+c, c+d);
+#else
+	goto cs0(b+a, d+b, a+c, c+d);
+#endif
+}
+
+__code cs_end(int a){
+	printf("cs_exit : a=%d.\n", a);
+	exit(a);
+	goto cs_end(a);
+}
+
+__code cs0(int a, int b, int c, int d){
+	//printf("cs0     : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d.\n", a, b, c, d, e, f, g);
+	printf("cs_cs0  : a=%d, b=%d, c=%d, d=%d.\n", a, b, c, d);
+	goto cs_end( (int)(20*a + 30*b + 40*c + 50*d) );
+}
+
+
+void* freturn(){
+	return cs0;
+}
+
+int function(double a, float b, int c){
+
+	printf("function:\n");
+	printf("a=%lf, b=%f, c=%d\n", a, b, c);
+	//goto cs_goto(10, 20, 30, 40);
+	goto cs_goto(10, 20, 30, 40);
+}
+
+int main(int argc, char **argv){
+	//csp = cs0;
+	function(10.01, 20.02, 30);
+	return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_env.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,68 @@
+
+typedef void (*RET_FUNC)(int, void *);
+
+int main(int argc, char **argv)
+{
+	int r;
+	r = f();
+	printf("%d\n", r);
+}
+
+//void z(RET_FUNC ret, void *fp)
+__code z(RET_FUNC ret, void *fp)
+{
+	printf("z: fp=0x%x\n", __builtin_frame_address(0));
+	ret(5, fp);
+}
+__code i(RET_FUNC ret, void *fp)
+{
+	printf("i: fp=0x%x\n", __builtin_frame_address(0));
+	goto z(ret, fp);
+}
+__code h(RET_FUNC ret, void *fp)
+{
+	printf("h: fp=0x%x\n", __builtin_frame_address(0));
+	goto i(ret, fp);
+}
+__code g(RET_FUNC ret, void *fp)
+{
+	printf("g: fp=0x%x\n", __builtin_frame_address(0));
+	goto h(ret, fp);
+}
+
+int f()
+{
+	__label__ exit0;
+	int retval;
+	//void (*ret)(int retval_, void *fp);
+
+	/*
+	ret = ({
+			void __return_func(int retval_, void *fp){
+				retval = retval_;
+				goto exit0;
+			}
+			__return_func;
+		});
+		*/
+	printf("f0: fp = 0x%x\n", __builtin_frame_address(0));
+	void __return_func(int retval_, void *fp){
+		retval = retval_;
+		goto exit0;
+	}
+	//ret = __return_func;
+
+	printf("f1: fp = 0x%x\n", __builtin_frame_address(0));
+
+	//g(__return_func, __builtin_frame_address(0));
+	goto g(__return_func, __builtin_frame_address(0));
+
+	printf("bad\n");
+
+exit0:
+	printf("f2: fp = 0x%x\n", __builtin_frame_address(0));
+	return retval;
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_func2code.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,43 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+#define DEBUG 1
+#ifdef DEBUG
+  #define log(f, args...) \
+	fprintf(stderr, "in %s: "f, __FUNCTION__, ## args)
+#else
+  #define log(f, args...) ;
+#endif
+
+__code
+exitter(int a)
+{
+	exit(0);
+}
+
+__code
+cs0(int x, int y)
+{
+	log("x = %d, y = %d.\n", x, y);
+	log("will exit with code %d.\n", x*y);
+	goto exitter(x*y);
+}
+
+void
+continuation(int a)
+{
+	log("go code segment cs0\n");
+	goto cs0(a, a*20);
+	log("Error: continuation reachs bad region.\n");
+}
+
+int
+main(int argc, char **argv)
+{
+	int a;
+	if (argc>2) {
+		a = atoi(argv[1]);
+	}
+
+	continuation(20);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_nest.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,50 @@
+
+int printf(char *, ...);
+typedef void (*RET_FUNC)(int, void *);
+
+void g(RET_FUNC func)
+{
+	func(33, 0);
+}
+
+int f()
+{
+	void *ret;
+	ret = ({
+		__label__ exit0;
+		int retval;
+		void __return_func(int retval_, void *fp){
+			retval = retval_;
+			goto exit0;
+		}
+		if (0) {
+		  exit0:
+			printf("f2: fp = 0x%x\n", __builtin_frame_address(0));
+			return retval;
+		}
+		__return_func;
+	});
+
+	//g(__return_func, __builtin_frame_address(0));
+	printf("f0: fp = 0x%x\n", __builtin_frame_address(0));
+	printf("__return_func = %x\n", ret);
+	g(ret);
+
+	printf("not good\n");
+	return 0;
+
+//exit0:
+	//printf("f2: fp = 0x%x\n", __builtin_frame_address(0));
+	//return retval;
+}
+
+int main(int argc, char **argv)
+{
+	int t;
+	printf("main before: fp = 0x%x\n", __builtin_frame_address(0));
+	t = f();
+	printf("f = %d\n", t);
+	printf("main after: fp = 0x%x\n", __builtin_frame_address(0));
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_para.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,26 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+__code cs_exit(int a){
+	printf("cs_exit was called: a=%d.\n", a);
+	exit(a);
+}
+
+__code cs0(int a, double b, int c, int d){
+	printf("cs0 was called: a=%d, b=%lf, c=%d, d=%d.\n", a, b, c, d);
+	goto cs_exit( (int)(20*a + 4.4*b + 2022/c + 28*d) );
+}
+
+
+__code cs_goto(){
+	goto cs0(11, 22.2, 33, 44);
+}
+
+int main(int argc, char **argv){
+
+	printf("it is in main.\n");
+	goto cs_goto();
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_para2.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,40 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+__code cs_end(int a){
+	printf("cs_exit : a=%d.\n", a);
+	exit(a);
+}
+
+__code cs0(int a, int b, int c, int d);
+
+__code cs_goto(int a, int b, int c, int d){
+	//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);
+	printf("cs_goto : a=%d, b=%d, c=%d, d=%d.\n", a, b, c, d);
+	//printf("cs_goto : a-4=%d, a-8=%d, a-12=%d, a-16=%d.\n", *(&a-4), *(&a-8), *(&a-12), *(&a-16));
+	//printf("cs_goto : cs0(a, b, c, d)\n");
+	goto cs0(b, c, d, a);
+}
+
+__code cs0(int a, int b, int c, int d){
+	//printf("cs0     : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d.\n", a, b, c, d, e, f, g);
+	printf("cs_cs0  : a=%d, b=%d, c=%d, d=%d.\n", a, b, c, d);
+	goto cs_end( (int)(20*a + 30*b + 40*c + 50*d) );
+}
+
+
+int function(double a, float b, int c){
+
+	//printf("function:\n");
+	//printf("a=%lf, b=%f, c=%d\n", a, b, c);
+	//goto cs_goto(10, 20, 30, 40);
+	goto cs_goto(10, 20, 30, 40);
+}
+
+int main(int argc, char **argv){
+
+	function(10.01, 20.02, 30);
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_para3.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,83 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+struct abc {
+	int a;
+	double b;
+	char c;
+	double *d;
+};
+
+struct def {
+	int d;
+	struct abc e;
+	struct abc *f;
+};
+
+void print_abc(struct abc a){
+	printf("\tstruct abc:\n");
+	printf("\ta=%d, b=%lf, c=%d, d=%p\n", a.a, a.b, a.c, a.d);
+}
+void print_def(struct def b){
+	printf("\tstruct def:\n");
+	printf("\td=%d, f=%p\n", b.d, b.f);
+	print_abc(b.e);
+}
+
+__code cs_exit(int a){
+	printf("cs_exit : a=%d.\n", a);
+	exit(a);
+}
+
+__code cs0(struct abc a, struct def b, int c){
+	printf("cs0     :\n");
+	printf("c=%d\n", c);
+	print_abc(a);
+	print_def(b);
+	goto cs_exit( c*a.a+b.e.c );
+}
+
+
+__code cs_goto(int c, struct abc a, struct def b){
+	printf("cs_goto :\n");
+	printf("c=%d\n", c);
+	print_abc(a);
+	print_def(b);
+	goto cs0(a, b, c);
+}
+
+int function(){
+	struct abc A;
+	struct def B;
+	A.a = 10, A.b = 20.02, A.c = '\0', A.d = 0xad;
+	B.d = 30, B.f = 0xbf;
+	B.e.a = 50, B.e.b = 60.06, B.e.c = '\1', B.e.d = 0xed;
+
+	printf("function  :\n");
+	print_abc(A);
+	print_def(B);
+	//printf("20*%d + 30*%d + 40*%d + 50*%d  =\n", a, b, c, d);
+	goto cs_goto(100, A, B);
+	return 0;
+}
+
+int main(int argc, char **argv){
+	struct abc A;
+	struct def B;
+	//int a=10, b=20, c=30, d=40, e=50, f=60, g=70;
+	A.a = 10, A.b = 20.02, A.c = '\0', A.d = 0xad;
+	B.d = 30, B.f = 0xbf;
+	B.e.a = 50, B.e.b = 60.06, B.e.c = '\1', B.e.d = 0xed;
+
+	/*
+	printf("main    :\n");
+	print_abc(A);
+	print_def(B);
+	//printf("20*%d + 30*%d + 40*%d + 50*%d  =\n", a, b, c, d);
+	goto cs_goto(100, A, B);
+	*/
+	function();
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_para4.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,74 @@
+//#include<stdio.h>
+//#include<stdlib.h>
+
+#define DPRINT 1
+#define NOINLINE __attribute__((noinline))
+
+extern __code cs_goto(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+			   int a2, int b2, int c2, int d2, int e2, int f2, int g2, int h2, int i2, int j2);
+extern __code cs0(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+		int a2, int b2, int c2, int d2, int e2, int f2, int g2, int h2, int i2, int j2);
+
+__code (*csp)(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+		int a2, int b2, int c2, int d2, int e2, int f2, int g2, int h2, int i2, int j2);
+
+__code NOINLINE cs_exit(int a){
+	int b = 20 * a + 3;
+	printf("cs_exit : a=%d. b=%d\n", a, b);
+	exit(a);
+}
+
+__code NOINLINE cs0(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+		int a2, int b2, int c2, int d2, int e2, int f2, int g2, int h2, int i2, int j2){
+#if DPRINT
+	//printf("cs0     : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d.\n", a, b, c, d, e, f, g);
+	printf("cs0     : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a, b, c, d, e, f, g, h, i, j);
+	printf("cs0     : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a2, b2, c2, d2, e2, f2, g2, h2, i2, j2);
+#endif
+	goto cs_exit( (int)(10*a + 10*b + 10*i2 + 10*j2) );
+}
+
+__code NOINLINE cs_goto(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j,
+			   int a2, int b2, int c2, int d2, int e2, int f2, int g2, int h2, int i2, int j2){
+#if DPRINT
+	printf("cs_goto : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a, b, c, d, e, f, g, h, i, j);
+	printf("cs_goto : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a2, b2, c2, d2, e2, f2, g2, h2, i2, j2);
+#endif
+	goto cs0(b, c, d, e, f, g, h, i, j, a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, a);
+}
+
+int function(double l, float m, int n){
+	int a=10, b=20, c=30, d=40, e=50, f=60, g=70, h=80, i=90, j=100;
+	int a2=110, b2=120, c2=130, d2=140, e2=150, f2=160, g2=170, h2=180, i2=190, j2=200;
+
+#if DPRINT
+	printf("function: a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a, b, c, d, e, f, g, h, i, j);
+	printf("function: a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a2, b2, c2, d2, e2, f2, g2, h2, i2, j2);
+	//printf("l=%lf, m=%f, n=%d\n", l, m, n);
+#endif
+	//goto cs_goto(10, 20, 30, 40);
+	goto cs_goto(a, b, c, d, e, f, g, h, i, j, a2, b2, c2, d2, e2, f2, g2, h2, i2, j2);
+}
+
+
+int main(int argc, char **argv){
+
+	//printf("main    :\n");
+	/*
+	printf("main    : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a, b, c, d, e, f, g, h, i, j);
+	printf("main    : a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", 
+			a2, b2, c2, d2, e2, f2, g2, h2, i2, j2);
+	*/
+	//csp = cs0;
+	function(10.01, 20.02, 30);
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_return.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,89 @@
+#include<stdio.h>
+
+#if 0
+typedef float testtype;
+testtype good = 33.3f;
+testtype bad = 0.0f;
+void print_testtype(testtype t)
+{
+	printf("return value = %2.3f  good=%2.3f,bad=%2.3f\n", t,good,bad);
+}
+#elif 1
+typedef char testtype;
+testtype good = 33;
+testtype bad  = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d, good=%d,bad=%d\n", t,good,bad);
+}
+#elif 0
+typedef double testtype;
+testtype good = 333.3;
+testtype bad  = 0.00;
+void print_testtype(testtype t)
+{
+	printf("return value = %3.3lf, good=%3.3lf,bad=%3.3lf\n", t,good,bad);
+}
+#elif 0
+typedef
+struct {
+	int a;
+	float b;
+	int c[4];
+} testtype;
+testtype good = {33, 33.3, {4,4,4,4}};
+testtype bad  = {0, 00.0, {0,0,0,0}};
+void print_testtype(testtype t)
+{
+	printf( "return value = {\n"
+			"	a = %d\n"
+			"	b = %2.3f\n"
+			"	c = { %d, %d, %d, %d }"
+			"}\n", t.a, t.b,
+			t.c[0],t.c[1],t.c[2],t.c[3]);
+}
+#else
+typedef int testtype;
+testtype good = 33;
+testtype bad = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d,  good=%d,bad=%d\n", t,good,bad);
+}
+#endif
+
+typedef void (*RET_FUNC)(testtype, void *);
+
+void g(RET_FUNC func)
+{
+	func(good, NULL);
+}
+
+testtype f_cbc()
+{
+	//__label__ _cbc_exit0;
+	//int retval;
+	void *ret;
+
+	ret = _CbC_return;
+
+	printf("f0: fp = %p\n", __builtin_frame_address(0));
+	printf("__return_func = %p\n", ret);
+	g(ret);
+
+	printf("not good\n");
+	return bad;
+//_cbc_exit0:
+	//printf("f1: fp = 0x%x\n", __builtin_frame_address(0));
+	//return retval;
+}
+
+int main(int argc, char **argv)
+{
+	testtype t;
+	printf("main before: fp = %p\n", __builtin_frame_address(0));
+	t = f_cbc();
+	print_testtype(t);
+	printf("main after: fp = %p\n", __builtin_frame_address(0));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_struct.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,31 @@
+
+struct aaa{
+	int a;      // 4
+	char b;     // 1
+	int c;      // 4
+	double d;   // 8
+	char e[10]; //10
+};              //27  --> 32
+
+int main(int argc, char **argv){
+	struct aaa A;
+	A.a = 10;
+	A.b = 'A';
+	A.c = 20;
+	A.d = 1.11;
+	A.e[0] = 'A', A.e[1] = 'Z';
+
+	printf("sizeof aaa = %d\n", sizeof(struct aaa));
+	tset01( A, 10);
+	return 0;
+}
+
+void tset01( struct aaa B, int size){
+	printf("B.a = %d\n", B.a);
+	printf("B.b = %d\n", B.b);
+	printf("B.c = %d\n", B.c);
+	printf("B.d = %lf\n", B.d);
+	B.e[9] = '\0';
+	printf("B.e = %s\n", B.e);
+	printf("size = %d\n", size);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_tailcall1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,28 @@
+#include<stdio.h>
+
+
+void B(int a, int b, int c){
+    printf("B: a=%d, b=%d, c=%d\n", a, b, c);
+    return ;
+}
+
+void* freturn(){
+	return B;
+}
+void A(int a, int b, int c, int d){
+    void (*fp)(int, int, int);
+    fp = freturn();
+
+    printf("A: a=%d, b=%d, c=%d, d=%d\n", a, b, c, d);
+    return fp(a, b, c+d);
+    //return B(a, b, c+d);
+}
+
+int main(int argc, char **argv){
+    printf("main: \n");
+    //fp = B;
+    A(10, 20, 30, 40);
+    return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_tree.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,54 @@
+//#include<stdio.h>
+double test(char, char, int, double);
+__code cs(int , double , char );
+void testvoid(double a);
+int testint(double a);
+
+__code cs(int a, double b, char c){
+	printf("__code cs was called.\n");
+	printf("a = %d, b = %lf, c = %d\n", a, b, c);
+	exit(0);
+}
+__code cs1(int a, double b, char c, int d){
+	printf("__code cs1 was called.\n");
+	printf("a = %d, b = %lf, c = %d, d = %d\n", a, b, c, d);
+	exit(0);
+}
+
+int main(int argc, char **argv){
+	double t;
+	//goto cs(2, 10.2, 2);
+
+	t = test('a', 'b', 10, 2.5);
+	printf("t = %lf\n", t);
+	testvoid(2.22);
+	testint(2.22);
+
+	printf("test_goto\n");
+	goto test_goto1(10, 20, 30.3);
+	return 0;
+}
+void test0(){
+	exit(0);
+}
+
+void testvoid(double a){
+	return ;
+}
+int testint(double a){
+	int b;
+	b = (a*100-a) +2;
+	return 1;
+}
+
+double test(char c, char l, int a, double d){
+	return (double)a*d+c+l;
+}
+
+void test_goto(int a, int b, double c){
+	goto cs(2, 10.2, 3);
+}
+__code test_goto1(int a, int b, double c){
+	goto cs1(2, 10.2, 3, 4);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tmp1.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,94 @@
+/* easy test */
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+
+extern int printf(const char *,...);
+
+__code (*ret)();
+void *env;
+__code exit1(int ac,void *);
+
+main0(ac,av)
+int ac;
+char *av[];
+{
+    ret = __return;
+    env = __environment;
+    printf("#0017:main0 %d start.\n",ac);
+    if (ac>=1)
+	goto code0(ac,av,__return);
+    goto code1(ac,av,exit1);
+    // not reached. (warning?)
+    printf("#0022:main0 %d end.\n",ac);
+}
+
+__code exit1(int ac)
+{
+    // exit(0);
+    goto code3(0,1,2,3,4,5);
+}
+
+__code code3(a,b,c,d,e,f)
+char a,b;
+int c,d,e,f;
+{
+    printf("#0035:code3: %d %d %d %d %d %d\n",a,b,c,d,e,f);
+    if(a<10)
+	goto code3(a+1,b,c,d,e,f);
+    else
+	goto code4(a+3,b+3,c+3,d+3,e+3,f+3);
+}
+
+__code code4(a,b,c,d,e,f)
+char a,b;
+int c,d,e,f;
+{
+    int i=1,j=2;
+    printf("#0047:code4: %d %d %d %d %d %d\n",a,b,c,d,e,f);
+    if(a<20)   // cyclic binary dependency
+	goto code3(a+b,b+c,c+d,d+e,e+f,f+a);
+    else if(a<30)
+	goto code3(a,b,c,d,e,f);
+    else if(a<40) // cyclic dependency
+	goto code3(b,c,a,e,f,d);
+    else if(a<50)
+	goto code4(a+i,b+j,c+i,d+3,e+3,f+3);
+    else goto ret(0,env);
+}
+
+__code code0(ac,av,ret)
+int ac;
+char *av[];
+__code (*ret)(int);
+{
+    goto code1(ac,av,ret);
+}
+
+__code code1(ac,av,exit)
+int ac;
+__code (*exit)(int,void*);
+char *av[];
+{
+    __code (*f)(int,void *);
+    printf("#0073:code1: %d\n",ac);
+    f = exit;
+    if (ac>3)
+	goto code1(ac,av,f);
+    else if (ac>2)
+	goto code1(av,ac,f);
+    else
+	goto (*f)(ac,env);
+}
+
+int
+main(int ac,char *av[])
+{
+   main0(1,av);
+   printf("#0087:main continue.\n");
+   main0(0,av);
+   printf("#0089:main end.\n");
+return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tmp2.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,44 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+#include "stdio.h"
+
+int
+main(ac,av)
+int ac;
+char *av[];
+{
+    int i;
+    i=main0(ac,av);
+    fprintf(stdout,"#0012:1: %s %d\n",av[0],i);
+    return 0;
+}
+
+int
+main0(ac,av)
+int ac;
+char *av[];
+{
+    fprintf(stdout,"#0021:2: %s\n",av[0]);
+    goto code0(av,__return,__environment);
+}
+
+__code code0(av,ret,retenv)
+char *av[];
+__code (*ret)();
+void *retenv;
+{
+    char *p;
+    p = av[0];
+    fprintf(stdout,"#0032:3: %s\n",p);
+    goto code1(av,ret,retenv);
+}
+
+__code code1(av,ret,retenv)
+char *av[];
+__code (*ret)();
+void *retenv;
+{
+    fprintf(stdout,"#0041:4: %s\n",av[0]);
+    goto (*ret)(1234,retenv);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tmp4.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,61 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+#include "stdio.h"
+
+int
+main(ac,av)
+int ac;
+char *av[];
+{
+    int i;
+    i=main0(ac,av);
+    fprintf(stdout,"#0012:1: %s %d\n",av[0]+2,i);
+    return 0;
+}
+
+int
+main0(ac,av)
+int ac;
+char *av[];
+{
+    int i,j,k;
+    i=123;
+    j=456;
+    k=789;
+    fprintf(stdout,"#0025:2: %s\n",av[0]+2);
+    goto code0(i,j,k,av,__return,__environment);
+}
+
+__code code0(i,j,k,av,ret,retenv)
+int i,j,k;
+char *av[];
+__code (*ret)();
+void *retenv;
+{
+    char *p;
+    p = av[0]+2;
+    fprintf(stdout,"#0037:3: i=%d j=%d k=%d av[0]=%s p=%s\n",i,j,k,av[0]+2,p);
+    goto code1(i,j,k,av,ret,retenv);
+}
+
+__code code1(i,j,k,av,ret,retenv)
+int i,j,k;
+char *av[];
+__code (*ret)();
+void *retenv;
+{
+    fprintf(stdout,"#0047:4: %s\n",av[0]+2);
+    goto code2(i,j,k,av,ret,retenv);
+}
+
+__code code2(i,j,k,av,ret,retenv)
+int i,j,k;
+char *av[];
+__code (*ret)();
+void *retenv;
+{
+    fprintf(stdout,"#0057:5: %s\n",av[0]+2);
+    fprintf(stdout,"#0058:5: i=%d j=%d k=%d\n",i,j,k);
+    goto (*ret)(1234,retenv);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tmpa.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,49 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+#include <stdio.h>
+
+struct enemy{
+    int charno;                 // image number
+    float x;                    // x location
+    float y;                    // y location
+    int ap;                     // armor point
+};
+void
+print_param(struct enemy *e)
+{
+    printf("#0014:charno:%d   x,y:%f,%f   hp:%d\n",
+           e->charno,e->x,e->y,e->ap);
+}
+
+typedef struct{
+    char  dest;
+    int VF01[4];
+    __code (*ret)();
+    void *env;
+} interface;
+
+__code a0(interface a) {
+    printf("#0026:%d\n",a.dest);
+    goto a.ret(0,a.env);
+}
+
+
+int main(int argc,char *argv[])
+{
+    struct enemy e;
+#if 0
+    interface args = {15,{0,0,0,0},return,environment};
+#else
+    interface args = {15,{0,0,0,0},0,0};
+    args.ret = __return;
+    args.env = __environment;
+#endif
+
+    e.charno=5; e.x=50.0; e.y=30.0; e.ap=100;
+    print_param(&e);
+
+    printf("#0045:%d %d\n",args.VF01[2],args.VF01[1]);
+    goto  a0(args);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/too-long-argument.c	Tue Oct 14 17:34:59 2014 +0900
@@ -0,0 +1,104 @@
+#define __environment _CbC_environment
+#define __return _CbC_return
+
+#include <stdio.h>
+
+#undef WRONGNUMBER
+
+typedef __code
+(*CCC)( int f1,int f2,int f3,int f4,int f5,int f6,int f7,int f8,int f9,int fa,int fb,int fc,int fd,int fe,int ff,
+	__code(*ret)(int,void *),
+	void *env);
+
+__code
+tcode2( int f1,int f2,int f3,int f4,int f5,int f6,int f7,int f8,int f9,int fa,int fb,int fc,int fd,int fe,int ff,
+	__code(*ret)(int,void *),
+	void *env)
+{
+fprintf(stdout,"#0017:tcode2: f1=%d,f2=%d,f3=%d,f4=%d,f5=%d,f6=%d,f7=%d,f8=%d,f9=%d,fa=%d,fb=%d,fc=%d,fd=%d,fe=%d,ff=%d\n",
+f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff);
+     goto ret(0,env);
+}
+
+__code
+tcode1(f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff,ret,env)
+	int f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff;
+	__code(*ret)(int,void *);
+	void *env;
+{
+fprintf(stdout,"#0028:tcode1: f1=%d,f2=%d,f3=%d,f4=%d,f5=%d,f6=%d,f7=%d,f8=%d,f9=%d,fa=%d,fb=%d,fc=%d,fd=%d,fe=%d,ff=%d\n",
+f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff);
+     goto ret(0,env);
+}
+
+__code
+tcode4(int x,int y,CCC junction,__code(*ret)(int,void *),void *env)
+{
+#ifdef WRONGNUMBER
+     goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,ret,env);
+#else
+     goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,ret,env);
+#endif
+}
+
+__code
+tcode0(int x,int y,__code(*junction)(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,__code(*)(int, void *),void *),__code(*ret)(int,void *),void *env)
+{
+#ifdef WRONGNUMBER
+     goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,ret,env);
+#else
+     goto junction(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,ret,env);
+#endif
+}
+
+int
+main0()
+{
+#ifdef WRONGNUMBER
+     goto tcode2(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+	__return,__environment);
+#else
+     goto tcode2(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
+	__return,__environment);
+#endif
+}
+
+int
+main1()
+{
+#ifdef WRONGNUMBER
+     goto tcode1(0,1,2,3,4,5,6,7,8,9,10,11,12,13,
+	__return,__environment);
+#else
+     goto tcode1(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
+	__return,__environment);
+#endif
+}
+
+int
+main2()
+{
+     goto tcode0(0,1,tcode1,__return,__environment);
+}
+
+int
+main4()
+{
+     goto tcode4(0,1,tcode2,__return,__environment);
+}
+
+int
+main()
+{
+    printf("#0092:main4\n");
+    main4();
+    printf("#0094:main2\n");
+    main2();
+    printf("#0096:main0\n");
+    main0();
+    printf("#0098:main1\n");
+    main1();
+return 0;
+}
+
+//