aboutsummaryrefslogtreecommitdiff
path: root/src/core/NEON/wrapper
diff options
context:
space:
mode:
authorSang-Hoon Park <sang-hoon.park@arm.com>2021-01-07 16:59:32 +0000
committerSang-Hoon Park <sang-hoon.park@arm.com>2021-01-12 15:51:46 +0000
commit5db75c350ca0c0d8965a894d7e1a371746a2102b (patch)
tree82cb706b8966d2f405d48f02d936610d9b2558d6 /src/core/NEON/wrapper
parent23adc4cf40936ffe6c0e126ac83c8085b946bde4 (diff)
downloadComputeLibrary-5db75c350ca0c0d8965a894d7e1a371746a2102b.tar.gz
Add SVE support for non-quantized elementwise operations
SVE kernels are added to all previously supported arithmetic and comparison operations with exception of S16 arithmetic operations due to complexity of widening and narrowing of integer vectors. Partially implements: COMPMID-3872 Change-Id: Ic433eb7227dfcfd0d1429f18acebec2d934ca8bd Signed-off-by: Sang-Hoon Park <sang-hoon.park@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4778 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com> Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/core/NEON/wrapper')
-rw-r--r--src/core/NEON/wrapper/intrinsics/intrinsics.h1
-rw-r--r--src/core/NEON/wrapper/svtraits.h70
2 files changed, 71 insertions, 0 deletions
diff --git a/src/core/NEON/wrapper/intrinsics/intrinsics.h b/src/core/NEON/wrapper/intrinsics/intrinsics.h
index 4c7b674e2e..871d9cc5ac 100644
--- a/src/core/NEON/wrapper/intrinsics/intrinsics.h
+++ b/src/core/NEON/wrapper/intrinsics/intrinsics.h
@@ -79,6 +79,7 @@
#include "src/core/NEON/wrapper/intrinsics/svdup_n.h"
#include "src/core/NEON/wrapper/intrinsics/svexp.h"
#include "src/core/NEON/wrapper/intrinsics/svlog.h"
+#include "src/core/NEON/wrapper/intrinsics/svpow.h"
#include "src/core/NEON/wrapper/intrinsics/svptrue.h"
#include "src/core/NEON/wrapper/intrinsics/svqadd.h"
#include "src/core/NEON/wrapper/intrinsics/svsin.h"
diff --git a/src/core/NEON/wrapper/svtraits.h b/src/core/NEON/wrapper/svtraits.h
new file mode 100644
index 0000000000..465983d16f
--- /dev/null
+++ b/src/core/NEON/wrapper/svtraits.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2021 Arm Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef SRC_CORE_NEON_WRAPPER_SVTRAITS_H
+#define SRC_CORE_NEON_WRAPPER_SVTRAITS_H
+#if defined(__ARM_FEATURE_SVE)
+#include "src/core/NEON/SVEMath.h"
+#include <arm_sve.h>
+
+namespace arm_compute
+{
+namespace wrapper
+{
+template <typename T>
+struct sve_scalar;
+template <typename T>
+struct sve_vector;
+
+#define DEFINE_TYPES(stype) \
+ template <> \
+ struct sve_scalar<sv##stype> \
+ { \
+ using type = stype; \
+ }; \
+ template <> \
+ struct sve_vector<stype> \
+ { \
+ using type = sv##stype; \
+ };
+
+DEFINE_TYPES(int8_t)
+DEFINE_TYPES(uint8_t)
+DEFINE_TYPES(int16_t)
+DEFINE_TYPES(uint16_t)
+DEFINE_TYPES(int32_t)
+DEFINE_TYPES(uint32_t)
+DEFINE_TYPES(int64_t)
+DEFINE_TYPES(uint64_t)
+DEFINE_TYPES(float16_t)
+DEFINE_TYPES(float32_t)
+DEFINE_TYPES(float64_t)
+DEFINE_TYPES(bfloat16_t)
+
+#undef DEFINE_TYPES
+
+} // namespace wrapper
+} // namespace arm_compute
+
+#endif /* defined(__ARM_FEATURE_SVE) */
+#endif /* #ifndef SRC_CORE_NEON_WRAPPER_SVTRAITS_H */