-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Speed up 'available' method by inserting unsigned int cast #433
Merged
Conversation
This file contains 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
…all to __divmodhi4
Memory usage change @ 65e63bf
Click for full report table
Click for full report CSV
|
I just published a blog post, in which I gave all the details: https://hinterm-ziel.de/index.php/2021/10/21/is-any-input-available/ |
Merged, thanks! |
MCUdude
added a commit
to MCUdude/MegaCoreX
that referenced
this pull request
Dec 19, 2021
MCUdude
added a commit
to MCUdude/MightyCore
that referenced
this pull request
Dec 19, 2021
MCUdude
added a commit
to MCUdude/MiniCore
that referenced
this pull request
Dec 19, 2021
MCUdude
added a commit
to MCUdude/MegaCore
that referenced
this pull request
Dec 19, 2021
MCUdude
added a commit
to MCUdude/MajorCore
that referenced
this pull request
Dec 19, 2021
lshw
pushed a commit
to lshw/MegaCore
that referenced
this pull request
Mar 9, 2022
lshw
pushed a commit
to lshw/MiniCore
that referenced
this pull request
Mar 9, 2022
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.
This speeds up the available method in the SoftwareSerial library by a factor of 10!
Without the cast, the compiler generates the following code (the value of the left operand is already in r24:r25):
ldi r22, 0x40 ; 64
ldi r23, 0x00 ; 0
call 0xdae ; 0xdae <__divmodhi4>
In other words, by calling the software div/mod routine, a call to the available method takes more than 15 µs!
With the cast (which by the way the HardwareSerial class also uses), the generated code looks as follows:
andi r24, 0x3F ; 63
eor r25, r25
With that, a call to the method uses roughly 1.5 µs.