blob: 3d417d6ace46ad6ae68b40fa680cc57575e30272 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
--- Top/csound.c.orig 2015-09-29 11:13:27 UTC
+++ Top/csound.c
@@ -60,10 +60,13 @@
#include "cs_par_dispatch.h"
#include "csound_orc_semantics.h"
-#if defined(linux) || defined(__HAIKU__) || defined(__EMSCRIPTEN__)
+#if defined(linux) || defined(__HAIKU__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__)
#define PTHREAD_SPINLOCK_INITIALIZER 0
#endif
+#if defined(__FreeBSD__)
+#include <sys/sysctl.h>
+#endif
#if defined(USE_OPENMP)
#include <omp.h>
#endif /* USE_OPENMP */
@@ -3510,7 +3513,7 @@ void csoundNotifyFileOpened(CSOUND* csou
/* ------------------------------------ */
#if defined(HAVE_RDTSC)
-#if !(defined(LINUX) && defined(__GNUC__) && defined(__i386__))
+#if !(defined(LINUX) && defined(__GNUC__) && defined(__i386__)) || !(defined(__FreeBSD__) && defined(__i386__))
#undef HAVE_RDTSC
#endif
#endif
@@ -3523,6 +3526,13 @@ static double timeResolutionSeconds = -1
static int getTimeResolution(void)
{
#if defined(HAVE_RDTSC)
+#if defined(__FreeBSD__)
+ size_t size;
+ int timeResolutionSeconds;
+ size = sizeof timeResolutionSeconds;
+ sysctlbyname("hw.clockrate", &timeResolutionSeconds, &size, NULL, 0);
+
+#else
FILE *f;
char buf[256];
@@ -3558,9 +3568,14 @@ static int getTimeResolution(void)
}
}
fclose(f);
+#endif /* __FreeBSD__ */
if (UNLIKELY(timeResolutionSeconds <= 0.0)) {
fprintf(stderr, Str("No valid CPU frequency entry "
+#if defined(__FreeBSD__)
+ "was found.\n"));
+#else
"was found in /proc/cpuinfo.\n"));
+#endif /* __FreeBSD__ */
return -1;
}
/* MHz -> seconds */
|