From 8ccaff0d8eaffe5548db0d71ffa804c036641194 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Thu, 12 Mar 2026 19:57:24 +0000 Subject: util/spkmodem-recv: also cache sep_pos in decode yet another optimisation for weaker compilers - but some modern compilers may not optimise well for this code either. this reduces the amount of references to the struct, which is very expensive (48000 times per second) on very old CPUs. Signed-off-by: Leah Rowe --- util/spkmodem_recv/spkmodem-recv.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/util/spkmodem_recv/spkmodem-recv.c b/util/spkmodem_recv/spkmodem-recv.c index d1e39aad..eaf80717 100644 --- a/util/spkmodem_recv/spkmodem-recv.c +++ b/util/spkmodem_recv/spkmodem-recv.c @@ -180,12 +180,14 @@ decode_pulse(struct decoder_state *st) unsigned char old_ring, old_sep; unsigned char new_pulse; int ringpos; + int sep_pos; signed short sample; ringpos = st->ringpos; + sep_pos = st->sep_pos; old_ring = st->pulse[ringpos]; - old_sep = st->pulse[st->sep_pos]; + old_sep = st->pulse[sep_pos]; st->freq_data -= old_ring; st->freq_data += old_sep; @@ -206,11 +208,12 @@ decode_pulse(struct decoder_state *st) if (ringpos >= MAX_SAMPLES) ringpos = 0; - st->ringpos = ringpos; + sep_pos++; + if (sep_pos >= MAX_SAMPLES) + sep_pos = 0; - st->sep_pos++; - if (st->sep_pos >= MAX_SAMPLES) - st->sep_pos = 0; + st->ringpos = ringpos; + st->sep_pos = sep_pos; st->sample_count++; } -- cgit v1.2.1