Remove runtime division from HWFIFO wrap pointer advance paths (Cortex-M0 safe)#3542
Closed
Remove runtime division from HWFIFO wrap pointer advance paths (Cortex-M0 safe)#3542
Conversation
Co-authored-by: HiFiPhile <4375114+HiFiPhile@users.noreply.github.com>
Co-authored-by: HiFiPhile <4375114+HiFiPhile@users.noreply.github.com>
Co-authored-by: HiFiPhile <4375114+HiFiPhile@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Remove division aeabi_idiv in related functions
Remove runtime division from HWFIFO wrap pointer advance paths (Cortex-M0 safe)
Mar 9, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors the HWFIFO wrap-around pointer advancement logic in tusb_fifo.c to avoid runtime division in hot paths (important for Cortex-M0 where division may pull in __aeabi_*div), while aiming to preserve the corrected behavior introduced in PR #3538.
Changes:
- Added a small inline helper to convert
lin_evenbyte counts into HWFIFO address-advance values using shift-based stride handling. - Updated wrapped-path pointer advancement in
hwff_push_n()andhwff_pull_n()to use the helper instead of division.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
TinyUSB Average Code Size Metrics
Input files
|
Owner
|
replaced by #3545 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR #3538 corrected PMA pointer advancement math in wrapped HWFIFO paths, but did so with division in hot paths (
lin_even / data_stride), which can emit__aeabi_idiv/__aeabi_uidivon Cortex-M0. This change keeps the same pointer advancement behavior while removing runtime division.What changed
src/common/tusb_fifo.c:lin_even_to_addr_advance(uint16_t lin_even, uint8_t data_stride)hwff_push_n()hwff_pull_n()How the conversion now works
lin_evenbytes to transfer units using shift-based stride handling:>> 2>> 1CFG_TUSB_FIFO_HWFIFO_ADDR_STRIDEto compute register address advance.1/2/4) via assertion in helper.Net effect
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.