GCC Code Coverage Report


Directory: ./
File: kernels/volk/volk_32f_8u_polarbutterflypuppet_32f.h
Date: 2023-10-23 23:10:04
Exec Total Coverage
Lines: 59 59 100.0%
Functions: 7 7 100.0%
Branches: 10 10 100.0%

Line Branch Exec Source
1 /* -*- c++ -*- */
2 /*
3 * Copyright 2015 Free Software Foundation, Inc.
4 *
5 * This file is part of VOLK
6 *
7 * SPDX-License-Identifier: LGPL-3.0-or-later
8 */
9
10 /*
11 * This puppet is for VOLK tests only.
12 * For documentation see 'kernels/volk/volk_32f_8u_polarbutterfly_32f.h'
13 */
14
15 #ifndef VOLK_KERNELS_VOLK_VOLK_32F_8U_POLARBUTTERFLYPUPPET_32F_H_
16 #define VOLK_KERNELS_VOLK_VOLK_32F_8U_POLARBUTTERFLYPUPPET_32F_H_
17
18 #include <volk/volk_32f_8u_polarbutterfly_32f.h>
19 #include <volk/volk_8u_x3_encodepolar_8u_x2.h>
20 #include <volk/volk_8u_x3_encodepolarpuppet_8u.h>
21
22
23 6 static inline void sanitize_bytes(unsigned char* u, const int elements)
24 {
25 int i;
26 6 unsigned char* u_ptr = u;
27
2/2
✓ Branch 0 taken 786426 times.
✓ Branch 1 taken 6 times.
786432 for (i = 0; i < elements; i++) {
28 786426 *u_ptr = (*u_ptr & 0x01);
29 786426 u_ptr++;
30 }
31 6 }
32
33 12 static inline void clean_up_intermediate_values(float* llrs,
34 unsigned char* u,
35 const int frame_size,
36 const int elements)
37 {
38 12 memset(u + frame_size, 0, sizeof(unsigned char) * (elements - frame_size));
39 12 memset(llrs + frame_size, 0, sizeof(float) * (elements - frame_size));
40 12 }
41
42 static inline void
43 6 generate_error_free_input_vector(float* llrs, unsigned char* u, const int frame_size)
44 {
45 6 memset(u, 0, frame_size);
46 6 unsigned char* target = u + frame_size;
47 6 volk_8u_x2_encodeframepolar_8u_generic(target, u + 2 * frame_size, frame_size);
48 6 float* ft = llrs;
49 int i;
50
2/2
✓ Branch 0 taken 24576 times.
✓ Branch 1 taken 6 times.
24582 for (i = 0; i < frame_size; i++) {
51 24576 *ft = (-2 * ((float)*target++)) + 1.0f;
52 24576 ft++;
53 }
54 6 }
55
56 static inline void
57 print_llr_tree(const float* llrs, const int frame_size, const int frame_exp)
58 {
59 int s, e;
60 for (s = 0; s < frame_size; s++) {
61 for (e = 0; e < frame_exp + 1; e++) {
62 printf("%+4.2f ", llrs[e * frame_size + s]);
63 }
64 printf("\n");
65 if ((s + 1) % 8 == 0) {
66 printf("\n");
67 }
68 }
69 }
70
71 6 static inline int maximum_frame_size(const int elements)
72 {
73 6 unsigned int frame_size = next_lower_power_of_two(elements);
74 6 unsigned int frame_exp = log2_of_power_of_2(frame_size);
75 6 return next_lower_power_of_two(frame_size / frame_exp);
76 }
77
78 #ifdef LV_HAVE_GENERIC
79 2 static inline void volk_32f_8u_polarbutterflypuppet_32f_generic(float* llrs,
80 const float* input,
81 unsigned char* u,
82 const int elements)
83 {
84 2 unsigned int frame_size = maximum_frame_size(elements);
85 2 unsigned int frame_exp = log2_of_power_of_2(frame_size);
86
87 2 sanitize_bytes(u, elements);
88 2 clean_up_intermediate_values(llrs, u, frame_size, elements);
89 2 generate_error_free_input_vector(llrs + frame_exp * frame_size, u, frame_size);
90
91 2 unsigned int u_num = 0;
92
2/2
✓ Branch 0 taken 8192 times.
✓ Branch 1 taken 2 times.
8194 for (; u_num < frame_size; u_num++) {
93 8192 volk_32f_8u_polarbutterfly_32f_generic(llrs, u, frame_exp, 0, u_num, u_num);
94 8192 u[u_num] = llrs[u_num] > 0 ? 0 : 1;
95 }
96
97 2 clean_up_intermediate_values(llrs, u, frame_size, elements);
98 2 }
99 #endif /* LV_HAVE_GENERIC */
100
101 #ifdef LV_HAVE_AVX
102 2 static inline void volk_32f_8u_polarbutterflypuppet_32f_u_avx(float* llrs,
103 const float* input,
104 unsigned char* u,
105 const int elements)
106 {
107 2 unsigned int frame_size = maximum_frame_size(elements);
108 2 unsigned int frame_exp = log2_of_power_of_2(frame_size);
109
110 2 sanitize_bytes(u, elements);
111 2 clean_up_intermediate_values(llrs, u, frame_size, elements);
112 2 generate_error_free_input_vector(llrs + frame_exp * frame_size, u, frame_size);
113
114 2 unsigned int u_num = 0;
115
2/2
✓ Branch 0 taken 8192 times.
✓ Branch 1 taken 2 times.
8194 for (; u_num < frame_size; u_num++) {
116 8192 volk_32f_8u_polarbutterfly_32f_u_avx(llrs, u, frame_exp, 0, u_num, u_num);
117 8192 u[u_num] = llrs[u_num] > 0 ? 0 : 1;
118 }
119
120 2 clean_up_intermediate_values(llrs, u, frame_size, elements);
121 2 }
122 #endif /* LV_HAVE_AVX */
123
124 #ifdef LV_HAVE_AVX2
125 2 static inline void volk_32f_8u_polarbutterflypuppet_32f_u_avx2(float* llrs,
126 const float* input,
127 unsigned char* u,
128 const int elements)
129 {
130 2 unsigned int frame_size = maximum_frame_size(elements);
131 2 unsigned int frame_exp = log2_of_power_of_2(frame_size);
132
133 2 sanitize_bytes(u, elements);
134 2 clean_up_intermediate_values(llrs, u, frame_size, elements);
135 2 generate_error_free_input_vector(llrs + frame_exp * frame_size, u, frame_size);
136
137 2 unsigned int u_num = 0;
138
2/2
✓ Branch 0 taken 8192 times.
✓ Branch 1 taken 2 times.
8194 for (; u_num < frame_size; u_num++) {
139 8192 volk_32f_8u_polarbutterfly_32f_u_avx2(llrs, u, frame_exp, 0, u_num, u_num);
140 8192 u[u_num] = llrs[u_num] > 0 ? 0 : 1;
141 }
142
143 2 clean_up_intermediate_values(llrs, u, frame_size, elements);
144 2 }
145 #endif /* LV_HAVE_AVX2 */
146
147
148 #endif /* VOLK_KERNELS_VOLK_VOLK_32F_8U_POLARBUTTERFLYPUPPET_32F_H_ */
149