mirror of
https://github.com/micropython/micropython.git
synced 2026-01-06 12:10:13 +01:00
py/persistentcode: Pack qstrs directly in bytecode to reduce mpy size.
Instead of emitting two bytes in the bytecode for where the linked qstr should be written to, it is now replaced by the actual qstr data, or a reference into the qstr window. Reduces mpy file size by about 10%.
This commit is contained in:
6
py/bc.c
6
py/bc.c
@@ -382,7 +382,7 @@ STATIC const byte opcode_format_table[64] = {
|
||||
#undef V
|
||||
#undef O
|
||||
|
||||
uint mp_opcode_format(const byte *ip, size_t *opcode_size) {
|
||||
uint mp_opcode_format(const byte *ip, size_t *opcode_size, bool count_var_uint) {
|
||||
uint f = (opcode_format_table[*ip >> 2] >> (2 * (*ip & 3))) & 3;
|
||||
const byte *ip_start = ip;
|
||||
if (f == MP_OPCODE_QSTR) {
|
||||
@@ -403,7 +403,9 @@ uint mp_opcode_format(const byte *ip, size_t *opcode_size) {
|
||||
);
|
||||
ip += 1;
|
||||
if (f == MP_OPCODE_VAR_UINT) {
|
||||
while ((*ip++ & 0x80) != 0) {
|
||||
if (count_var_uint) {
|
||||
while ((*ip++ & 0x80) != 0) {
|
||||
}
|
||||
}
|
||||
} else if (f == MP_OPCODE_OFFSET) {
|
||||
ip += 2;
|
||||
|
||||
Reference in New Issue
Block a user