Mercurial > hg > Papers > 2010 > kent-master
view paper/quicksort_for_ppc/mc/quicksort_cbc_inter.cbc @ 10:3d9addf62d0b
organized repository.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 16 Feb 2010 14:35:36 +0900 |
parents | |
children |
line wrap: on
line source
#include<stdlib.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" 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); }