diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-17 10:45:15 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-17 10:45:15 +0100 |
| commit | 5abec5514a0745b8032d8c60f5752529e4a13eaa (patch) | |
| tree | c91152ab4cc3a56fbb74d44dc801be5cb8ad3787 /dev/lib/simd/simd.hpp | |
| parent | c6b7510cdb9350c4e129bfcd7959efc4daee9df6 (diff) | |
| parent | 4700f4d91c342276cc2663f149ed7a8b4e8f3498 (diff) | |
Merge pull request #8 from amlel-el-mahrouss/developv1.0.45
release: Mojave
Diffstat (limited to 'dev/lib/simd/simd.hpp')
| -rw-r--r-- | dev/lib/simd/simd.hpp | 60 |
1 files changed, 60 insertions, 0 deletions
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 |
