diff options
| author | Leah Rowe <leah@libreboot.org> | 2026-03-12 04:39:00 +0000 |
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2026-03-12 04:39:00 +0000 |
| commit | 54936a45a573ce6bd6876086300461f50948efb9 (patch) | |
| tree | 6948b45a6c4b6cab0ab69434e21cacb40af087b3 /util/spkmodem_recv | |
| parent | 19e0249a8ab30a566e828a37c1be65c1e2ea6c4b (diff) | |
util/spkmodem-recv: don't use modulus on decode
it's slow on older compilers/systems that don't optimise.
instead, we branch (cheaper) and just do an above or
equal comparison), resetting appropriately or subtracting.
should yield an actually useful performance gain, on older
systems. a bit theoretical on modern systems, which optimise
well (modern compilers will produce assembly code much like
what the new C code is doing)
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/spkmodem_recv')
| -rw-r--r-- | util/spkmodem_recv/spkmodem-recv.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/util/spkmodem_recv/spkmodem-recv.c b/util/spkmodem_recv/spkmodem-recv.c index 504121ab..e141caa4 100644 --- a/util/spkmodem_recv/spkmodem-recv.c +++ b/util/spkmodem_recv/spkmodem-recv.c @@ -142,7 +142,9 @@ decode_pulse(struct decoder_state *st) size_t n; int next; - next = (st->ringpos + SAMPLES_PER_FRAME) % MAX_SAMPLES; + next = st->ringpos + SAMPLES_PER_FRAME; + if (next >= MAX_SAMPLES) + next -= MAX_SAMPLES; st->freq_data -= st->pulse[st->ringpos]; st->freq_data += st->pulse[next]; @@ -155,14 +157,15 @@ decode_pulse(struct decoder_state *st) err(errno, "stdin read"); } - if (abs(st->frame[st->ringpos]) > THRESHOLD) - st->pulse[st->ringpos] = 1; - else - st->pulse[st->ringpos] = 0; + st->pulse[st->ringpos] = + abs(st->frame[st->ringpos]) > THRESHOLD; st->freq_separator += st->pulse[st->ringpos]; - st->ringpos = (st->ringpos + 1) % MAX_SAMPLES; + st->ringpos++; + if (st->ringpos >= MAX_SAMPLES) + st->ringpos = 0; + st->sample_count++; } |
