Vector Optimized Library of Kernels  2.0
Architecture-tuned implementations of math kernels
volk_8u_x3_encodepolar_8u_x2.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2015 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  *
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Radio; see the file COPYING. If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street,
20  * Boston, MA 02110-1301, USA.
21  */
22 
75 #ifndef VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_U_H_
76 #define VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_U_H_
77 #include <stdio.h>
79 
80 static inline void
81 interleave_frozen_and_info_bits(unsigned char* target, const unsigned char* frozen_bit_mask,
82  const unsigned char* frozen_bits, const unsigned char* info_bits,
83  const unsigned int frame_size)
84 {
85  unsigned int bit;
86  for(bit = 0; bit < frame_size; ++bit){
87  *target++ = *frozen_bit_mask++ ? *frozen_bits++ : *info_bits++;
88  }
89 }
90 
91 #ifdef LV_HAVE_GENERIC
92 
93 static inline void
94 volk_8u_x3_encodepolar_8u_x2_generic(unsigned char* frame, unsigned char* temp, const unsigned char* frozen_bit_mask,
95  const unsigned char* frozen_bits, const unsigned char* info_bits,
96  unsigned int frame_size)
97 {
98  // interleave
99  interleave_frozen_and_info_bits(temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
100  volk_8u_x2_encodeframepolar_8u_generic(frame, temp, frame_size);
101 }
102 #endif /* LV_HAVE_GENERIC */
103 
104 
105 #ifdef LV_HAVE_SSSE3
106 #include <tmmintrin.h>
107 
108 static inline void
109 volk_8u_x3_encodepolar_8u_x2_u_ssse3(unsigned char* frame, unsigned char* temp,
110  const unsigned char* frozen_bit_mask,
111  const unsigned char* frozen_bits, const unsigned char* info_bits,
112  unsigned int frame_size)
113 {
114  // interleave
115  interleave_frozen_and_info_bits(temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
116  volk_8u_x2_encodeframepolar_8u_u_ssse3(frame, temp, frame_size);
117 }
118 
119 #endif /* LV_HAVE_SSSE3 */
120 
121 #ifdef LV_HAVE_AVX2
122 #include <immintrin.h>
123 static inline void
124 volk_8u_x3_encodepolar_8u_x2_u_avx2(unsigned char* frame, unsigned char* temp,
125  const unsigned char* frozen_bit_mask,
126  const unsigned char* frozen_bits, const unsigned char* info_bits,
127  unsigned int frame_size)
128 {
129  interleave_frozen_and_info_bits(temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
130  volk_8u_x2_encodeframepolar_8u_u_avx2(frame, temp, frame_size);
131 }
132 #endif /* LV_HAVE_AVX2 */
133 
134 #endif /* VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_U_H_ */
135 
136 #ifndef VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_A_H_
137 #define VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_A_H_
138 
139 #ifdef LV_HAVE_SSSE3
140 #include <tmmintrin.h>
141 static inline void
142 volk_8u_x3_encodepolar_8u_x2_a_ssse3(unsigned char* frame, unsigned char* temp,
143  const unsigned char* frozen_bit_mask,
144  const unsigned char* frozen_bits, const unsigned char* info_bits,
145  unsigned int frame_size)
146 {
147  interleave_frozen_and_info_bits(temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
148  volk_8u_x2_encodeframepolar_8u_a_ssse3(frame, temp, frame_size);
149 }
150 #endif /* LV_HAVE_SSSE3 */
151 
152 #ifdef LV_HAVE_AVX2
153 #include <immintrin.h>
154 static inline void
155 volk_8u_x3_encodepolar_8u_x2_a_avx2(unsigned char* frame, unsigned char* temp,
156  const unsigned char* frozen_bit_mask,
157  const unsigned char* frozen_bits, const unsigned char* info_bits,
158  unsigned int frame_size)
159 {
160  interleave_frozen_and_info_bits(temp, frozen_bit_mask, frozen_bits, info_bits, frame_size);
161  volk_8u_x2_encodeframepolar_8u_a_avx2(frame, temp, frame_size);
162 }
163 #endif /* LV_HAVE_AVX2 */
164 
165 #endif /* VOLK_KERNELS_VOLK_VOLK_8U_X3_ENCODEPOLAR_8U_X2_A_H_ */
static void volk_8u_x2_encodeframepolar_8u_generic(unsigned char *frame, unsigned char *temp, unsigned int frame_size)
Definition: volk_8u_x2_encodeframepolar_8u.h:62
static void volk_8u_x2_encodeframepolar_8u_a_ssse3(unsigned char *frame, unsigned char *temp, unsigned int frame_size)
Definition: volk_8u_x2_encodeframepolar_8u.h:382
static void volk_8u_x3_encodepolar_8u_x2_a_ssse3(unsigned char *frame, unsigned char *temp, const unsigned char *frozen_bit_mask, const unsigned char *frozen_bits, const unsigned char *info_bits, unsigned int frame_size)
Definition: volk_8u_x3_encodepolar_8u_x2.h:142
static void volk_8u_x3_encodepolar_8u_x2_generic(unsigned char *frame, unsigned char *temp, const unsigned char *frozen_bit_mask, const unsigned char *frozen_bits, const unsigned char *info_bits, unsigned int frame_size)
Definition: volk_8u_x3_encodepolar_8u_x2.h:94
static void volk_8u_x3_encodepolar_8u_x2_u_ssse3(unsigned char *frame, unsigned char *temp, const unsigned char *frozen_bit_mask, const unsigned char *frozen_bits, const unsigned char *info_bits, unsigned int frame_size)
Definition: volk_8u_x3_encodepolar_8u_x2.h:109
static void interleave_frozen_and_info_bits(unsigned char *target, const unsigned char *frozen_bit_mask, const unsigned char *frozen_bits, const unsigned char *info_bits, const unsigned int frame_size)
Definition: volk_8u_x3_encodepolar_8u_x2.h:81
static void volk_8u_x2_encodeframepolar_8u_u_ssse3(unsigned char *frame, unsigned char *temp, unsigned int frame_size)
Definition: volk_8u_x2_encodeframepolar_8u.h:85