# HG changeset patch # User kent # Date 1266298812 -32400 # Node ID d8adf04b9f63599debf8c6447e014717beed3345 # Parent 3d9addf62d0b2279d6025da781c3a467362485b4 organized repository. diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/Makefile --- a/quicksort_for_ppc/Makefile Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - -CbCC=/usr/local/cbc/bin/cbc-gcc - -#CC=gcc -CC=/usr/local/cbc/bin/cbc-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 quicksort_cbc_inter.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 diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/benchmark.sh --- a/quicksort_for_ppc/benchmark.sh Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -#!/usr/bin/env zsh - -time=/usr/bin/time -QS=./quicksort_c -size=10000000 -seed=123456789 -num=10 - - -max=0 -min=99999 -count=0 -amount=0 - -echo "size of array = $size" -while [[ $count -lt $num ]]; do - 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" - - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/mc/Makefile --- a/quicksort_for_ppc/mc/Makefile Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -CbCC=~/WorkSpace/Mercurial/device/mc - -#CC=gcc -CC=gcc - -HEADERMAKER=~/WorkSpace/Mercurial/GCC/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 quicksort_cbc_inter.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 diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/mc/benchmark.sh --- a/quicksort_for_ppc/mc/benchmark.sh Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -#!/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 - 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" - - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/mc/quicksort_cbc.cbc --- a/quicksort_for_ppc/mc/quicksort_cbc.cbc Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,244 +0,0 @@ -#include -#include -#include - -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]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 (sv[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]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 - - - - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/mc/quicksort_cbc.h --- a/quicksort_for_ppc/mc/quicksort_cbc.h Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* defined in file quicksort_cbc.cbc at offset 354 */ -__code returner (stack sp); - -/* defined in file quicksort_cbc.cbc at offset 462 */ -__code quicksort_start (void *arg, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1031 */ -__code quicksort_divider (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1155 */ -__code quicksort_divider_s (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1364 */ -__code quicksort_divider_e (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1576 */ -__code quicksort_swapper (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1916 */ -__code quicksort_treecall (QS_IF *recvif, int s, int e, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 2547 */ -__code quicksort (int *v, int s, int e, RET ret, void *arg ); - -/* defined in file quicksort_cbc.cbc at offset 3213 */ -__code quicksort_finish (void *arg, stack sp); diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/mc/quicksort_test.cbc --- a/quicksort_for_ppc/mc/quicksort_test.cbc Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -#include -#include -#include -#include - -#include"quicksort_test.h" - -#define STACK_SIZE 10240 - -extern void quicksort_IF(); - - -void -random_initialize(int *v, int size, int min, int max) -{ - int i; - int diff = max-min+1; - - for (i=0; i v[i+1]) - return 0; - } - return 1; -} - -void -exit0(void *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); - } -} - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/mc/quicksort_test.h --- a/quicksort_for_ppc/mc/quicksort_test.h Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -/* defined in file quicksort_test.cbc at offset 160 */ -void random_initialize (int *v, int size, int min, int max); - -/* defined in file quicksort_test.cbc at offset 322 */ -static void print_array (int *v, int size); - -/* defined in file quicksort_test.cbc at offset 564 */ -void starter (int size); - -/* defined in file quicksort_test.cbc at offset 1095 */ -int main (int argc, char **argv); - -/* defined in file quicksort_test.cbc at offset 1491 */ -static int check_sort (int *v, int size); - -/* defined in file quicksort_test.cbc at offset 1620 */ -void exit0 (void *arg); - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_c.c --- a/quicksort_for_ppc/quicksort_c.c Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -#include -#include -#include -#include - -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 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] 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 -#include -#include - -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]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 (sv[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]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 - - - - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_cbc.h --- a/quicksort_for_ppc/quicksort_cbc.h Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* defined in file quicksort_cbc.cbc at offset 354 */ -__code returner (stack sp); - -/* defined in file quicksort_cbc.cbc at offset 462 */ -__code quicksort_start (void *arg, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1031 */ -__code quicksort_divider (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1155 */ -__code quicksort_divider_s (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1364 */ -__code quicksort_divider_e (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1576 */ -__code quicksort_swapper (QS_IF *recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 1916 */ -__code quicksort_treecall (QS_IF *recvif, int s, int e, stack sp); - -/* defined in file quicksort_cbc.cbc at offset 2547 */ -__code quicksort (int *v, int s, int e, RET ret, void *arg ); - -/* defined in file quicksort_cbc.cbc at offset 3213 */ -__code quicksort_finish (void *arg, stack sp); diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_cbc2.cbc --- a/quicksort_for_ppc/quicksort_cbc2.cbc Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -#include -#include -#include - -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]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); -} - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_cbc2.h --- a/quicksort_for_ppc/quicksort_cbc2.h Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* defined in file quicksort_cbc2.cbc at offset 402 */ -__code returner (stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 509 */ -__code quicksort_start (QS_IF recvif, stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 1047 */ -__code quicksort_divider (QS_IF recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 1169 */ -__code quicksort_divider_s (QS_IF recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 1380 */ -__code quicksort_divider_e (QS_IF recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 1589 */ -__code quicksort_swapper (QS_IF recvif, int s, int e, int p, stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 1961 */ -__code quicksort_treecall (QS_IF recvif, int s, int e, stack sp); - -/* defined in file quicksort_cbc2.cbc at offset 2417 */ -__code quicksort (int *v, int s, int e, RETTYPE ret, void *arg ); - -/* defined in file quicksort_cbc2.cbc at offset 3052 */ -__code quicksort_finish (QS_IF recvif, stack sp); - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_cbc_inter.cbc --- a/quicksort_for_ppc/quicksort_cbc_inter.cbc Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ - -#include -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" - - -typedef struct { - __code (*ret)(void*); - void *ret_arg; - stack *sp; -} QS_FINISH; - -extern int *IFv; -extern int IFs; -extern int IFe; -extern RET IFret; -extern void *IFarg; -extern stack IFsp; -extern int IFsize; - -static void(*exitfunc)(void*); -__code exitter(void *arg) { - exitfunc(arg); -} - -__code quicksort_finish_IF(void *arg, stack sp); - -void -quicksort_IF() -{ - printf("v=%p\n", IFv); - printf("s=%d\n", IFs); - printf("e=%d\n", IFe); - printf("ret=%p\n", IFret); - printf("arg=%p\n", IFarg); - printf("sp=%p\n", IFsp); - printf("size=%d\n", IFsize); - exitfunc = IFret; - - goto quicksort_IF0(IFv, IFs, IFe, exitter, IFarg, IFsp, IFsize); -} - -__code -quicksort_IF0(int *v, int s, int e, RET ret, void *arg, stack sp0,int size) -{ - framep fp; - stack sp; - sp = sp0 + size; - QS_FINISH *finish_if; - QS_IF *outif; - - printf("v=%p\n", v); - printf("s=%d\n", s); - printf("e=%d\n", e); - printf("ret=%p\n", ret); - printf("arg=%p\n", arg); - printf("sp=%p\n", sp0); - printf("size=%d\n", size); - - /* 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_IF; - fp->interface = finish_if; - fp->size = sizeof(frame)+sizeof(QS_IF); - - goto quicksort_start(outif, sp); -} - -__code -quicksort_finish_IF(void *arg, stack sp) -{ - QS_FINISH interface; - interface = *(QS_FINISH*)arg; - //assert((void*)interface.sp==(void*)mustbefreed); - goto interface.ret(interface.ret_arg); -} - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_test.cbc --- a/quicksort_for_ppc/quicksort_test.cbc Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -#include -#include -#include -#include - -#include"quicksort_test.h" - -#define STACK_SIZE 10240 - -extern void quicksort_IF(); - - -void -random_initialize(int *v, int size, int min, int max) -{ - int i; - int diff = max-min+1; - - for (i=0; i v[i+1]) - return 0; - } - return 1; -} - -void -exit0(void *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); - } -} - diff -r 3d9addf62d0b -r d8adf04b9f63 quicksort_for_ppc/quicksort_test.h --- a/quicksort_for_ppc/quicksort_test.h Tue Feb 16 14:35:36 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -/* defined in file quicksort_test.cbc at offset 160 */ -void random_initialize (int *v, int size, int min, int max); - -/* defined in file quicksort_test.cbc at offset 322 */ -static void print_array (int *v, int size); - -/* defined in file quicksort_test.cbc at offset 564 */ -void starter (int size); - -/* defined in file quicksort_test.cbc at offset 1095 */ -int main (int argc, char **argv); - -/* defined in file quicksort_test.cbc at offset 1491 */ -static int check_sort (int *v, int size); - -/* defined in file quicksort_test.cbc at offset 1620 */ -void exit0 (void *arg); -