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:
Damien George
2019-03-01 14:03:10 +11:00
parent 5996eeb48f
commit 992a6e1dea
4 changed files with 135 additions and 49 deletions

View File

@@ -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;