diff options
Diffstat (limited to 'tests/include/test_asm_inline_gcc.h')
-rw-r--r-- | tests/include/test_asm_inline_gcc.h | 39 |
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 */ |