View | Details | Raw Unified | Return to bug 239423
Collapse All | Expand All

(-)Makefile (-2 lines)
Lines 10-17 Link Here
10
10
11
LICENSE=	APACHE20
11
LICENSE=	APACHE20
12
12
13
BROKEN_powerpc=	fatal error: sys/platform/ppc.h: No such file or directory
14
15
USES=		cmake compiler:c++11-lang
13
USES=		cmake compiler:c++11-lang
16
USE_GITHUB=	yes
14
USE_GITHUB=	yes
17
GH_PROJECT=	${PORTNAME}-cpp
15
GH_PROJECT=	${PORTNAME}-cpp
(-)files/patch-absl_base_internal_unscaledcycleclock.cc (+54 lines)
Line 0 Link Here
1
--- absl/base/internal/unscaledcycleclock.cc.orig	2019-07-24 12:47:23 UTC
2
+++ absl/base/internal/unscaledcycleclock.cc
3
@@ -20,10 +20,15 @@
4
 #include <intrin.h>
5
 #endif
6
 
7
-#if defined(__powerpc__) || defined(__ppc__)
8
+#if (defined(__powerpc__) || defined(__ppc__)) && !defined(__FreeBSD__)
9
 #include <sys/platform/ppc.h>
10
 #endif
11
 
12
+#ifdef __FreeBSD__
13
+#include <sys/types.h>
14
+#include <sys/sysctl.h>
15
+#endif
16
+
17
 #include "absl/base/internal/sysinfo.h"
18
 
19
 namespace absl {
20
@@ -56,11 +61,34 @@ double UnscaledCycleClock::Frequency() {
21
 #elif defined(__powerpc__) || defined(__ppc__)
22
 
23
 int64_t UnscaledCycleClock::Now() {
24
+#ifndef __FreeBSD__
25
   return __ppc_get_timebase();
26
+#else
27
+  union { long long complete; unsigned int part[2]; } ticks;
28
+  unsigned int tmp;
29
+  asm volatile(
30
+    "0:\n"
31
+    "mftbu %[hi32]\n"
32
+    "mftb %[lo32]\n"
33
+    "mftbu %[tmp]\n"
34
+    "cmpw %[tmp],%[hi32]\n"
35
+    "bne 0b\n"
36
+    : [hi32] "=r"(ticks.part[0]), [lo32] "=r"(ticks.part[1]),
37
+    [tmp] "=r"(tmp)
38
+  );
39
+  return ticks.complete;
40
+#endif
41
 }
42
 
43
 double UnscaledCycleClock::Frequency() {
44
+#ifndef __FreeBSD__
45
   return __ppc_get_timebase_freq();
46
+#else
47
+  long timebaseFrequency = 0;
48
+  size_t length = sizeof(timebaseFrequency);
49
+  sysctlbyname("kern.timecounter.tc.timebase.frequency", &timebaseFrequency, &length, NULL, 0);
50
+  return timebaseFrequency;
51
+#endif
52
 }
53
 
54
 #elif defined(__aarch64__)

Return to bug 239423