mirror of
https://github.com/esphome/esphome.git
synced 2026-09-02 02:56:01 +00:00
[api] Hoist pos_ to local in encode_varint_raw_64 to avoid reload per byte
Use a __restrict__ local pointer for the varint write loop so the compiler can keep it in a register instead of reloading pos_ from memory on each iteration. Eliminates the store→load dependency chain that was causing 7 load/store pairs for a typical 48-bit BLE address varint.
This commit is contained in:
@@ -224,8 +224,6 @@ class ProtoWriteBuffer {
|
||||
this->encode_varint_raw_slow_(value);
|
||||
}
|
||||
void encode_varint_raw_64(uint64_t value) {
|
||||
// Use __restrict__ so the compiler knows pos doesn't alias this->
|
||||
// and can keep it in a register across the loop.
|
||||
uint8_t *__restrict__ pos = this->pos_;
|
||||
while (value > 0x7F) {
|
||||
*pos++ = static_cast<uint8_t>(value | 0x80);
|
||||
|
||||
Reference in New Issue
Block a user