Commit b9991778 authored by Laurent THOMAS's avatar Laurent THOMAS

remove MMX instruction usage in polar decode

parent ef3b99a2
......@@ -47,8 +47,8 @@
//#define CALLGRIND 1
struct treillis {
uint8_t systematic_andp1[24];
uint8_t parity2[24];
uint8_t systematic_andp1[24] __attribute__((aligned(32)));
uint8_t parity2[24] __attribute__((aligned(32)));
int exit_state;
} __attribute__ ((aligned(64)));
......@@ -292,16 +292,17 @@ void threegpplte_turbo_encoder_sse(unsigned char *input, unsigned short input_le
unsigned char systematic2[768] __attribute__((aligned(32)));
interleave_compact_byte(base_interleaver, input, systematic2, input_length_bytes);
unsigned char *ptr_output = output;
unsigned char cur_s1, cur_s2;
unsigned char state0 = 0, state1 = 0;
for (int i = 0; i < input_length_bytes; i++) {
cur_s1=input[i];
cur_s2=systematic2[i];
*(simde__m128i *)ptr_output = simde_mm_add_epi8(*(simde__m128i *)all_treillis[state0][cur_s1].systematic_andp1,
*(simde__m128i *)all_treillis[state1][cur_s2].parity2);
int cur_s1 = input[i];
uint8_t *systematic_andp1 = all_treillis[state0][cur_s1].systematic_andp1;
int cur_s2 = systematic2[i];
uint8_t *parity2 = all_treillis[state1][cur_s2].parity2;
simde_mm_storeu_si128((simde__m128i *)ptr_output,
simde_mm_add_epi8(*(simde__m128i *)systematic_andp1, *(simde__m128i *)parity2));
ptr_output += 16;
for (int code_rate = 16; code_rate < 24; code_rate++) {
*ptr_output++ = all_treillis[state0][cur_s1].systematic_andp1[code_rate] + all_treillis[state1][cur_s2].parity2[code_rate];
*ptr_output++ = systematic_andp1[code_rate] + parity2[code_rate];
}
state0=all_treillis[state0][cur_s1].exit_state;
state1=all_treillis[state1][cur_s2].exit_state;
......
......@@ -252,6 +252,7 @@ static inline void applyFtoleft(const t_nrPolar_params *pp, decoder_node_t *node
simde__m128i minabs128 = simde_mm_min_epi16(absa128, absb128);
*((simde__m128i *)alpha_l) = simde_mm_sign_epi16(minabs128, simde_mm_sign_epi16(a128, b128));
} else if (avx2mod == 4) {
// this uses __m64, but only with SSE instructions, so we can disable MMX even with this piece of code
simde__m64 a64 = *((simde__m64 *)alpha_v);
simde__m64 b64 = ((simde__m64 *)alpha_v)[1];
simde__m64 absa64 = simde_mm_abs_pi16(a64);
......
......@@ -44,7 +44,6 @@ int fullread(int fd, void *_buf, int count) {
return ret;
}
#define shift 4
void fullwrite(int fd, void *_buf, int count) {
char *buf = _buf;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment