GCC Code Coverage Report


Directory: ./
File: kernels/volk/volk_8u_x3_encodepolar_8u_x2.h
Date: 2023-10-23 23:10:04
Exec Total Coverage
Lines: 24 24 100.0%
Functions: 6 6 100.0%
Branches: 4 4 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 * \page volk_8u_x3_encodepolar_8u
12 *
13 * \b Overview
14 *
15 * encode given data for POLAR code
16 *
17 * <b>Dispatcher Prototype</b>
18 * \code
19 * void volk_8u_x3_encodepolar_8u(unsigned char* frame, const unsigned char*
20 * frozen_bit_mask, const unsigned char* frozen_bits, const unsigned char* info_bits,
21 * unsigned int frame_size, unsigned int info_bit_size) \endcode
22 *
23 * \b Inputs
24 * \li frame: buffer for encoded frame
25 * \li frozen_bit_mask: bytes with 0xFF for frozen bit positions or 0x00 otherwise.
26 * \li frozen_bits: values of frozen bits, 1 bit per byte
27 * \li info_bits: info bit values, 1 bit per byte
28 * \li frame_size: power of 2 value for frame size.
29 * \li info_bit_size: number of info bits in a frame
30 *
31 * \b Outputs
32 * \li frame: polar encoded frame.
33 *
34 * \b Example
35 * \code
36 * int frame_exp = 10;
37 * int frame_size = 0x01 << frame_exp;
38 * int num_info_bits = frame_size;
39 * int num_frozen_bits = frame_size - num_info_bits;
40 *
41 * // function sets frozenbit positions to 0xff and all others to 0x00.
42 * unsigned char* frozen_bit_mask = get_frozen_bit_mask(frame_size, num_frozen_bits);
43 *
44 * // set elements to desired values. Typically all zero.
45 * unsigned char* frozen_bits = (unsigned char) volk_malloc(sizeof(unsigned char) *
46 * num_frozen_bits, volk_get_alignment());
47 *
48 * unsigned char* frame = (unsigned char) volk_malloc(sizeof(unsigned char) * frame_size,
49 * volk_get_alignment()); unsigned char* temp = (unsigned char)
50 * volk_malloc(sizeof(unsigned char) * frame_size, volk_get_alignment());
51 *
52 * unsigned char* info_bits = get_info_bits_to_encode(num_info_bits);
53 *
54 * volk_8u_x3_encodepolar_8u_x2_generic(frame, temp, frozen_bit_mask, frozen_bits,
55 * info_bits, frame_size);
56 *
57 * volk_free(frozen_bit_mask);
58 * volk_free(frozen_bits);
59 * volk_free(frame);
60 * volk_free(temp);
61 * volk_free(info_bits);
62 * \endcode
63 */
64
65 #ifndef VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_U_H_
66 #define VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_U_H_
67 #include <stdio.h>
68 #include <volk/volk_8u_x2_encodeframepolar_8u.h>
69
70 10 static inline void interleave_frozen_and_info_bits(unsigned char* target,
71 const unsigned char* frozen_bit_mask,
72 const unsigned char* frozen_bits,
73 const unsigned char* info_bits,
74 const unsigned int frame_size)
75 {
76 unsigned int bit;
77
2/2
✓ Branch 0 taken 655360 times.
✓ Branch 1 taken 10 times.
655370 for (bit = 0; bit < frame_size; ++bit) {
78
2/2
✓ Branch 0 taken 327145 times.
✓ Branch 1 taken 328215 times.
655360 *target++ = *frozen_bit_mask++ ? *frozen_bits++ : *info_bits++;
79 }
80 10 }
81
82 #ifdef LV_HAVE_GENERIC
83
84 static inline void
85 2 volk_8u_x3_encodepolar_8u_x2_generic(unsigned char* frame,
86 unsigned char* temp,
87 const unsigned char* frozen_bit_mask,
88 const unsigned char* frozen_bits,
89 const unsigned char* info_bits,
90 unsigned int frame_size)
91 {
92 // interleave
93 2 interleave_frozen_and_info_bits(
94 temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
95 2 volk_8u_x2_encodeframepolar_8u_generic(frame, temp, frame_size);
96 2 }
97 #endif /* LV_HAVE_GENERIC */
98
99
100 #ifdef LV_HAVE_SSSE3
101 #include <tmmintrin.h>
102
103 static inline void
104 2 volk_8u_x3_encodepolar_8u_x2_u_ssse3(unsigned char* frame,
105 unsigned char* temp,
106 const unsigned char* frozen_bit_mask,
107 const unsigned char* frozen_bits,
108 const unsigned char* info_bits,
109 unsigned int frame_size)
110 {
111 // interleave
112 2 interleave_frozen_and_info_bits(
113 temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
114 2 volk_8u_x2_encodeframepolar_8u_u_ssse3(frame, temp, frame_size);
115 2 }
116
117 #endif /* LV_HAVE_SSSE3 */
118
119 #ifdef LV_HAVE_AVX2
120 #include <immintrin.h>
121 static inline void
122 2 volk_8u_x3_encodepolar_8u_x2_u_avx2(unsigned char* frame,
123 unsigned char* temp,
124 const unsigned char* frozen_bit_mask,
125 const unsigned char* frozen_bits,
126 const unsigned char* info_bits,
127 unsigned int frame_size)
128 {
129 2 interleave_frozen_and_info_bits(
130 temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
131 2 volk_8u_x2_encodeframepolar_8u_u_avx2(frame, temp, frame_size);
132 2 }
133 #endif /* LV_HAVE_AVX2 */
134
135 #endif /* VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_U_H_ */
136
137 #ifndef VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_A_H_
138 #define VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_A_H_
139
140 #ifdef LV_HAVE_SSSE3
141 #include <tmmintrin.h>
142 static inline void
143 2 volk_8u_x3_encodepolar_8u_x2_a_ssse3(unsigned char* frame,
144 unsigned char* temp,
145 const unsigned char* frozen_bit_mask,
146 const unsigned char* frozen_bits,
147 const unsigned char* info_bits,
148 unsigned int frame_size)
149 {
150 2 interleave_frozen_and_info_bits(
151 temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
152 2 volk_8u_x2_encodeframepolar_8u_a_ssse3(frame, temp, frame_size);
153 2 }
154 #endif /* LV_HAVE_SSSE3 */
155
156 #ifdef LV_HAVE_AVX2
157 #include <immintrin.h>
158 static inline void
159 2 volk_8u_x3_encodepolar_8u_x2_a_avx2(unsigned char* frame,
160 unsigned char* temp,
161 const unsigned char* frozen_bit_mask,
162 const unsigned char* frozen_bits,
163 const unsigned char* info_bits,
164 unsigned int frame_size)
165 {
166 2 interleave_frozen_and_info_bits(
167 temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
168 2 volk_8u_x2_encodeframepolar_8u_a_avx2(frame, temp, frame_size);
169 2 }
170 #endif /* LV_HAVE_AVX2 */
171
172 #endif /* VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_A_H_ */
173