Mercurial > hg > CbC > CbC_gcc
comparison CbC-examples/quicksort/quicksort_cbc.cbc @ 23:775dfe898662
add quicksort version 2.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Oct 2009 12:12:51 +0900 |
parents | 0eb6cac880f0 |
children | f37d7058d1ce |
comparison
equal
deleted
inserted
replaced
22:0eb6cac880f0 | 23:775dfe898662 |
---|---|
21 | 21 |
22 __code returner(stack sp) | 22 __code returner(stack sp) |
23 { | 23 { |
24 framep fp = (framep)sp; | 24 framep fp = (framep)sp; |
25 sp += fp->size; | 25 sp += fp->size; |
26 fp->code(fp->interface, sp); | 26 goto fp->code(fp->interface, sp); |
27 } | 27 } |
28 | 28 |
29 __code quicksort_start(void *arg, stack sp) | 29 __code quicksort_start(void *arg, stack sp) |
30 { | 30 { |
31 struct qs_if *recvif = arg; | 31 struct qs_if *recvif = arg; |
116 recvif->s = e+1; | 116 recvif->s = e+1; |
117 goto quicksort_start(outif, sp); | 117 goto quicksort_start(outif, sp); |
118 } | 118 } |
119 /* recursive call routine end. */ | 119 /* recursive call routine end. */ |
120 | 120 |
121 #define STACK_SIZE 10240 | |
121 int v[100]; | 122 int v[100]; |
122 struct qs_if *outif; | 123 struct qs_if *outif; |
123 | 124 |
124 struct qs { | 125 struct qs { |
125 __code (*ret)(void*); | 126 __code (*ret)(void*); |
128 }; | 129 }; |
129 __code | 130 __code |
130 quicksort(int *v, int s, int e, RET ret, void *arg ) | 131 quicksort(int *v, int s, int e, RET ret, void *arg ) |
131 { | 132 { |
132 framep fp; | 133 framep fp; |
133 stack sp = malloc(10240)+10240; | 134 stack sp = malloc(STACK_SIZE)+STACK_SIZE; |
134 struct qs *finish_if; | 135 struct qs *finish_if; |
135 | 136 |
136 /* interface for quicksort_finish. */ | 137 /* interface for quicksort_finish. */ |
137 finish_if = (sp -= sizeof(*finish_if)); | 138 finish_if = (sp -= sizeof(*finish_if)); |
138 finish_if->ret = ret; | 139 finish_if->ret = ret; |
139 finish_if->ret_arg = arg; | 140 finish_if->ret_arg = arg; |
140 finish_if->sp = sp -10240 + sizeof(*finish_if); | 141 finish_if->sp = sp -STACK_SIZE + sizeof(*finish_if); |
141 | 142 |
142 /* interface for quicksort_start. */ | 143 /* interface for quicksort_start. */ |
143 outif = (sp -= sizeof(*outif)); | 144 outif = (sp -= sizeof(*outif)); |
144 outif->v = v; | 145 outif->v = v; |
145 outif->s = s; | 146 outif->s = s; |