10#ifndef INCLUDED_volk_8u_conv_k7_r2puppet_8u_H
11#define INCLUDED_volk_8u_conv_k7_r2puppet_8u_H
23static inline int parity(
int x,
unsigned char* Partab)
32 unsigned int endstate,
33 unsigned int tailsize,
34 unsigned char* decisions)
38 int d_numstates = (1 << 6);
39 int d_decision_t_size = d_numstates / 8;
41 int d_framebits = nbits;
48 endstate = (endstate % d_numstates) << d_ADDSHIFT;
55 d += tailsize * d_decision_t_size;
57 int dif = tailsize - (d_k - 1);
60 while (nbits-- > d_framebits - (d_k - 1)) {
62 dec.
t = &d[nbits * d_decision_t_size];
63 k = (dec.w[(endstate >> d_ADDSHIFT) / 32] >> ((endstate >> d_ADDSHIFT) % 32)) & 1;
65 endstate = (endstate >> 1) | (k << (d_k - 2 + d_ADDSHIFT));
68 data[((nbits + dif) % d_framebits)] = k;
74 while (nbits-- != 0) {
77 dec.t = &d[nbits * d_decision_t_size];
79 k = (dec.w[(endstate >> d_ADDSHIFT) / 32] >> ((endstate >> d_ADDSHIFT) % 32)) & 1;
81 endstate = (endstate >> 1) | (k << (d_k - 2 + d_ADDSHIFT));
82 data[((nbits + dif) % d_framebits)] = k;
88 return retval >> d_ADDSHIFT;
102 unsigned int framebits)
104 if (framebits < 12) {
109 int d_numstates = (1 << 6);
111 static unsigned char* D;
112 static unsigned char* Y;
113 static unsigned char* X;
114 static unsigned int excess = 6;
115 static unsigned char* Branchtab;
116 static unsigned char Partab[256];
118 int d_polys[2] = { 79, 109 };
127 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
133 for (
i = 0;
i < 256;
i++) {
144 for (state = 0; state < d_numstates / 2; state++) {
145 for (
i = 0;
i < rate;
i++) {
146 Branchtab[
i * d_numstates / 2 + state] =
147 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
155 memset(X, 31, d_numstates);
158 memset(D, 0, (d_numstates / 8) * (framebits + 6));
161 Y, X, syms, D, framebits / 2 - excess, excess, Branchtab);
163 unsigned int min = X[0];
164 int i = 0, state = 0;
165 for (
i = 0;
i < (d_numstates); ++
i) {
186 unsigned int framebits)
188 if (framebits < 12) {
193 int d_numstates = (1 << 6);
195 static unsigned char* D;
196 static unsigned char* Y;
197 static unsigned char* X;
198 static unsigned int excess = 6;
199 static unsigned char* Branchtab;
200 static unsigned char Partab[256];
202 int d_polys[2] = { 79, 109 };
211 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
217 for (
i = 0;
i < 256;
i++) {
228 for (state = 0; state < d_numstates / 2; state++) {
229 for (
i = 0;
i < rate;
i++) {
230 Branchtab[
i * d_numstates / 2 + state] =
231 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
239 memset(X, 31, d_numstates);
242 memset(D, 0, (d_numstates / 8) * (framebits + 6));
245 Y, X, syms, D, framebits / 2 - excess, excess, Branchtab);
247 unsigned int min = X[0];
248 int i = 0, state = 0;
249 for (
i = 0;
i < (d_numstates); ++
i) {
266#include <immintrin.h>
269static inline void volk_8u_conv_k7_r2puppet_8u_avx2(
unsigned char* dec,
271 unsigned int framebits)
273 if (framebits < 12) {
278 int d_numstates = (1 << 6);
280 static unsigned char* D;
281 static unsigned char* Y;
282 static unsigned char* X;
283 static unsigned int excess = 6;
284 static unsigned char* Branchtab;
285 static unsigned char Partab[256];
287 int d_polys[2] = { 79, 109 };
296 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
302 for (
i = 0;
i < 256;
i++) {
313 for (state = 0; state < d_numstates / 2; state++) {
314 for (
i = 0;
i < rate;
i++) {
315 Branchtab[
i * d_numstates / 2 + state] =
316 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
324 memset(X, 31, d_numstates);
327 memset(D, 0, (d_numstates / 8) * (framebits + 6));
329 volk_8u_x4_conv_k7_r2_8u_avx2(
330 Y, X, syms, D, framebits / 2 - excess, excess, Branchtab);
332 unsigned int min = X[0];
333 int i = 0, state = 0;
334 for (
i = 0;
i < (d_numstates); ++
i) {
354 unsigned int framebits)
356 if (framebits < 12) {
361 int d_numstates = (1 << 6);
363 static unsigned char* Y;
364 static unsigned char* X;
365 static unsigned char* D;
366 static unsigned int excess = 6;
367 static unsigned char* Branchtab;
368 static unsigned char Partab[256];
370 int d_polys[2] = { 79, 109 };
379 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
386 for (
i = 0;
i < 256;
i++) {
397 for (state = 0; state < d_numstates / 2; state++) {
398 for (
i = 0;
i < rate;
i++) {
399 Branchtab[
i * d_numstates / 2 + state] =
400 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
408 memset(X, 31, d_numstates);
411 memset(D, 0, (d_numstates / 8) * (framebits + 6));
414 Y, X, syms, D, framebits / 2 - excess, excess, Branchtab);
416 unsigned int min = X[0];
417 int i = 0, state = 0;
418 for (
i = 0;
i < (d_numstates); ++
i) {
Definition volk_8u_conv_k7_r2puppet_8u.h:17
unsigned int * w
Definition volk_8u_conv_k7_r2puppet_8u.h:20
unsigned char * t
Definition volk_8u_conv_k7_r2puppet_8u.h:19
size_t volk_get_alignment(void)
Get the machine alignment in bytes.
Definition volk.tmpl.c:90
static void volk_8u_conv_k7_r2puppet_8u_neonspiral(unsigned char *dec, unsigned char *syms, unsigned int framebits)
Definition volk_8u_conv_k7_r2puppet_8u.h:184
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:30
static int parity(int x, unsigned char *Partab)
Definition volk_8u_conv_k7_r2puppet_8u.h:23
static void volk_8u_conv_k7_r2puppet_8u_spiral(unsigned char *dec, unsigned char *syms, unsigned int framebits)
Definition volk_8u_conv_k7_r2puppet_8u.h:100
static void volk_8u_conv_k7_r2puppet_8u_generic(unsigned char *dec, unsigned char *syms, unsigned int framebits)
Definition volk_8u_conv_k7_r2puppet_8u.h:352
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:322
static void volk_8u_x4_conv_k7_r2_8u_neonspiral(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:612
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:900
for i
Definition volk_config_fixed.tmpl.h:13
__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:38