Mercurial > hg > CbC > CbC_gcc
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); }