aboutsummaryrefslogtreecommitdiffstats
path: root/test/ccured_olden/perimeter/maketree.c
diff options
context:
space:
mode:
authorblazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2006-10-20 12:37:13 +0000
committerblazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2006-10-20 12:37:13 +0000
commitca0c62265eb8cdd5fb0d8a8b34ee77baf3de987e (patch)
tree50a139db8e2ac51c6ff41f3790ff72aa417ed3be /test/ccured_olden/perimeter/maketree.c
parent43668d9109b1f36329646fd07324d435be6f0050 (diff)
downloadcompcert-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.c120
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;
+}
+
+
+