diff CbC-examples/quicksort/quicksort_cbc.cbc @ 25:2476ed92181e

modified machine description of i386 for support indirect sibcall attributed fastcall.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Tue, 27 Oct 2009 16:04:06 +0900
parents f37d7058d1ce
children 9117c3b65bc3
line wrap: on
line diff
--- a/CbC-examples/quicksort/quicksort_cbc.cbc	Thu Oct 15 18:47:39 2009 +0900
+++ b/CbC-examples/quicksort/quicksort_cbc.cbc	Tue Oct 27 16:04:06 2009 +0900
@@ -6,7 +6,7 @@
 typedef struct {
 	int size;
 	void *interface;
-	__code (*code)(void*, stack);
+	__code  (*code)(void*, stack) ;
 } frame, *framep;
 
 /* quickstart main routine. */
@@ -15,21 +15,21 @@
 	int s;
 	int e;
 } QS_IF ;
-typedef __code (*RET)(void*);
+typedef __code  (*RET)(void*);
 
 #include"quicksort_cbc.h"
 
 /* for check. */
 void *mustbefreed;
 
-__code returner(stack sp)
+__code  returner(stack sp)
 {
 	framep fp = (framep)sp;
 	sp += fp->size;
 	goto fp->code(fp->interface, sp);
 }
 
-__code quicksort_start(void *arg, stack sp)
+__code  quicksort_start(void *arg, stack sp)
 {
 	QS_IF *recvif = arg;
 	int a,b,c,p;
@@ -61,11 +61,11 @@
 /* main routine end. */
 
 /* divide routine. */
-__code quicksort_divider(QS_IF *recvif, int s, int e, int p, stack sp)
+__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)
+__code  quicksort_divider_s(QS_IF *recvif, int s, int e, int p, stack sp)
 {
 	if (recvif->v[s]<p) {
 		s++;
@@ -73,7 +73,7 @@
 	} 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)
+__code  quicksort_divider_e(QS_IF *recvif, int s, int e, int p, stack sp)
 {
 	if (p<recvif->v[e]) {
 		e--;
@@ -81,7 +81,7 @@
 	} else
 		goto quicksort_swapper(recvif, s, e, p, sp);
 }
-__code quicksort_swapper(QS_IF *recvif, int s, int e, int p, stack sp)
+__code  quicksort_swapper(QS_IF *recvif, int s, int e, int p, stack sp)
 {
 	if (s<e) {
 		int tmp;
@@ -100,7 +100,7 @@
 
 
 /* recursive call routine. */
-__code quicksort_treecall(QS_IF *recvif, int s, int e, stack sp)
+__code  quicksort_treecall(QS_IF *recvif, int s, int e, stack sp)
 {
 	framep fp;
 	QS_IF *outif;
@@ -124,17 +124,16 @@
 #define STACK_SIZE 10240
 
 typedef struct {
-	__code (*ret)(void*);
+	__code  (*ret)(void*);
 	void *ret_arg;
 	stack *sp;
 } QS_FINISH;
-__code
+__code 
 quicksort(int *v, int s, int e,  RET ret, void *arg )
 {
 	framep fp;
 	stack sp0, sp;
-	sp0 = malloc(STACK_SIZE);
-		mustbefreed = sp0;
+	sp0 = mustbefreed = malloc(STACK_SIZE);
 	sp = sp0 + STACK_SIZE;
 	QS_FINISH *finish_if;
 	QS_IF *outif;
@@ -158,11 +157,11 @@
 
 	goto quicksort_start(outif, sp);
 }
-__code
+__code 
 quicksort_finish(void *arg, stack sp)
 {
 	QS_FINISH interface = *(QS_FINISH*)arg;
-	assert(interface.sp==mustbefreed);
+	//assert(interface.sp==mustbefreed);
 	free(interface.sp);
 	goto interface.ret(interface.ret_arg);
 }