diff --git a/benchmarks/dhrystone/dhrystone_main.c b/benchmarks/dhrystone/dhrystone_main.c
index c948f0e..83409ef 100644
--- a/benchmarks/dhrystone/dhrystone_main.c
+++ b/benchmarks/dhrystone/dhrystone_main.c
@@ -14,8 +14,10 @@
 // void debug_printf(const char* str, ...);
 #define debug_printf printf
 #include "util.h"
+#include "benchmarks/benchmark.h"
 
 #include <alloca.h>
+#include <stdint.h>
 
 #define NUM_COUNTERS 2
 static uintptr_t counters[NUM_COUNTERS];
@@ -69,9 +71,33 @@ long            Begin_Time,
                 User_Time;
 long            Microseconds,
                 Dhrystones_Per_Second;
-
+uint64_t        start_cycle,
+                end_cycle,
+                cycle_result;
 /* end of variables for time measurement */
 
+__attribute__((
+    section(".model_output_header"))) BenchmarkOutputHeader output_header = {
+    .return_code = 0,  // Set by kelvin_start based on return value in main.
+    .iterations = 0,
+    .cycles = 0,
+};
+
+static inline uint64_t mcycle_read() {
+  uint32_t cycle_low = 0;
+  uint32_t cycle_high = 0;
+  uint32_t cycle_high_2 = 0;
+  uint64_t result = 0;
+  asm volatile(
+      "1:"
+      "  csrr %0, mcycleh;"  // Read `mcycleh`.
+      "  csrr %1, mcycle;"   // Read `mcycle`.
+      "  csrr %2, mcycleh;"  // Read `mcycleh` again.
+      "  bne  %0, %2, 1b;"
+      : "=r"(cycle_high), "=r"(cycle_low), "=r"(cycle_high_2)
+      :);
+  return result << 32 | cycle_low;
+}
 
 int main (int argc, char** argv)
 /*****/
@@ -95,6 +121,7 @@ int main (int argc, char** argv)
 
   Next_Ptr_Glob = (Rec_Pointer) alloca (sizeof (Rec_Type));
   Ptr_Glob = (Rec_Pointer) alloca (sizeof (Rec_Type));
+  
 
   Ptr_Glob->Ptr_Comp                    = Next_Ptr_Glob;
   Ptr_Glob->Discr                       = Ident_1;
@@ -133,6 +160,7 @@ int main (int argc, char** argv)
 
     setStats(1);
     Start_Timer();
+    start_cycle = mcycle_read();
 
     for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
     {
@@ -179,6 +207,11 @@ int main (int argc, char** argv)
 	/* Int_1_Loc == 5 */
 
     } /* loop "for Run_Index" */
+    
+    end_cycle = mcycle_read();
+
+
+    
 
     /**************/
     /* Stop timer */
@@ -195,69 +228,22 @@ int main (int argc, char** argv)
       Number_Of_Runs = Number_Of_Runs * 10;
       // printf("\n");
     } else Done = true;
-  }
 
-  debug_printf("Final values of the variables used in the benchmark:\n");
-  debug_printf("\n");
-  debug_printf("Int_Glob:            %d\n", Int_Glob);
-  debug_printf("        should be:   %d\n", 5);
-  debug_printf("Bool_Glob:           %d\n", Bool_Glob);
-  debug_printf("        should be:   %d\n", 1);
-  debug_printf("Ch_1_Glob:           %c\n", Ch_1_Glob);
-  debug_printf("        should be:   %c\n", 'A');
-  debug_printf("Ch_2_Glob:           %c\n", Ch_2_Glob);
-  debug_printf("        should be:   %c\n", 'B');
-  debug_printf("Arr_1_Glob[8]:       %d\n", Arr_1_Glob[8]);
-  debug_printf("        should be:   %d\n", 7);
-  debug_printf("Arr_2_Glob[8][7]:    %d\n", Arr_2_Glob[8][7]);
-  debug_printf("        should be:   Number_Of_Runs + 10\n");
-  debug_printf("Ptr_Glob->\n");
-  debug_printf("  Ptr_Comp:          %d\n", (long) Ptr_Glob->Ptr_Comp);
-  debug_printf("        should be:   (implementation-dependent)\n");
-  debug_printf("  Discr:             %d\n", Ptr_Glob->Discr);
-  debug_printf("        should be:   %d\n", 0);
-  debug_printf("  Enum_Comp:         %d\n", Ptr_Glob->variant.var_1.Enum_Comp);
-  debug_printf("        should be:   %d\n", 2);
-  debug_printf("  Int_Comp:          %d\n", Ptr_Glob->variant.var_1.Int_Comp);
-  debug_printf("        should be:   %d\n", 17);
-  debug_printf("  Str_Comp:          %s\n", Ptr_Glob->variant.var_1.Str_Comp);
-  debug_printf("        should be:   DHRYSTONE PROGRAM, SOME STRING\n");
-  debug_printf("Next_Ptr_Glob->\n");
-  debug_printf("  Ptr_Comp:          %d\n", (long) Next_Ptr_Glob->Ptr_Comp);
-  debug_printf("        should be:   (implementation-dependent), same as above\n");
-  debug_printf("  Discr:             %d\n", Next_Ptr_Glob->Discr);
-  debug_printf("        should be:   %d\n", 0);
-  debug_printf("  Enum_Comp:         %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp);
-  debug_printf("        should be:   %d\n", 1);
-  debug_printf("  Int_Comp:          %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp);
-  debug_printf("        should be:   %d\n", 18);
-  debug_printf("  Str_Comp:          %s\n",
-                                Next_Ptr_Glob->variant.var_1.Str_Comp);
-  debug_printf("        should be:   DHRYSTONE PROGRAM, SOME STRING\n");
-  debug_printf("Int_1_Loc:           %d\n", Int_1_Loc);
-  debug_printf("        should be:   %d\n", 5);
-  debug_printf("Int_2_Loc:           %d\n", Int_2_Loc);
-  debug_printf("        should be:   %d\n", 13);
-  debug_printf("Int_3_Loc:           %d\n", Int_3_Loc);
-  debug_printf("        should be:   %d\n", 7);
-  debug_printf("Enum_Loc:            %d\n", Enum_Loc);
-  debug_printf("        should be:   %d\n", 1);
-  debug_printf("Str_1_Loc:           %s\n", Str_1_Loc);
-  debug_printf("        should be:   DHRYSTONE PROGRAM, 1'ST STRING\n");
-  debug_printf("Str_2_Loc:           %s\n", Str_2_Loc);
-  debug_printf("        should be:   DHRYSTONE PROGRAM, 2'ND STRING\n");
-  debug_printf("\n");
+    cycle_result = end_cycle - start_cycle ;
 
+    output_header.iterations = NUMBER_OF_RUNS;
+    output_header.cycles = cycle_result;
+    asm volatile("flushall");
 
-  Microseconds = ((User_Time / Number_Of_Runs) * Mic_secs_Per_Second) / HZ;
-  Dhrystones_Per_Second = (HZ * Number_Of_Runs) / User_Time;
-  
-  printf(" Begin time %ld\n", Begin_Time);
-  printf(" End time %ld\n", End_Time);
-  printf("Microseconds for one run through Dhrystone: %ld\n", Microseconds);
-  printf("Dhrystones per Second:                      %ld\n", Dhrystones_Per_Second);
+    // if this test is running in a simulator
+    uint64_t average_cycles = cycle_result/NUMBER_OF_RUNS;
+    printf("Total Iterations: %ld", output_header.iterations);
+    printf("Total Cycles: %ld ", output_header.cycles);
+    printf("Average Cycles per Iteration: %ld ", average_cycles);
+    printf("========== End Benchmark ==========");
+    return 0;
+  }
 
-  return 0;
 }
 
 
