43fc479 -> aec9955, 8380 -> 8382 B. Two bytes, and they are all of e226340: the uart ring now declares its indices before its storage. The library measured that reorder at 0 B and it is +2 here, so the difference is worth stating. The reorder exists for the 0..63 displacement window, and at 32 entries the indices were never outside it - ldd Z+32 and ld Z are both two bytes, so moving them to the front buys nothing. What it does do is take storage off offset zero, and storage is the member reached by a computed index: pop() loaded storage[tail] as X = Z + tail with the base free, and now adds the base with an adiw. So it is free where the indices were out of the window and a loss where they were in it, and which of those a consumer gets depends on its ring size and on whether pop() is out of line - fantemp's is. Filed upstream with the disassembly; nothing to work around here, and 8382 of 32768 is not a budget question. Everything else crossed is inert for this firmware: no i2c, no eeprom writer, no spare vectors, and percent_t already reached through ::of(). Five tests green in both modes, cross-mode identity held. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1.4 KiB
1.4 KiB