diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 760f46b1bd..6d40e13d09 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -57,6 +57,7 @@ list(APPEND kernel_files init.c kheap.c mem_slab.c + float.c thread.c version.c priority_queues.c diff --git a/kernel/float.c b/kernel/float.c new file mode 100644 index 0000000000..69e806d3cd --- /dev/null +++ b/kernel/float.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010-2014 Wind River Systems, Inc. + * Copyright (c) 2024 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include +#include + +int z_impl_k_float_disable(struct k_thread *thread) +{ +#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) + return arch_float_disable(thread); +#else + ARG_UNUSED(thread); + return -ENOTSUP; +#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */ +} + +int z_impl_k_float_enable(struct k_thread *thread, unsigned int options) +{ +#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) + return arch_float_enable(thread, options); +#else + ARG_UNUSED(thread); + ARG_UNUSED(options); + return -ENOTSUP; +#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */ +} + +#ifdef CONFIG_USERSPACE +static inline int z_vrfy_k_float_disable(struct k_thread *thread) +{ + K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD)); + return z_impl_k_float_disable(thread); +} +#include + +static inline int z_vrfy_k_float_enable(struct k_thread *thread, unsigned int options) +{ + K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD)); + return z_impl_k_float_enable(thread, options); +} +#include + +#endif /* CONFIG_USERSPACE */ diff --git a/kernel/thread.c b/kernel/thread.c index 105a753df8..4cb20d30e9 100644 --- a/kernel/thread.c +++ b/kernel/thread.c @@ -751,36 +751,6 @@ FUNC_NORETURN void k_thread_user_mode_enter(k_thread_entry_t entry, #endif } -int z_impl_k_float_disable(struct k_thread *thread) -{ -#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) - return arch_float_disable(thread); -#else - ARG_UNUSED(thread); - return -ENOTSUP; -#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */ -} - -int z_impl_k_float_enable(struct k_thread *thread, unsigned int options) -{ -#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) - return arch_float_enable(thread, options); -#else - ARG_UNUSED(thread); - ARG_UNUSED(options); - return -ENOTSUP; -#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */ -} - -#ifdef CONFIG_USERSPACE -static inline int z_vrfy_k_float_disable(struct k_thread *thread) -{ - K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD)); - return z_impl_k_float_disable(thread); -} -#include -#endif /* CONFIG_USERSPACE */ - #if defined(CONFIG_INIT_STACKS) && defined(CONFIG_THREAD_STACK_INFO) #ifdef CONFIG_STACK_GROWS_UP #error "Unsupported configuration for stack analysis"