diff options
author | blazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2006-10-20 12:37:13 +0000 |
---|---|---|
committer | blazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2006-10-20 12:37:13 +0000 |
commit | ca0c62265eb8cdd5fb0d8a8b34ee77baf3de987e (patch) | |
tree | 50a139db8e2ac51c6ff41f3790ff72aa417ed3be /test/ccured_olden/perimeter/maketree.c | |
parent | 43668d9109b1f36329646fd07324d435be6f0050 (diff) | |
download | compcert-ca0c62265eb8cdd5fb0d8a8b34ee77baf3de987e.tar.gz compcert-ca0c62265eb8cdd5fb0d8a8b34ee77baf3de987e.zip |
Ajout du banc de tests de CCured (Olden benchmark suite, cf.
CCured: type-safe retrofitting of legacy code, G.Necula et al.)
rapportCompcert_all.txt liste les erreurs produites par ccomp.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@121 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'test/ccured_olden/perimeter/maketree.c')
-rw-r--r-- | test/ccured_olden/perimeter/maketree.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/test/ccured_olden/perimeter/maketree.c b/test/ccured_olden/perimeter/maketree.c new file mode 100644 index 00000000..294ff028 --- /dev/null +++ b/test/ccured_olden/perimeter/maketree.c @@ -0,0 +1,120 @@ +#include "perimeter.h" + +static int CheckOutside(int x, int y) +{ + int euclid = x*x+y*y; + + if (euclid > 4194304) return 1; + if (euclid < 1048576) return -1; + return 0; +} + +static int CheckIntersect(int center_x, int center_y, int size) +{ + int sum; + + if (!CheckOutside(center_x+size,center_y+size) && + !CheckOutside(center_x+size,center_y-size) && + !CheckOutside(center_x-size,center_y-size) && + !CheckOutside(center_x-size,center_y+size)) return 2; + sum=CheckOutside(center_x+size,center_y+size) + + CheckOutside(center_x+size,center_y-size) + + CheckOutside(center_x-size,center_y-size) + + CheckOutside(center_x-size,center_y+size); + if ((sum==4) || (sum==-4)) return 0; + return 1; +} + +QuadTree MakeTree(int size, int center_x, int center_y, int lo_proc, + int hi_proc, QuadTree parent, ChildType ct, int level) +{ + int intersect=0; + QuadTree retval; + +#ifdef FUTURES + retval = (QuadTree) ALLOC(lo_proc,sizeof(*retval)); +#else + retval = (QuadTree) mymalloc(sizeof(*retval)); +#endif + retval->parent = parent; + retval->childtype = ct; + + intersect = CheckIntersect(center_x,center_y,size); + size = size/2; + if ((intersect==0) && (size<512)) + { + retval->color = white; + retval->nw = NULL; + retval->ne = NULL; + retval->sw = NULL; + retval->se = NULL; + } + else if (intersect==2) + { + retval->color=black; + retval->nw = NULL; + retval->ne = NULL; + retval->sw = NULL; + retval->se = NULL; + } + else + { + if (!level) + { + retval->color = black; + retval->nw = NULL; + retval->ne = NULL; + retval->sw = NULL; + retval->se = NULL; + } + else + { + int mid1,mid2; +#ifdef FUTURES + future_cell_int fc_sw,fc_se,fc_ne; +#endif + + mid1 = (lo_proc+hi_proc)/2; + mid2 = (lo_proc+hi_proc+1)/2; + +#ifndef FUTURES + retval->sw = MakeTree(size,center_x-size,center_y-size, + (mid2+hi_proc+1)/2,hi_proc,retval, + southwest,level-1); + retval->se = MakeTree(size,center_x+size,center_y-size, + mid2,(mid2+hi_proc)/2,retval, + southeast,level-1); + retval->ne = MakeTree(size,center_x+size,center_y+size, + (lo_proc+mid1+1)/2,mid1,retval, + northeast,level-1); + retval->nw = MakeTree(size,center_x-size,center_y+size, + lo_proc,(lo_proc+mid1)/2,retval, + northwest,level-1); +#else + FUTURE(size,center_x-size,center_y-size, + (mid2+hi_proc+1)/2,hi_proc,retval, + southwest,level-1,MakeTree,&fc_sw); + FUTURE(size,center_x+size,center_y-size, + mid2,(mid2+hi_proc)/2,retval, + southeast,level-1,MakeTree,&fc_se); + FUTURE(size,center_x+size,center_y+size, + (lo_proc+mid1+1)/2,mid1,retval, + northeast,level-1,MakeTree,&fc_ne); + retval->nw = MakeTree(size,center_x-size,center_y+size, + lo_proc,(lo_proc+mid1)/2,retval, + northwest,level-1); + TOUCH(&fc_sw); + retval->sw = (QuadTree) fc_sw.value; + TOUCH(&fc_se); + retval->se = (QuadTree) fc_se.value; + TOUCH(&fc_ne); + retval->ne = (QuadTree) fc_ne.value; +#endif + retval->color = grey; + } + } + return retval; +} + + + |