summaryrefslogtreecommitdiff
path: root/tests/include/test_asm_inline_gcc.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/include/test_asm_inline_gcc.h')
-rw-r--r--tests/include/test_asm_inline_gcc.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/include/test_asm_inline_gcc.h b/tests/include/test_asm_inline_gcc.h
new file mode 100644
index 000000000..647631960
--- /dev/null
+++ b/tests/include/test_asm_inline_gcc.h
@@ -0,0 +1,39 @@
+/* GCC specific test inline assembler functions and macros */
+
+/*
+ * Copyright (c) 2015, Wind River Systems, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#ifndef _TEST_ASM_INLINE_GCC_H
+#define _TEST_ASM_INLINE_GCC_H
+
+#if !defined(__GNUC__)
+#error test_asm_inline_gcc.h goes only with GCC
+#endif
+
+#if defined(CONFIG_X86)
+static inline void timestamp_serialize(void)
+{
+ __asm__ __volatile__ (/* serialize */
+ "xorl %%eax,%%eax;\n\t"
+ "cpuid;\n\t"
+ :
+ :
+ : "%eax", "%ebx", "%ecx", "%edx");
+}
+#elif defined(CONFIG_CPU_CORTEX_M)
+#include <arch/arm/cortex_m/cmsis.h>
+static inline void timestamp_serialize(void)
+{
+ /* isb is avaialble in all Cortex-M */
+ __ISB();
+}
+#elif defined(CONFIG_CPU_ARCV2)
+#define timestamp_serialize()
+#else
+#error implementation of timestamp_serialize() not provided for your CPU target
+#endif
+
+#endif /* _TEST_ASM_INLINE_GCC_H */