![Damien George](/assets/img/avatar_default.png)
Previous to this patch each time a bytes object was referenced a new instance (with the same data) was created. With this patch a single bytes object is created in the compiler and is loaded directly at execute time as a true constant (similar to loading bignum and float objects). This saves on allocating RAM and means that bytes objects can now be used when the memory manager is locked (eg in interrupts). The MP_BC_LOAD_CONST_BYTES bytecode was removed as part of this. Generated bytecode is slightly larger due to storing a pointer to the bytes object instead of the qstr identifier. Code size is reduced by about 60 bytes on Thumb2 architectures.
447 lines
9.3 KiB
Plaintext
447 lines
9.3 KiB
Plaintext
File cmdline/cmd_showbc.py, code block '<module>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 3)
|
|
(N_EXC_STACK 0)
|
|
bc=-3 line=1
|
|
########
|
|
bc=\\d\+ line=134
|
|
00 MAKE_FUNCTION \.\+
|
|
\\d\+ STORE_NAME f
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ BUILD_TUPLE 1
|
|
\\d\+ LOAD_NULL
|
|
\\d\+ MAKE_FUNCTION_DEFARGS \.\+
|
|
\\d\+ STORE_NAME f
|
|
\\d\+ MAKE_FUNCTION \.\+
|
|
\\d\+ STORE_NAME f
|
|
\\d\+ LOAD_BUILD_CLASS
|
|
\\d\+ MAKE_FUNCTION \.\+
|
|
\\d\+ LOAD_CONST_STRING 'Class'
|
|
\\d\+ CALL_FUNCTION n=2 nkw=0
|
|
\\d\+ STORE_NAME Class
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 22)
|
|
(N_EXC_STACK 2)
|
|
(INIT_CELL 14)
|
|
(INIT_CELL 15)
|
|
(INIT_CELL 16)
|
|
bc=-6 line=1
|
|
########
|
|
bc=\\d\+ line=118
|
|
00 LOAD_CONST_NONE
|
|
01 LOAD_CONST_FALSE
|
|
02 BINARY_OP 5 __add__
|
|
03 LOAD_CONST_TRUE
|
|
04 BINARY_OP 5 __add__
|
|
05 STORE_FAST 0
|
|
06 LOAD_CONST_SMALL_INT 0
|
|
07 STORE_FAST 0
|
|
08 LOAD_CONST_SMALL_INT 1000
|
|
11 STORE_FAST 0
|
|
12 LOAD_CONST_SMALL_INT -1000
|
|
15 STORE_FAST 0
|
|
16 LOAD_CONST_SMALL_INT 1
|
|
17 STORE_FAST 0
|
|
18 LOAD_CONST_SMALL_INT 1
|
|
19 LOAD_CONST_SMALL_INT 2
|
|
20 BUILD_TUPLE 2
|
|
22 STORE_DEREF 14
|
|
24 LOAD_CONST_SMALL_INT 1
|
|
25 LOAD_CONST_SMALL_INT 2
|
|
26 BUILD_LIST 2
|
|
28 STORE_FAST 1
|
|
29 LOAD_CONST_SMALL_INT 1
|
|
30 LOAD_CONST_SMALL_INT 2
|
|
31 BUILD_SET 2
|
|
33 STORE_FAST 2
|
|
34 BUILD_MAP 0
|
|
36 STORE_DEREF 15
|
|
38 BUILD_MAP 1
|
|
40 LOAD_CONST_SMALL_INT 2
|
|
41 LOAD_CONST_SMALL_INT 1
|
|
42 STORE_MAP
|
|
43 STORE_FAST 3
|
|
44 LOAD_CONST_STRING 'a'
|
|
47 STORE_FAST 4
|
|
48 LOAD_CONST_OBJ \.\+
|
|
\\d\+ STORE_FAST 5
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ STORE_FAST 6
|
|
\\d\+ LOAD_CONST_SMALL_INT 2
|
|
\\d\+ STORE_FAST 7
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ BINARY_OP 5 __add__
|
|
\\d\+ STORE_FAST 8
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ UNARY_OP 4
|
|
\\d\+ STORE_FAST 9
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ UNARY_OP 0
|
|
\\d\+ NOT
|
|
\\d\+ STORE_FAST 10
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ DUP_TOP
|
|
\\d\+ ROT_THREE
|
|
\\d\+ BINARY_OP 27 __eq__
|
|
\\d\+ JUMP_IF_FALSE_OR_POP \\d\+
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ BINARY_OP 27 __eq__
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ ROT_TWO
|
|
\\d\+ POP_TOP
|
|
\\d\+ STORE_FAST 10
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ BINARY_OP 27 __eq__
|
|
\\d\+ JUMP_IF_FALSE_OR_POP \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ BINARY_OP 27 __eq__
|
|
\\d\+ UNARY_OP 0
|
|
\\d\+ NOT
|
|
\\d\+ STORE_FAST 10
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_ATTR c (cache=0)
|
|
\\d\+ STORE_FAST 11
|
|
\\d\+ LOAD_FAST 11
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ STORE_ATTR c (cache=0)
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_SUBSCR
|
|
\\d\+ STORE_FAST 12
|
|
\\d\+ LOAD_FAST 12
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ STORE_SUBSCR
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ BUILD_SLICE 2
|
|
\\d\+ LOAD_SUBSCR
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ UNPACK_SEQUENCE 2
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ STORE_DEREF 14
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ ROT_TWO
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ STORE_DEREF 14
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ ROT_THREE
|
|
\\d\+ ROT_TWO
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ STORE_DEREF 14
|
|
\\d\+ STORE_FAST 1
|
|
\\d\+ DELETE_FAST 0
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ STORE_GLOBAL gl
|
|
\\d\+ DELETE_GLOBAL gl
|
|
\\d\+ LOAD_FAST 14
|
|
\\d\+ LOAD_FAST 15
|
|
\\d\+ MAKE_CLOSURE \.\+ 2
|
|
\\d\+ LOAD_FAST 2
|
|
\\d\+ GET_ITER
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 14
|
|
\\d\+ LOAD_FAST 15
|
|
\\d\+ MAKE_CLOSURE \.\+ 2
|
|
\\d\+ LOAD_FAST 2
|
|
\\d\+ GET_ITER
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 14
|
|
\\d\+ LOAD_FAST 15
|
|
\\d\+ MAKE_CLOSURE \.\+ 2
|
|
\\d\+ LOAD_FAST 2
|
|
\\d\+ GET_ITER
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ CALL_FUNCTION n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_FUNCTION n=1 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_CONST_STRING 'b'
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_FUNCTION n=0 nkw=1
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ LOAD_NULL
|
|
\\d\+ CALL_FUNCTION_VAR_KW n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ CALL_METHOD n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_METHOD n=1 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ LOAD_CONST_STRING 'c'
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ CALL_METHOD n=0 nkw=1
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ LOAD_METHOD b
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ LOAD_NULL
|
|
\\d\+ CALL_METHOD_VAR_KW n=0 nkw=0
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_FALSE \\d\+
|
|
\\d\+ LOAD_DEREF 16
|
|
\\d\+ POP_TOP
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_GLOBAL y (cache=0)
|
|
\\d\+ POP_TOP
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_TRUE \\d\+
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_FALSE \\d\+
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ GET_ITER
|
|
\\d\+ FOR_ITER \\d\+
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ POP_TOP
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ SETUP_FINALLY \\d\+
|
|
\\d\+ SETUP_EXCEPT \\d\+
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ POP_JUMP_IF_TRUE \\d\+
|
|
\\d\+ POP_BLOCK
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_EXCEPT
|
|
\\d\+ JUMP \\d\+
|
|
\\d\+ END_FINALLY
|
|
\\d\+ POP_BLOCK
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ LOAD_FAST 1
|
|
\\d\+ POP_TOP
|
|
\\d\+ END_FINALLY
|
|
\\d\+ LOAD_FAST 0
|
|
\\d\+ SETUP_WITH \\d\+
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ POP_BLOCK
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ WITH_CLEANUP
|
|
\\d\+ END_FINALLY
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ STORE_DEREF 16
|
|
\\d\+ LOAD_FAST_N 16
|
|
\\d\+ MAKE_CLOSURE \.\+ 1
|
|
\\d\+ STORE_FAST 13
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ IMPORT_NAME 'a'
|
|
\\d\+ STORE_FAST 0
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_CONST_STRING 'b'
|
|
\\d\+ BUILD_TUPLE 1
|
|
\\d\+ IMPORT_NAME 'a'
|
|
\\d\+ IMPORT_FROM 'b'
|
|
\\d\+ STORE_DEREF 14
|
|
\\d\+ POP_TOP
|
|
\\d\+ LOAD_CONST_SMALL_INT 0
|
|
\\d\+ LOAD_CONST_STRING '*'
|
|
\\d\+ BUILD_TUPLE 1
|
|
\\d\+ IMPORT_NAME 'a'
|
|
\\d\+ IMPORT_STAR
|
|
\\d\+ RAISE_VARARGS 0
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ RAISE_VARARGS 1
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ RETURN_VALUE
|
|
\\d\+ LOAD_CONST_SMALL_INT 1
|
|
\\d\+ RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: a
|
|
(N_STATE 5)
|
|
(N_EXC_STACK 0)
|
|
(INIT_CELL 0)
|
|
########
|
|
bc=\\d\+ line=124
|
|
00 LOAD_CONST_SMALL_INT 2
|
|
01 BUILD_TUPLE 1
|
|
03 LOAD_NULL
|
|
04 LOAD_FAST 0
|
|
05 MAKE_CLOSURE_DEFARGS \.\+ 1
|
|
\\d\+ STORE_FAST 1
|
|
\\d\+ LOAD_CONST_NONE
|
|
\\d\+ RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 2)
|
|
(N_EXC_STACK 0)
|
|
bc=-3 line=1
|
|
bc=0 line=129
|
|
bc=3 line=130
|
|
bc=6 line=131
|
|
00 LOAD_CONST_NONE
|
|
01 YIELD_VALUE
|
|
02 POP_TOP
|
|
03 LOAD_CONST_SMALL_INT 1
|
|
04 YIELD_VALUE
|
|
05 POP_TOP
|
|
06 LOAD_CONST_SMALL_INT 1
|
|
07 GET_ITER
|
|
08 LOAD_CONST_NONE
|
|
09 YIELD_FROM
|
|
10 POP_TOP
|
|
11 LOAD_CONST_NONE
|
|
12 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'Class' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names:
|
|
(N_STATE 1)
|
|
(N_EXC_STACK 0)
|
|
bc=-3 line=1
|
|
bc=10 line=135
|
|
00 LOAD_NAME __name__ (cache=0)
|
|
03 STORE_NAME __module__
|
|
05 LOAD_CONST_STRING 'Class'
|
|
08 STORE_NAME __qualname__
|
|
10 LOAD_CONST_NONE
|
|
11 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block '<genexpr>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * * *
|
|
(N_STATE 6)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
00 LOAD_FAST 2
|
|
01 FOR_ITER 17
|
|
04 STORE_FAST 3
|
|
05 LOAD_DEREF 1
|
|
07 POP_JUMP_IF_FALSE 1
|
|
10 LOAD_DEREF 0
|
|
12 YIELD_VALUE
|
|
13 POP_TOP
|
|
14 JUMP 1
|
|
17 LOAD_CONST_NONE
|
|
18 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block '<listcomp>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * * *
|
|
(N_STATE 7)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
00 BUILD_LIST 0
|
|
02 LOAD_FAST 2
|
|
03 FOR_ITER 19
|
|
06 STORE_FAST 3
|
|
07 LOAD_DEREF 1
|
|
09 POP_JUMP_IF_FALSE 3
|
|
12 LOAD_DEREF 0
|
|
14 LIST_APPEND 2
|
|
16 JUMP 3
|
|
19 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block '<dictcomp>' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * * *
|
|
(N_STATE 8)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
########
|
|
00 BUILD_MAP 0
|
|
02 LOAD_FAST 2
|
|
03 FOR_ITER 21
|
|
06 STORE_FAST 3
|
|
07 LOAD_DEREF 1
|
|
09 POP_JUMP_IF_FALSE 3
|
|
12 LOAD_DEREF 0
|
|
14 LOAD_DEREF 0
|
|
16 MAP_ADD 2
|
|
18 JUMP 3
|
|
21 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'closure' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: *
|
|
(N_STATE 4)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
########
|
|
bc=\\d\+ line=105
|
|
00 LOAD_DEREF 0
|
|
02 LOAD_CONST_SMALL_INT 1
|
|
03 BINARY_OP 5 __add__
|
|
04 STORE_FAST 1
|
|
05 LOAD_CONST_SMALL_INT 1
|
|
06 STORE_DEREF 0
|
|
08 DELETE_DEREF 0
|
|
10 LOAD_CONST_NONE
|
|
11 RETURN_VALUE
|
|
File cmdline/cmd_showbc.py, code block 'f' (descriptor: \.\+, bytecode @\.\+ bytes)
|
|
Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+):
|
|
########
|
|
\.\+5b
|
|
arg names: * b
|
|
(N_STATE 4)
|
|
(N_EXC_STACK 0)
|
|
bc=-\\d\+ line=1
|
|
########
|
|
bc=\\d\+ line=125
|
|
00 LOAD_FAST 1
|
|
01 LOAD_DEREF 0
|
|
03 BINARY_OP 5 __add__
|
|
04 RETURN_VALUE
|
|
mem: total=\\d\+, current=\\d\+, peak=\\d\+
|
|
stack: \\d\+ out of \\d\+
|
|
GC: total: \\d\+, used: \\d\+, free: \\d\+
|
|
No. of 1-blocks: \\d\+, 2-blocks: \\d\+, max blk sz: \\d\+
|