23 #ifndef INCLUDED_volk_8u_conv_k7_r2puppet_8u_H 24 #define INCLUDED_volk_8u_conv_k7_r2puppet_8u_H 27 #include <volk/volk.h> 36 static inline int parity(
int x,
unsigned char* Partab)
45 unsigned int endstate,
46 unsigned int tailsize,
47 unsigned char* decisions)
51 int d_numstates = (1 << 6);
52 int d_decision_t_size = d_numstates / 8;
54 int d_framebits = nbits;
61 endstate = (endstate % d_numstates) << d_ADDSHIFT;
68 d += tailsize * d_decision_t_size;
70 int dif = tailsize - (d_k - 1);
73 while (nbits-- > d_framebits - (d_k - 1)) {
75 dec.
t = &d[nbits * d_decision_t_size];
76 k = (dec.w[(endstate >> d_ADDSHIFT) / 32] >> ((endstate >> d_ADDSHIFT) % 32)) & 1;
78 endstate = (endstate >> 1) | (k << (d_k - 2 + d_ADDSHIFT));
81 data[((nbits + dif) % d_framebits)] = k;
87 while (nbits-- != 0) {
90 dec.t = &d[nbits * d_decision_t_size];
92 k = (dec.w[(endstate >> d_ADDSHIFT) / 32] >> ((endstate >> d_ADDSHIFT) % 32)) & 1;
94 endstate = (endstate >> 1) | (k << (d_k - 2 + d_ADDSHIFT));
95 data[((nbits + dif) % d_framebits)] = k;
101 return retval >> d_ADDSHIFT;
107 #include <emmintrin.h> 108 #include <mmintrin.h> 109 #include <pmmintrin.h> 111 #include <xmmintrin.h> 115 unsigned int framebits)
120 int d_numstates = (1 << 6);
122 static unsigned char*
D;
123 static unsigned char* Y;
124 static unsigned char* X;
125 static unsigned int excess = 6;
126 static unsigned char* Branchtab;
127 static unsigned char Partab[256];
129 int d_polys[2] = { 79, 109 };
138 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
144 for (
i = 0;
i < 256;
i++) {
155 for (state = 0; state < d_numstates / 2; state++) {
156 for (
i = 0;
i < rate;
i++) {
157 Branchtab[
i * d_numstates / 2 + state] =
158 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
166 memset(X, 31, d_numstates);
169 memset(
D, 0, (d_numstates / 8) * (framebits + 6));
172 Y, X, syms,
D, framebits / 2 - excess, excess, Branchtab);
174 unsigned int min = X[0];
175 int i = 0, state = 0;
176 for (
i = 0;
i < (d_numstates); ++
i) {
193 #include <immintrin.h> 196 static inline void volk_8u_conv_k7_r2puppet_8u_avx2(
unsigned char* syms,
198 unsigned int framebits)
203 int d_numstates = (1 << 6);
205 static unsigned char*
D;
206 static unsigned char* Y;
207 static unsigned char* X;
208 static unsigned int excess = 6;
209 static unsigned char* Branchtab;
210 static unsigned char Partab[256];
212 int d_polys[2] = { 79, 109 };
221 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
227 for (
i = 0;
i < 256;
i++) {
238 for (state = 0; state < d_numstates / 2; state++) {
239 for (
i = 0;
i < rate;
i++) {
240 Branchtab[
i * d_numstates / 2 + state] =
241 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
249 memset(X, 31, d_numstates);
252 memset(
D, 0, (d_numstates / 8) * (framebits + 6));
254 volk_8u_x4_conv_k7_r2_8u_avx2(
255 Y, X, syms,
D, framebits / 2 - excess, excess, Branchtab);
257 unsigned int min = X[0];
258 int i = 0, state = 0;
259 for (
i = 0;
i < (d_numstates); ++
i) {
279 unsigned int framebits)
284 int d_numstates = (1 << 6);
286 static unsigned char* Y;
287 static unsigned char* X;
288 static unsigned char*
D;
289 static unsigned int excess = 6;
290 static unsigned char* Branchtab;
291 static unsigned char Partab[256];
293 int d_polys[2] = { 79, 109 };
302 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
309 for (
i = 0;
i < 256;
i++) {
320 for (state = 0; state < d_numstates / 2; state++) {
321 for (
i = 0;
i < rate;
i++) {
322 Branchtab[
i * d_numstates / 2 + state] =
323 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
331 memset(X, 31, d_numstates);
334 memset(
D, 0, (d_numstates / 8) * (framebits + 6));
337 Y, X, syms,
D, framebits / 2 - excess, excess, Branchtab);
339 unsigned int min = X[0];
340 int i = 0, state = 0;
341 for (
i = 0;
i < (d_numstates); ++
i) {
unsigned char * t
Definition: volk_8u_conv_k7_r2puppet_8u.h:32
size_t volk_get_alignment(void)
Get the machine alignment in bytes.
Definition: volk.tmpl.c:102
Definition: volk_8u_conv_k7_r2puppet_8u.h:30
static void volk_8u_x4_conv_k7_r2_8u_spiral(unsigned char *Y, unsigned char *X, unsigned char *syms, unsigned char *dec, unsigned int framebits, unsigned int excess, unsigned char *Branchtab)
Definition: volk_8u_x4_conv_k7_r2_8u.h:341
static void volk_8u_x4_conv_k7_r2_8u_generic(unsigned char *Y, unsigned char *X, unsigned char *syms, unsigned char *dec, unsigned int framebits, unsigned int excess, unsigned char *Branchtab)
Definition: volk_8u_x4_conv_k7_r2_8u.h:636
static int chainback_viterbi(unsigned char *data, unsigned int nbits, unsigned int endstate, unsigned int tailsize, unsigned char *decisions)
Definition: volk_8u_conv_k7_r2puppet_8u.h:43
for i
Definition: volk_config_fixed.tmpl.h:25
#define D(...)
Definition: hwcaps.c:46
__VOLK_DECL_BEGIN VOLK_API void * volk_malloc(size_t size, size_t alignment)
Allocate size bytes of data aligned to alignment.
Definition: volk_malloc.c:51
static void volk_8u_conv_k7_r2puppet_8u_generic(unsigned char *syms, unsigned char *dec, unsigned int framebits)
Definition: volk_8u_conv_k7_r2puppet_8u.h:277
static void volk_8u_conv_k7_r2puppet_8u_spiral(unsigned char *syms, unsigned char *dec, unsigned int framebits)
Definition: volk_8u_conv_k7_r2puppet_8u.h:113
static int parity(int x, unsigned char *Partab)
Definition: volk_8u_conv_k7_r2puppet_8u.h:36
unsigned int * w
Definition: volk_8u_conv_k7_r2puppet_8u.h:33
data
Definition: plot_best_vs_generic.py:36