KleidiCV Coverage Report


Directory: ./
File: kleidicv/src/arithmetics/add_sc.h
Date: 2025-09-25 14:13:34
Exec Total Coverage
Lines: 15 15 100.0%
Functions: 32 32 100.0%
Branches: 144 144 100.0%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2023 - 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 #ifndef ADD_SC_H
6 #define ADD_SC_H
7
8 #include <limits>
9
10 #include "kleidicv/kleidicv.h"
11 #include "kleidicv/sve2.h"
12
13 namespace KLEIDICV_TARGET_NAMESPACE {
14
15 template <typename ScalarType>
16 class SaturatingAdd final : public UnrollTwice {
17 public:
18 using ContextType = Context;
19 using VecTraits = KLEIDICV_TARGET_NAMESPACE::VecTraits<ScalarType>;
20 using VectorType = typename VecTraits::VectorType;
21
22 20400 VectorType vector_path(ContextType ctx, VectorType src_a,
23 VectorType src_b) KLEIDICV_STREAMING {
24 20400 return svqadd_m(ctx.predicate(), src_a, src_b);
25 }
26 }; // end of class SaturatingAdd<ScalarType>
27
28 template <typename T>
29 1284 static kleidicv_error_t saturating_add_sc(const T *src_a, size_t src_a_stride,
30 const T *src_b, size_t src_b_stride,
31 T *dst, size_t dst_stride,
32 size_t width,
33 size_t height) KLEIDICV_STREAMING {
34
32/32
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 154 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 154 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 154 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 154 times.
✓ Branch 8 taken 4 times.
✓ Branch 9 taken 158 times.
✓ Branch 10 taken 4 times.
✓ Branch 11 taken 158 times.
✓ Branch 12 taken 4 times.
✓ Branch 13 taken 158 times.
✓ Branch 14 taken 4 times.
✓ Branch 15 taken 158 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 158 times.
✓ Branch 18 taken 4 times.
✓ Branch 19 taken 158 times.
✓ Branch 20 taken 4 times.
✓ Branch 21 taken 158 times.
✓ Branch 22 taken 4 times.
✓ Branch 23 taken 158 times.
✓ Branch 24 taken 4 times.
✓ Branch 25 taken 158 times.
✓ Branch 26 taken 4 times.
✓ Branch 27 taken 158 times.
✓ Branch 28 taken 4 times.
✓ Branch 29 taken 158 times.
✓ Branch 30 taken 4 times.
✓ Branch 31 taken 158 times.
1284 CHECK_POINTER_AND_STRIDE(src_a, src_a_stride, height);
35
32/32
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 152 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 152 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 152 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 152 times.
✓ Branch 8 taken 4 times.
✓ Branch 9 taken 154 times.
✓ Branch 10 taken 4 times.
✓ Branch 11 taken 154 times.
✓ Branch 12 taken 4 times.
✓ Branch 13 taken 154 times.
✓ Branch 14 taken 4 times.
✓ Branch 15 taken 154 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 154 times.
✓ Branch 18 taken 4 times.
✓ Branch 19 taken 154 times.
✓ Branch 20 taken 4 times.
✓ Branch 21 taken 154 times.
✓ Branch 22 taken 4 times.
✓ Branch 23 taken 154 times.
✓ Branch 24 taken 4 times.
✓ Branch 25 taken 154 times.
✓ Branch 26 taken 4 times.
✓ Branch 27 taken 154 times.
✓ Branch 28 taken 4 times.
✓ Branch 29 taken 154 times.
✓ Branch 30 taken 4 times.
✓ Branch 31 taken 154 times.
1256 CHECK_POINTER_AND_STRIDE(src_b, src_b_stride, height);
36
32/32
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 150 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 150 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 150 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 150 times.
✓ Branch 8 taken 4 times.
✓ Branch 9 taken 150 times.
✓ Branch 10 taken 4 times.
✓ Branch 11 taken 150 times.
✓ Branch 12 taken 4 times.
✓ Branch 13 taken 150 times.
✓ Branch 14 taken 4 times.
✓ Branch 15 taken 150 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 150 times.
✓ Branch 18 taken 4 times.
✓ Branch 19 taken 150 times.
✓ Branch 20 taken 4 times.
✓ Branch 21 taken 150 times.
✓ Branch 22 taken 4 times.
✓ Branch 23 taken 150 times.
✓ Branch 24 taken 4 times.
✓ Branch 25 taken 150 times.
✓ Branch 26 taken 4 times.
✓ Branch 27 taken 150 times.
✓ Branch 28 taken 4 times.
✓ Branch 29 taken 150 times.
✓ Branch 30 taken 4 times.
✓ Branch 31 taken 150 times.
1228 CHECK_POINTER_AND_STRIDE(dst, dst_stride, height);
37
48/48
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 148 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 146 times.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 146 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 148 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 146 times.
✓ Branch 10 taken 4 times.
✓ Branch 11 taken 146 times.
✓ Branch 12 taken 2 times.
✓ Branch 13 taken 148 times.
✓ Branch 14 taken 2 times.
✓ Branch 15 taken 146 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 146 times.
✓ Branch 18 taken 2 times.
✓ Branch 19 taken 148 times.
✓ Branch 20 taken 2 times.
✓ Branch 21 taken 146 times.
✓ Branch 22 taken 4 times.
✓ Branch 23 taken 146 times.
✓ Branch 24 taken 2 times.
✓ Branch 25 taken 148 times.
✓ Branch 26 taken 2 times.
✓ Branch 27 taken 146 times.
✓ Branch 28 taken 4 times.
✓ Branch 29 taken 146 times.
✓ Branch 30 taken 2 times.
✓ Branch 31 taken 148 times.
✓ Branch 32 taken 2 times.
✓ Branch 33 taken 146 times.
✓ Branch 34 taken 4 times.
✓ Branch 35 taken 146 times.
✓ Branch 36 taken 2 times.
✓ Branch 37 taken 148 times.
✓ Branch 38 taken 2 times.
✓ Branch 39 taken 146 times.
✓ Branch 40 taken 4 times.
✓ Branch 41 taken 146 times.
✓ Branch 42 taken 2 times.
✓ Branch 43 taken 148 times.
✓ Branch 44 taken 2 times.
✓ Branch 45 taken 146 times.
✓ Branch 46 taken 4 times.
✓ Branch 47 taken 146 times.
1200 CHECK_IMAGE_SIZE(width, height);
38
39 1168 SaturatingAdd<T> operation;
40 1168 Rectangle rect{width, height};
41 1168 Rows<const T> src_a_rows{src_a, src_a_stride};
42 1168 Rows<const T> src_b_rows{src_b, src_b_stride};
43 1168 Rows<T> dst_rows{dst, dst_stride};
44 1168 apply_operation_by_rows(operation, rect, src_a_rows, src_b_rows, dst_rows);
45 1168 return KLEIDICV_OK;
46 1284 }
47
48 } // namespace KLEIDICV_TARGET_NAMESPACE
49
50 #endif // ADD_SC_H
51