aboutsummaryrefslogtreecommitdiffstats
path: root/test/ccured_olden/em3d
diff options
context:
space:
mode:
Diffstat (limited to 'test/ccured_olden/em3d')
-rw-r--r--test/ccured_olden/em3d/.cvsignore29
-rw-r--r--test/ccured_olden/em3d/CVS/Entries17
-rw-r--r--test/ccured_olden/em3d/CVS/Repository1
-rw-r--r--test/ccured_olden/em3d/CVS/Root1
-rw-r--r--test/ccured_olden/em3d/HOWTO1
-rw-r--r--test/ccured_olden/em3d/MY_HOWTO2
-rw-r--r--test/ccured_olden/em3d/Makefile64
-rw-r--r--test/ccured_olden/em3d/Makefile.plain7
-rw-r--r--test/ccured_olden/em3d/Makefile.ss8
-rw-r--r--test/ccured_olden/em3d/args.c21
-rw-r--r--test/ccured_olden/em3d/em3d.c16
-rw-r--r--test/ccured_olden/em3d/em3d.h38
-rw-r--r--test/ccured_olden/em3d/main.c45
-rw-r--r--test/ccured_olden/em3d/make_graph.c173
-rw-r--r--test/ccured_olden/em3d/make_graph.h13
-rw-r--r--test/ccured_olden/em3d/ssplain.c70
-rw-r--r--test/ccured_olden/em3d/ssplain.h128
-rw-r--r--test/ccured_olden/em3d/util.c34
-rw-r--r--test/ccured_olden/em3d/util.h23
19 files changed, 691 insertions, 0 deletions
diff --git a/test/ccured_olden/em3d/.cvsignore b/test/ccured_olden/em3d/.cvsignore
new file mode 100644
index 00000000..7601f0ad
--- /dev/null
+++ b/test/ccured_olden/em3d/.cvsignore
@@ -0,0 +1,29 @@
+*.o
+*.obj
+*.exe
+*.pdb
+*.ilk
+*.cpp
+*.i
+*.s
+*.asm
+*cil.c
+*.rtl
+*box.c
+*infer.c
+*_ppp.c
+*.origi
+*.stackdump
+*_all.c
+em3d
+em3d.*box
+
+allcfiles
+ope.m
+*cured.c
+*optimcured*
+*_comb.c
+changes
+*.browser
+*optimcured*
+*.out
diff --git a/test/ccured_olden/em3d/CVS/Entries b/test/ccured_olden/em3d/CVS/Entries
new file mode 100644
index 00000000..32532e6f
--- /dev/null
+++ b/test/ccured_olden/em3d/CVS/Entries
@@ -0,0 +1,17 @@
+/HOWTO/1.1/Fri Jun 29 11:36:12 2001//
+/MY_HOWTO/1.1/Fri Jun 29 11:36:12 2001//
+/Makefile.plain/1.1/Fri Jun 29 11:36:12 2001//
+/Makefile.ss/1.1/Fri Jun 29 11:36:12 2001//
+/em3d.c/1.1/Fri Jun 29 11:36:12 2001//
+/main.c/1.2/Mon Jul 9 19:38:57 2001//
+/make_graph.h/1.1/Fri Jun 29 11:36:12 2001//
+/util.c/1.1/Fri Jun 29 11:36:12 2001//
+/util.h/1.1/Fri Jun 29 11:36:12 2001//
+/ssplain.c/1.5/Sat Nov 3 05:27:15 2001//
+/Makefile/1.7/Fri Nov 9 01:27:01 2001//
+/args.c/1.2/Mon Mar 18 00:14:04 2002//
+/make_graph.c/1.2/Wed May 29 03:29:06 2002//
+/.cvsignore/1.9/Sat Aug 10 01:19:31 2002//
+/em3d.h/1.2/Sat Aug 10 01:19:31 2002//
+/ssplain.h/1.6/Mon Jan 6 23:28:11 2003//
+D
diff --git a/test/ccured_olden/em3d/CVS/Repository b/test/ccured_olden/em3d/CVS/Repository
new file mode 100644
index 00000000..cb6d74d1
--- /dev/null
+++ b/test/ccured_olden/em3d/CVS/Repository
@@ -0,0 +1 @@
+cil/test/olden/em3d
diff --git a/test/ccured_olden/em3d/CVS/Root b/test/ccured_olden/em3d/CVS/Root
new file mode 100644
index 00000000..35f411e9
--- /dev/null
+++ b/test/ccured_olden/em3d/CVS/Root
@@ -0,0 +1 @@
+/home/cvs-repository
diff --git a/test/ccured_olden/em3d/HOWTO b/test/ccured_olden/em3d/HOWTO
new file mode 100644
index 00000000..061698dd
--- /dev/null
+++ b/test/ccured_olden/em3d/HOWTO
@@ -0,0 +1 @@
+2000 100 1
diff --git a/test/ccured_olden/em3d/MY_HOWTO b/test/ccured_olden/em3d/MY_HOWTO
new file mode 100644
index 00000000..fe67f7a8
--- /dev/null
+++ b/test/ccured_olden/em3d/MY_HOWTO
@@ -0,0 +1,2 @@
+2000 100 1?
+(These should be Mowry's arguments.)
diff --git a/test/ccured_olden/em3d/Makefile b/test/ccured_olden/em3d/Makefile
new file mode 100644
index 00000000..b7e1d60c
--- /dev/null
+++ b/test/ccured_olden/em3d/Makefile
@@ -0,0 +1,64 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY = em3d.exe
+BINARYCCOMP = em3d.exe.compcert
+PROGS = main em3d make_graph util args ssplain
+
+
+OLDENHOME = /tmp/olden
+
+CC = gcc -arch ppc
+CCOMP = ../../../../ccomp
+CCOMPFLAGS=-dump-c
+
+SRC = .c
+OBJ = .o
+ASM = .s
+SRCS = $(addsuffix $(SRC),$(PROGS))
+OBJS = $(addsuffix $(OBJ),$(PROGS))
+ASMS = $(addsuffix $(ASM),$(PROGS))
+INCDIRS = /usr/include
+
+EXTRA_CDEFS = -DI_TIME -DI_SYS_TIME -DULTRIX
+CDEFS = -DPLAIN -DSS_PLAIN -DSS_RAND #-I$(OLDENHOME)/common
+OPTFLAGS = -g -Wall -O3
+
+LIBS =
+LIBPATH =
+
+#$(BINARY): $(OBJS)
+# $(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJS) $(LIBPATH) $(LIBS)
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS:%=%.compcert)
+
+all_gcc: $(PROGS:%=%.gcc)
+
+%.compcert: %.s
+ $(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.compcert $*.s $(LIBS)
+
+%.s: %.c ../../../../ccomp
+ $(CCOMP) $(CCOMPFLAGS) $*.c
+
+%.gcc: %.c
+ $(CC) $(CFLAGS) $(LDFALGS) $(OPTFLAGS) -o $*.gcc $*.c $(LIBS)
+
+
+
+#$(BINARYCCOMP): $(OBJSCCOMP)
+# $(CC) $(LDFALGS) $(OPTFLAGS) -o $@ $(OBJSCCOMP) $(LIBPATH) $(LIBS)
+
+#$(OBJCCOMP):
+# $(CCOMP) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+$(SRC)$(OBJ):
+ $(CC) $(CDEFS) $(EXTRA_CDEFS) $(MY_CDEFS) $(OPTFLAGS) -c $<
+
+clean:
+ rm -f $(BINARY) $(BINARYCCOMP) $(OBJS) $(ASMS) *~ *.light.c *.cil.*
+
+links:
+ /bin/rm -f ssplain.[hc]
+ ln -s $(OLDENHOME)/common/ssplain.h
+ ln -s $(OLDENHOME)/common/ssplain.c
diff --git a/test/ccured_olden/em3d/Makefile.plain b/test/ccured_olden/em3d/Makefile.plain
new file mode 100644
index 00000000..b87f77b1
--- /dev/null
+++ b/test/ccured_olden/em3d/Makefile.plain
@@ -0,0 +1,7 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY = em3d
+FILES = main em3d make_graph util args ssplain
+
+include ../Makefile.plain
+
diff --git a/test/ccured_olden/em3d/Makefile.ss b/test/ccured_olden/em3d/Makefile.ss
new file mode 100644
index 00000000..f07d9395
--- /dev/null
+++ b/test/ccured_olden/em3d/Makefile.ss
@@ -0,0 +1,8 @@
+# /* For copyright information, see olden_v1.0/COPYRIGHT */
+
+BINARY = em3d
+FILES = main em3d make_graph util args ssplain
+
+MY_CDEFS = -DAMIR
+include ../Makefile.ss
+
diff --git a/test/ccured_olden/em3d/args.c b/test/ccured_olden/em3d/args.c
new file mode 100644
index 00000000..f48638e6
--- /dev/null
+++ b/test/ccured_olden/em3d/args.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "em3d.h"
+
+void dealwithargs(int argc, char *argv[])
+{
+ if (argc > 1)
+ n_nodes = atoi(argv[1]);
+ else
+ n_nodes = 10;
+
+ if (argc > 2)
+ d_nodes = atoi(argv[2]);
+ else
+ d_nodes = 3;
+
+ if (argc > 3)
+ iters = atoi(argv[3]);
+ else
+ iters = 100;
+}
diff --git a/test/ccured_olden/em3d/em3d.c b/test/ccured_olden/em3d/em3d.c
new file mode 100644
index 00000000..760dd1a0
--- /dev/null
+++ b/test/ccured_olden/em3d/em3d.c
@@ -0,0 +1,16 @@
+#include "em3d.h"
+
+void compute_nodes(node_t *nodelist)
+{
+ int i;
+
+ for (; nodelist; nodelist = nodelist->next)
+ for (i=0; i < nodelist->from_count; i++) /* bad load */
+ {
+ node_t *other_node = nodelist->from_nodes[i]; /* bad load */
+ double coeff = nodelist->coeffs[i]; /* bad load */
+ double value = other_node->value; /* bad load: 50% */
+
+ nodelist->value -= coeff * value;
+ }
+}
diff --git a/test/ccured_olden/em3d/em3d.h b/test/ccured_olden/em3d/em3d.h
new file mode 100644
index 00000000..ba1eac22
--- /dev/null
+++ b/test/ccured_olden/em3d/em3d.h
@@ -0,0 +1,38 @@
+/* em3d.h - Header file for the electromagnetic problem in 3 dimensions
+ *
+ * By: Martin C. Carlisle
+ * Date: Feb. 23, 1994
+ *
+ */
+
+#ifndef EM3D
+#define EM3D
+
+extern int n_nodes; /* number of nodes (E and H) */
+extern int d_nodes; /* degree of nodes */
+extern int iters; /* number of iterations */
+
+#define ALLOC malloc
+#define DIST_SPAN 6
+
+#define assert(a) if (!a) {printf("Assertion failure\n"); exit(-1);}
+
+
+typedef struct node_t {
+ double value;
+ struct node_t *next;
+ struct node_t ** to_nodes; /* array of nodes pointed to */
+ struct node_t ** from_nodes; /* array of nodes data comes from */
+ double * coeffs; /* array of coeffs on edges */
+ int from_count;
+} node_t;
+
+typedef struct graph_t {
+ node_t *e_nodes;
+ node_t *h_nodes;
+} graph_t;
+
+/* Perform 1 step for a nodelist */
+void compute_nodes(node_t *nodelist);
+#endif
+
diff --git a/test/ccured_olden/em3d/main.c b/test/ccured_olden/em3d/main.c
new file mode 100644
index 00000000..61a3af4f
--- /dev/null
+++ b/test/ccured_olden/em3d/main.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+
+#include "em3d.h"
+#include "make_graph.h"
+
+#define chatting(A)
+
+void print_graph(graph_t graph)
+{
+#ifdef GET_OUT
+ node_t *cur_node;
+
+ for(cur_node=graph.e_nodes; cur_node; cur_node=cur_node->next)
+ {
+ chatting(("E: value %f, from_count %d\n",cur_node->value,
+ cur_node->from_count));
+ }
+ for(cur_node=graph.h_nodes; cur_node; cur_node=cur_node->next)
+ {
+ chatting(("H: value %f, from_count %d\n",cur_node->value,
+ cur_node->from_count));
+ }
+#endif GET_OUT
+}
+
+int iters;
+
+int main(int argc, char *argv[])
+{
+ int i;
+ graph_t graph;
+
+ dealwithargs(argc,argv);
+ graph=initialize_graph();
+ print_graph(graph);
+
+ for (i = 0; i < iters; i++)
+ {
+ compute_nodes(graph.e_nodes);
+ compute_nodes(graph.h_nodes);
+ fprintf(stderr, "Completed a computation phase: %d\n", i);
+ print_graph(graph);
+ }
+ return 0;
+}
diff --git a/test/ccured_olden/em3d/make_graph.c b/test/ccured_olden/em3d/make_graph.c
new file mode 100644
index 00000000..6bec340d
--- /dev/null
+++ b/test/ccured_olden/em3d/make_graph.c
@@ -0,0 +1,173 @@
+/* make_graph.c - Create a graph to be solved for the electromagnetic
+ * problem in 3 dimensions.
+ *
+ * By: Martin C. Carlisle
+ * Date: Feb 23, 1994
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "em3d.h"
+#include "util.h"
+
+#define NUM_H_NODES n_nodes
+#define H_NODE_DEGREE d_nodes
+
+#define NUM_E_NODES n_nodes
+#define E_NODE_DEGREE d_nodes
+
+int n_nodes;
+int d_nodes;
+
+node_t **make_table(int size)
+{
+ node_t **retval;
+
+ retval = (node_t **) ALLOC(size*sizeof(node_t *));
+ assert(retval);
+ return retval;
+}
+
+// post:
+// all 'next' fields valid or null
+// to_nodes, from_nodes, coefs are dead
+void fill_table(node_t **table, int size)
+{
+ int i;
+
+ /* Now we fill the table with allocated nodes */
+ for (i=0; i<size; i++)
+ {
+ table[i] = (node_t *) ALLOC(sizeof(node_t));
+ table[i]->value = gen_uniform_double();
+ table[i]->from_count = 0;
+
+ if (i > 0)
+ table[i-1]->next = table[i];
+ }
+ table[size-1]->next = NULL;
+}
+
+// post:
+// nodes in 'nodelist' have their 'to_nodes' array created, of
+// size 'degree'; then this array is filled with pointers to
+// randomly-chosen nodes (no duplicates); 'from_count' in the
+// pointed-to node keeps track of its in-degree
+void make_neighbors(node_t *nodelist, node_t **table, int tablesz,
+ int degree)
+{
+ node_t *cur_node;
+
+ for(cur_node = nodelist; cur_node; cur_node=cur_node->next)
+ {
+ node_t *other_node;
+ int j,k;
+
+ cur_node->to_nodes = (node_t **) ALLOC(degree*(sizeof(node_t *)));
+ for (j=0; j<degree; j++)
+ {
+ /* Make sure no duplicates are generated */
+ do
+ {
+ other_node = table[gen_number(tablesz)];
+ for (k=0; k<j; k++)
+ if (other_node == cur_node->to_nodes[k]) break;
+ }
+ while (k<j);
+ cur_node->to_nodes[j]=other_node;
+ other_node->from_count++; /* bad load: 50% */
+ }
+ }
+}
+
+// post:
+// from_nodes and coeffs get allocated, size specified by 'from_count',
+// which is the 'degree' from above; coeff's entries are set randomly,
+// from_nodes' entries left dead; from_count then set to 0
+void update_from_coeffs(node_t *nodelist)
+{
+ node_t *cur_node;
+
+ /* Setup coefficient and from_nodes vectors for h nodes */
+ for (cur_node = nodelist; cur_node; cur_node=cur_node->next)
+ {
+ int from_count = cur_node->from_count;
+ int k;
+
+ cur_node->from_nodes = (node_t **) ALLOC(from_count * sizeof(node_t *));
+ cur_node->coeffs = (double *) ALLOC(from_count * sizeof(double));
+ for (k=0; k<from_count; k++)
+ cur_node->coeffs[k] = gen_uniform_double();
+
+ cur_node->from_count = 0;
+ }
+}
+
+// post:
+// nodes pointed-to by those on 'nodelist' have their from_nodes'
+// entries filled with back-edges; from_count is used to add
+// information contiguously; global algorithm structure keeps the
+// array access in bounds (we counted in-degree before, and that
+// count was used to allocate, and now we one again enumerate the
+// pointers to a node); perhaps a runtime check is in order here
+void fill_from_fields(node_t *nodelist, int degree)
+{
+ node_t *cur_node;
+ for(cur_node = nodelist; cur_node; cur_node = cur_node->next)
+ {
+ int j;
+
+ for (j=0; j<degree; j++)
+ {
+ node_t *other_node = cur_node->to_nodes[j];
+ other_node->from_nodes[other_node->from_count] = cur_node;
+ other_node->from_count++;
+ }
+ }
+}
+
+// post:
+// two arrays of nodes are created; all 'h' nodes are then pointed to
+// H_NODE_DEGREE 'e' nodes, and vice-versa for 'e' nodes; backedge
+// information is also computed; pointers to the first nodes of each
+// set are stashed in a graph_t and returned (sets are linked together
+// as a linked list)
+graph_t initialize_graph()
+{
+ node_t **h_table;
+ node_t **e_table;
+ graph_t retval;
+
+ /* We start by creating a table of pointers to the h nodes */
+ h_table = make_table(NUM_H_NODES);
+ fill_table(h_table,NUM_H_NODES);
+
+ /* We repeat the same for the e nodes */
+ e_table = make_table(NUM_E_NODES);
+ fill_table(e_table,NUM_E_NODES);
+
+ /* At this point, for each h node, we give it the appropriate number
+ of neighbors as defined by the degree */
+ make_neighbors(h_table[0],e_table,NUM_E_NODES,H_NODE_DEGREE);
+ make_neighbors(e_table[0],h_table,NUM_H_NODES,E_NODE_DEGREE);
+
+ /* We now create from count and initialize coefficients */
+ update_from_coeffs(h_table[0]);
+ update_from_coeffs(e_table[0]);
+
+ /* Fill the from fields in the nodes */
+ fill_from_fields(h_table[0],H_NODE_DEGREE);
+ fill_from_fields(e_table[0],E_NODE_DEGREE);
+
+ retval.e_nodes=e_table[0];
+ retval.h_nodes=h_table[0];
+
+ free(h_table);
+ free(e_table);
+
+ return retval;
+}
+
+
+
diff --git a/test/ccured_olden/em3d/make_graph.h b/test/ccured_olden/em3d/make_graph.h
new file mode 100644
index 00000000..2433c018
--- /dev/null
+++ b/test/ccured_olden/em3d/make_graph.h
@@ -0,0 +1,13 @@
+/* make_graph.h
+ *
+ * By: Martin C. Carlisle
+ * Date: Feb 23, 1994
+ *
+ */
+
+#include "em3d.h"
+
+/* initialize graph returns a structure with pointers to lists of e and h
+ * nodes.
+ */
+graph_t initialize_graph();
diff --git a/test/ccured_olden/em3d/ssplain.c b/test/ccured_olden/em3d/ssplain.c
new file mode 100644
index 00000000..346c5ed2
--- /dev/null
+++ b/test/ccured_olden/em3d/ssplain.c
@@ -0,0 +1,70 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <limits.h>
+#include <stddef.h>
+#include "ssplain.h"
+
+
+void chatting(char *s, ...)
+{
+ va_list ap;
+ va_start(ap,s);
+ vfprintf(stderr, s, ap);
+ va_end(ap);
+}
+
+
+#ifdef SS_RAND
+double drand48()
+{
+ double d;
+ d = (double) random() / LONG_MAX;
+ return d;
+}
+
+
+long lrand48()
+{
+ long l = random();
+ return l;
+}
+
+void srand48(long seed)
+{
+ srand(seed);
+}
+#endif SS_RAND
+
+
+#ifndef BEFOREBOX
+static unsigned long bytes_allocated = 0;
+static unsigned long allocations = 0;
+
+void*
+ssplain_malloc(int size)
+{
+ allocations++;
+ bytes_allocated+=size;
+ return malloc(size);
+}
+
+void*
+ssplain_calloc(int nelems, int size)
+{
+ void *p;
+ allocations++;
+ bytes_allocated+= nelems * size;
+ p = calloc(nelems, size);
+ if(!p) { printf("Cannot allocate\n"); exit(3); }
+ return p;
+}
+
+void
+ssplain_alloc_stats()
+{
+ chatting("Allocation stats: %d bytes allocated in %d allocations\n",
+ bytes_allocated, allocations);
+}
+#endif
diff --git a/test/ccured_olden/em3d/ssplain.h b/test/ccured_olden/em3d/ssplain.h
new file mode 100644
index 00000000..54f3a3ed
--- /dev/null
+++ b/test/ccured_olden/em3d/ssplain.h
@@ -0,0 +1,128 @@
+#ifndef SS_PLAIN_H
+#define SS_PLAIN_H
+
+void * ssplain_malloc(int size);
+void * ssplain_calloc(int nelems, int size);
+void ssplain_alloc_stats();
+
+/* Convert MP shutdown to exit */
+#define __ShutDown(ID) { ssplain_alloc_stats(); exit(ID); }
+
+/* All these CM-5 things are nops */
+#define CMMD_node_timer_clear(ID)
+#define CMMD_node_timer_start(ID)
+#define CMMD_node_timer_stop(ID)
+#define CMMD_node_timer_elapsed(ID) ((double)0)
+
+#define CMMD_self_address() 0
+
+#define ClearAllStats()
+
+/* define away the CM-5 allocator */
+#include <stdlib.h>
+
+#ifndef ALLOC
+#define ALLOC(NUM,ESIZE) ssplain_calloc (NUM+1,ESIZE)
+#endif ALLOC
+
+#ifndef mymalloc
+#define mymalloc malloc
+#endif mymalloc
+
+/* Get all of these multiprocessing things out of here. */
+/* My id will stay that way */
+#define IDMASK 0xffffffff
+
+/* Nothing is getting tested */
+#ifndef RETEST
+#define RETEST()
+#endif RETEST
+
+#ifndef NOTEST
+#define NOTEST()
+#endif NOTEST
+
+/* Everything is local */
+#ifndef local
+#define local
+#endif local
+
+#ifndef LOCAL
+#define LOCAL(VAL) (VAL)
+#endif LOCAL
+
+#ifndef ISLOCPTR
+#define ISLOCPTR(VAL) (1)
+#endif ISLOCPTR
+
+#ifndef MLOCAL
+#define MLOCAL(VAL)
+#endif MLOCAL
+
+/* An atomic increment is a normal increment */
+#ifndef ATOMICINC
+#define ATOMICINC(PVAL) (*(PVAL) = *(PVAL) + 1)
+#endif ATOMICINC
+
+/* Nothing is migrating anywhere */
+#ifndef MIGRATE
+#define MIGRATE(ID)
+#endif MIGRATE
+
+#ifndef MIGRPH
+#define MIGRPH()
+#endif MIGRPH
+
+#ifndef UNPHASE
+#define UNPHASE()
+#endif UNPHASE
+
+#ifndef PID
+#define PID(VAL) (0)
+#endif PID
+
+/* All these functions */
+#pragma ccuredvararg("chatting", printf(1));
+void chatting(char *s, ...);
+
+/* just define these guys, they are not going to change */
+#define __NumNodes 1
+#define __MyNodeId 0
+#define __NDim 0
+
+typedef struct ss_future_cell_int {
+ int value;
+} future_cell_int;
+
+/* Where are these things for real? */
+#ifdef SS_RAND
+long lrand48();
+double drand48();
+void srand48(long seed);
+#endif SS_RAND
+
+#define MOD(V,M) ((V) & ((M) - 1))
+#define INC_MOD(V,M) (V) = MOD((V) + 1, (M))
+
+/* Prefetch instructions */
+
+/* Use these for 1 lookahead prefetching */
+
+#ifdef OVERHEAD_ONLY
+#define ASSEMBLE_PREFETCH(ARG)
+#define ASSEMBLE_PREFETCH_HEAD(ARG)
+#else !OVERHEAD_ONLY
+
+#define ASSEMBLE_PREFETCH(ARG) \
+ asm ("lw $0, %0" : /* no outputs */ : "g" (ARG))
+
+/* Use these for infinite lookahead prefetching */
+#define ASSEMBLE_PREFETCH_HEAD(ARG) \
+ asm ("lh $0, %0" : /* no outputs */ : "g" (ARG))
+
+#endif OVERHEAD_ONLY
+
+#endif SS_PLAIN_H
+
+
+
diff --git a/test/ccured_olden/em3d/util.c b/test/ccured_olden/em3d/util.c
new file mode 100644
index 00000000..3dc5592d
--- /dev/null
+++ b/test/ccured_olden/em3d/util.c
@@ -0,0 +1,34 @@
+#define CONST_seed 45
+#include <stdlib.h>
+
+/* initialize the random number generator for a particular processor */
+void init_random(int myid)
+{
+ srand48(myid*CONST_seed);
+}
+
+/* return a random number from 0 to range-1 */
+int gen_number(int range)
+{
+ return lrand48() % range;
+}
+
+/* return a random number in [-range+1,range-1] */
+int gen_signed_number(int range)
+{
+ int temp;
+
+ temp = lrand48() % (2*range-1); /* 0..2*range-2 */
+ return temp-(range-1);
+}
+
+/* Generate a double from 0.0 to 1.0 */
+double gen_uniform_double()
+{
+ return drand48();
+}
+
+int check_percent(int percent)
+{
+ return (drand48() < (double) (percent/100.0));
+}
diff --git a/test/ccured_olden/em3d/util.h b/test/ccured_olden/em3d/util.h
new file mode 100644
index 00000000..a6b09f28
--- /dev/null
+++ b/test/ccured_olden/em3d/util.h
@@ -0,0 +1,23 @@
+/* util.h
+ *
+ * headers for randomizing utilities
+ *
+ * By: Martin C. Carlisle
+ * Date: Feb 23, 1994
+ *
+ */
+
+/* initialize the random number generator for a particular processor */
+void init_random(int myid);
+
+/* return a random number from 0 to range-1 */
+int gen_number(int range);
+
+/* return a random number in [-range+1,range-1] */
+int gen_signed_number(int range);
+
+/* Generate a double from 0.0 to 1.0 */
+double gen_uniform_double();
+
+/* Return 1, percent percent of the time and 0 otherwise */
+int check_percent(int percent);