aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch/x86
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2018-05-24 16:54:46 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-05-28 18:08:02 +0300
commitf4f4dcee96e534c0badc28258ad09ef50b35ec76 (patch)
treee675eac2558f12b6b6dd2fba914030c6ea4849ae /platform/linux-generic/arch/x86
parentd6e4b3df266ee1c847763ba50fa802d9e9e62b5e (diff)
linux-gen: cpu: inline cpu cycle functions on x86
Moved cpu cycle and pause functions into arch/x86/odp_arch_cpu_inlines.h. Uncommented pause function in spec file and removed it from ABI file. It's safer for ABI compat mode to not have code included into ABI spec files. Other architectures use the default odp_arch_cpu_inlines.h, which does not change the current implementation. Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org> Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/arch/x86')
-rw-r--r--platform/linux-generic/arch/x86/odp/api/abi/cpu.h10
-rw-r--r--platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h48
-rw-r--r--platform/linux-generic/arch/x86/odp_cpu_cycles.c27
-rw-r--r--platform/linux-generic/arch/x86/odp_global_time.c3
4 files changed, 53 insertions, 35 deletions
diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu.h
index 523fa99e5..9224af9a0 100644
--- a/platform/linux-generic/arch/x86/odp/api/abi/cpu.h
+++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu.h
@@ -13,14 +13,8 @@ extern "C" {
#define ODP_CACHE_LINE_SIZE 64
-static inline void odp_cpu_pause(void)
-{
-#ifdef __SSE2__
- __asm__ __volatile__ ("pause");
-#else
- __asm__ __volatile__ ("rep; nop");
-#endif
-}
+/* Inlined functions for non-ABI compat mode */
+#include <odp/api/plat/cpu_inlines.h>
#ifdef __cplusplus
}
diff --git a/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h b/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h
new file mode 100644
index 000000000..63be3da65
--- /dev/null
+++ b/platform/linux-generic/arch/x86/odp/api/abi/cpu_inlines.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2018, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ODP_ARCH_CPU_INLINES_H_
+#define ODP_ARCH_CPU_INLINES_H_
+
+#include <stdint.h>
+
+_ODP_INLINE void odp_cpu_pause(void)
+{
+#ifdef __SSE2__
+ __asm__ __volatile__ ("pause");
+#else
+ __asm__ __volatile__ ("rep; nop");
+#endif
+}
+
+_ODP_INLINE uint64_t odp_cpu_cycles(void)
+{
+ union {
+ uint64_t tsc_64;
+ struct {
+ uint32_t lo_32;
+ uint32_t hi_32;
+ };
+ } tsc;
+
+ __asm__ __volatile__ ("rdtsc" :
+ "=a" (tsc.lo_32),
+ "=d" (tsc.hi_32) : : "memory");
+
+ return tsc.tsc_64;
+}
+
+_ODP_INLINE uint64_t odp_cpu_cycles_max(void)
+{
+ return UINT64_MAX;
+}
+
+_ODP_INLINE uint64_t odp_cpu_cycles_resolution(void)
+{
+ return 1;
+}
+
+#endif
diff --git a/platform/linux-generic/arch/x86/odp_cpu_cycles.c b/platform/linux-generic/arch/x86/odp_cpu_cycles.c
index 4e50b6da0..c7d97a764 100644
--- a/platform/linux-generic/arch/x86/odp_cpu_cycles.c
+++ b/platform/linux-generic/arch/x86/odp_cpu_cycles.c
@@ -10,33 +10,6 @@
#include <odp_init_internal.h>
#include <odp_debug_internal.h>
-uint64_t odp_cpu_cycles(void)
-{
- union {
- uint64_t tsc_64;
- struct {
- uint32_t lo_32;
- uint32_t hi_32;
- };
- } tsc;
-
- __asm__ __volatile__ ("rdtsc" :
- "=a" (tsc.lo_32),
- "=d" (tsc.hi_32) : : "memory");
-
- return tsc.tsc_64;
-}
-
-uint64_t odp_cpu_cycles_max(void)
-{
- return UINT64_MAX;
-}
-
-uint64_t odp_cpu_cycles_resolution(void)
-{
- return 1;
-}
-
int _odp_cpu_cycles_init_global(void)
{
if (cpu_flags_has_rdtsc() == 0) {
diff --git a/platform/linux-generic/arch/x86/odp_global_time.c b/platform/linux-generic/arch/x86/odp_global_time.c
index 70a1a1a7a..da22d45a5 100644
--- a/platform/linux-generic/arch/x86/odp_global_time.c
+++ b/platform/linux-generic/arch/x86/odp_global_time.c
@@ -15,6 +15,9 @@
#include <odp_debug_internal.h>
#include <odp_arch_time_internal.h>
+/* Inlined API functions */
+#include <odp/api/plat/cpu_inlines.h>
+
uint64_t cpu_global_time(void)
{
return odp_cpu_cycles();