Version 0.3.2-pre1
[fw/sdcc] / sim / ucsim / sim.src / test_mem_speed.cc
index 05a046accf2e6937e6621ca036dcd0f050cf2574..d2359fdf51cd947b1d2ef322e9bceeb846ce4263 100644 (file)
@@ -1,18 +1,66 @@
+#include <signal.h>
+#include <unistd.h>
+#include <stdio.h>
+
 #include "memcl.h"
 
+static int go;
+
+static void
+alarmed(int sig)
+{
+  go= 0;
+  signal(sig, alarmed);
+}
+
 int
 main(void)
 {
   class cl_mem *mem;
+  class cl_m   *m2;
   t_addr a;
   t_mem d;
+  double counter;
+
+  signal(SIGALRM, alarmed);
 
   mem= new cl_mem(MEM_SFR, "egy", 0x10000, 8);
-  for (a= 0; a < mem->size; a++)
-    {
-      t_mem d2= a;
-      mem->write(a, &d2);
-      d= mem->read(a);
-    }
+  go= 1;
+  counter= 0;
+  alarm(10);
+  while (go)
+    for (a= 0; go && a < mem->size; a++)
+      {
+       t_mem d2;
+       for (d2= 0; d2 <= 255; d2++)
+         {
+           mem->write(a, &d2);
+           d= mem->read(a);
+           if (d != d2)
+             printf("%ld written to mem and %ld read back!\n", d2, d);
+           counter+= 1;
+         }
+      }
+  printf("%g operations on classic memory within 10 sec\n", counter);
+
+  m2= new cl_m(0x10000, 8);
+  go= 1;
+  counter= 0;
+  alarm(10);
+  while (go)
+    for (a= 0; go && a < m2->size; a++)
+      {
+       t_mem d2;
+       for (d2= 0; d2 <= 255; d2++)
+         {
+           m2->write(a, &d2);
+           d= m2->read(a);
+           if (d != d2)
+             printf("%ld written to m2 and %ld read back!\n", d2, d);
+           counter+= 1;
+         }
+      }
+  printf("%g operations on new memory within 10 sec\n", counter);
+
   return(0);
 }