Don't use FPU in benchmarks that don't need to use the FPU
authorAndrew Waterman <waterman@cs.berkeley.edu>
Fri, 8 Jul 2016 02:28:47 +0000 (19:28 -0700)
committerAndrew Waterman <waterman@cs.berkeley.edu>
Fri, 8 Jul 2016 02:28:47 +0000 (19:28 -0700)
benchmarks/common/crt.S
benchmarks/common/syscalls.c
benchmarks/common/util.h
benchmarks/dhrystone/dhrystone.h

index 7c8fc19c7df581c5e59f279437f30235653e6caf..2dda05b440b6fab1549e401b5119243d85dbae8e 100644 (file)
@@ -50,29 +50,26 @@ _start:
   li  x30,0
   li  x31,0
 
-  li t0, MSTATUS_FS;   csrs mstatus, t0    # enable FPU
-  li t0, MSTATUS_XS;   csrs mstatus, t0    # enable accelerator
+  # enable FPU and accelerator if present
+  li t0, MSTATUS_FS | MSTATUS_XS
+  csrs mstatus, t0
 
-#ifdef __riscv64
+  # make sure XLEN agrees with compilation choice
   csrr t0, misa
-  # make sure processor supports RV64 if this was compiled for RV64
+#ifdef __riscv64
   bltz t0, 1f
+#else
+  bgez t0, 1f
+#endif
   li a0, 1234
   j tohost_exit
 1:
-#endif
-
-  csrr t0, mstatus
-  li t1, MSTATUS_XS
-  and t1, t0, t1
-  sw t1, have_vec, t2
-
-  ## if that didn't stick, we don't have a FPU, so don't initialize it
-  li t1, MSTATUS_FS
-  and t1, t0, t1
-  beqz t1, 1f
 
 #ifdef __riscv_hard_float
+  # initialize FPU if we have one
+  andi t0, t0, 1 << ('f' - 'a')
+  beqz t0, 1f
+
   fssr    x0
   fmv.s.x f0, x0
   fmv.s.x f1, x0
index 0a43878410bb804556850e6e16490c5c35061129..316f2fee67d870bf4cfad394023b2d4c93e2feac 100644 (file)
@@ -11,9 +11,6 @@
 #define SYS_exit 93
 #define SYS_stats 1234
 
-// initialized in crt.S
-int have_vec;
-
 extern volatile uint64_t tohost;
 extern volatile uint64_t fromhost;
 
index c35bf7cde831b39354e7da5791737694840adb54..22f81cf90177008155cae8ea1df183575c2239d3 100644 (file)
@@ -35,8 +35,6 @@ extern void setStats(int enable);
 
 #include <stdint.h>
 
-extern int have_vec;
-
 #define static_assert(cond) switch(0) { case 0: case !!(long)(cond): ; }
 
 static void printArray(const char name[], int n, const int arr[])
index 89616afd3b45fec691f538ee101e9038db426b6e..e350c177862a8db3f0bdcea626d4e5d2f7e6792a 100644 (file)
@@ -412,7 +412,7 @@ struct tms      time_info;
 #endif /* TIME */
 
 
-#define Mic_secs_Per_Second     1000000.0
+#define Mic_secs_Per_Second     1000000
 #define NUMBER_OF_RUNS         500 /* Default number of runs */
 
 #ifdef  NOSTRUCTASSIGN