diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-17 10:41:20 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-17 10:41:20 +0100 |
| commit | 991379947d661da604dcb662ce325836291f4df3 (patch) | |
| tree | 8ad57f838ee872c8f48f8a02c11ae45a7fa86399 /dev/lib/simd | |
| parent | 1d943dcfcddb68f489c126b1e0df41170287e63d (diff) | |
| parent | 845958a457898343de40ea12953bf9ea3606d69b (diff) | |
Merge branch 'develop' of github.com:snupowered-oss/scl into snupowered-oss-develop
Diffstat (limited to 'dev/lib/simd')
| -rw-r--r-- | dev/lib/simd/basic_simd.hpp | 47 | ||||
| -rw-r--r-- | dev/lib/simd/simd.hpp | 60 |
2 files changed, 107 insertions, 0 deletions
diff --git a/dev/lib/simd/basic_simd.hpp b/dev/lib/simd/basic_simd.hpp new file mode 100644 index 0000000..f14d977 --- /dev/null +++ b/dev/lib/simd/basic_simd.hpp @@ -0,0 +1,47 @@ +/* + * File: simd/basic_simd.hpp + * Purpose: Basic SIMD backend C++ library. + * Author: Amlal El Mahrouss (amlal@nekernel.org) + * Copyright 2025, Amlal El Mahrouss, licensed under the BSL 1.0 license. + */ + +#pragma once + +#include <lib/core/includes.hpp> + +#ifdef __x86_64__ +#include <immintrin.h> +using simd_type = __m256; +#endif + +#ifdef __aarch64__ +#include <arm_neon.h> +using simd_type = float32x4_t; +#endif + +namespace ocl::snu::simd +{ + struct basic_simd_backend final + { + struct simd_traits final + { + simd_type __val; + + private: + static bool bad; + friend class basic_simd_backend; + }; + + using register_type = simd_traits; + + const bool& is_bad() noexcept + { + return register_type::bad; + } + + std::basic_string<char> isa() + { + return "basic_simd_backend"; + } + }; +} // namespace ocl::snu::simd diff --git a/dev/lib/simd/simd.hpp b/dev/lib/simd/simd.hpp new file mode 100644 index 0000000..e571b23 --- /dev/null +++ b/dev/lib/simd/simd.hpp @@ -0,0 +1,60 @@ +/* + * File: simd/simd.hpp + * Purpose: SIMD C++ library. + * Author: Amlal El Mahrouss (amlal@nekernel.org) + * Copyright 2025, Amlal El Mahrouss, licensed under the BSL 1.0 license. + */ + +#pragma once + +#include <lib/core/includes.hpp> + +/// @author Amlal El Mahrouss +/// @brief Basic SIMD processor. + +namespace ocl::snu::simd +{ + template <typename backend_type> + class basic_simd_processor + { + private: + backend_type processor_; + + enum opcode + { + bad, + add, + mul, + div, + }; + + public: + basic_simd_processor() = default; + virtual ~basic_simd_processor() = default; + + basic_simd_processor& operator=(const basic_simd_processor&) = delete; + basic_simd_processor(const basic_simd_processor&) = delete; + + typename backend_type::register_type& call(const opcode& op, typename backend_type::register_type& lhs, typename backend_type::register_type& rhs) + { + switch (op) + { + case add: + return processor_.add(lhs, rhs); + case mul: + return processor_.mul(lhs, rhs); + case div: + return processor_.div(lhs, rhs); + default: + break; + } + + return processor_.is_bad(); + } + + std::basic_string<char> isa() + { + return processor_.isa(); + } + }; +} // namespace ocl::snu::simd |
