| /* |
| * Copyright (c) Meta Platforms, Inc. and affiliates. |
| * All rights reserved. |
| * |
| * This source code is licensed under the BSD-style license found in the |
| * LICENSE file in the root directory of this source tree. |
| */ |
| |
| #pragma once |
| |
| #include <executorch/kernels/optimized/vec/vec256/vec256.h> |
| |
| namespace executorch { |
| namespace vec { |
| |
| // See Note [CPU_CAPABILITY namespace] |
| inline namespace CPU_CAPABILITY { |
| |
| inline Vectorized<bool> convert_to_bool(Vectorized<int8_t> x) { |
| __at_align__ bool buffer[x.size()]; |
| x.ne(Vectorized<int8_t>(0)).store(buffer); |
| |
| Vectorized<bool> ret; |
| static_assert(x.size() == ret.size(), ""); |
| std::memcpy(ret, buffer, ret.size() * sizeof(bool)); |
| return ret; |
| } |
| |
| template <> |
| inline Vectorized<bool> Vectorized<bool>::loadu(const void* ptr) { |
| // See NOTE [Loading boolean values] |
| return convert_to_bool(Vectorized<int8_t>::loadu(ptr)); |
| } |
| |
| template <> |
| inline Vectorized<bool> Vectorized<bool>::loadu(const void* ptr, int64_t count) { |
| // See NOTE [Loading boolean values] |
| return convert_to_bool(Vectorized<int8_t>::loadu(ptr, count)); |
| } |
| |
| } // namespace CPU_CAPABILITY |
| |
| } // namespace vec |
| } // namespace executorch |