PythonExtra/tests/micropython
Damien George f2040bfc7e py: Rework bytecode and .mpy file format to be mostly static data.
Background: .mpy files are precompiled .py files, built using mpy-cross,
that contain compiled bytecode functions (and can also contain machine
code). The benefit of using an .mpy file over a .py file is that they are
faster to import and take less memory when importing.  They are also
smaller on disk.

But the real benefit of .mpy files comes when they are frozen into the
firmware.  This is done by loading the .mpy file during compilation of the
firmware and turning it into a set of big C data structures (the job of
mpy-tool.py), which are then compiled and downloaded into the ROM of a
device.  These C data structures can be executed in-place, ie directly from
ROM.  This makes importing even faster because there is very little to do,
and also means such frozen modules take up much less RAM (because their
bytecode stays in ROM).

The downside of frozen code is that it requires recompiling and reflashing
the entire firmware.  This can be a big barrier to entry, slows down
development time, and makes it harder to do OTA updates of frozen code
(because the whole firmware must be updated).

This commit attempts to solve this problem by providing a solution that
sits between loading .mpy files into RAM and freezing them into the
firmware.  The .mpy file format has been reworked so that it consists of
data and bytecode which is mostly static and ready to run in-place.  If
these new .mpy files are located in flash/ROM which is memory addressable,
the .mpy file can be executed (mostly) in-place.

With this approach there is still a small amount of unpacking and linking
of the .mpy file that needs to be done when it's imported, but it's still
much better than loading an .mpy from disk into RAM (although not as good
as freezing .mpy files into the firmware).

The main trick to make static .mpy files is to adjust the bytecode so any
qstrs that it references now go through a lookup table to convert from
local qstr number in the module to global qstr number in the firmware.
That means the bytecode does not need linking/rewriting of qstrs when it's
loaded.  Instead only a small qstr table needs to be built (and put in RAM)
at import time.  This means the bytecode itself is static/constant and can
be used directly if it's in addressable memory.  Also the qstr string data
in the .mpy file, and some constant object data, can be used directly.
Note that the qstr table is global to the module (ie not per function).

In more detail, in the VM what used to be (schematically):

    qst = DECODE_QSTR_VALUE;

is now (schematically):

    idx = DECODE_QSTR_INDEX;
    qst = qstr_table[idx];

That allows the bytecode to be fixed at compile time and not need
relinking/rewriting of the qstr values.  Only qstr_table needs to be linked
when the .mpy is loaded.

Incidentally, this helps to reduce the size of bytecode because what used
to be 2-byte qstr values in the bytecode are now (mostly) 1-byte indices.
If the module uses the same qstr more than two times then the bytecode is
smaller than before.

The following changes are measured for this commit compared to the
previous (the baseline):
- average 7%-9% reduction in size of .mpy files
- frozen code size is reduced by about 5%-7%
- importing .py files uses about 5% less RAM in total
- importing .mpy files uses about 4% less RAM in total
- importing .py and .mpy files takes about the same time as before

The qstr indirection in the bytecode has only a small impact on VM
performance.  For stm32 on PYBv1.0 the performance change of this commit
is:

diff of scores (higher is better)
N=100 M=100             baseline -> this-commit  diff      diff% (error%)
bm_chaos.py               371.07 ->  357.39 :  -13.68 =  -3.687% (+/-0.02%)
bm_fannkuch.py             78.72 ->   77.49 :   -1.23 =  -1.563% (+/-0.01%)
bm_fft.py                2591.73 -> 2539.28 :  -52.45 =  -2.024% (+/-0.00%)
bm_float.py              6034.93 -> 5908.30 : -126.63 =  -2.098% (+/-0.01%)
bm_hexiom.py               48.96 ->   47.93 :   -1.03 =  -2.104% (+/-0.00%)
bm_nqueens.py            4510.63 -> 4459.94 :  -50.69 =  -1.124% (+/-0.00%)
bm_pidigits.py            650.28 ->  644.96 :   -5.32 =  -0.818% (+/-0.23%)
core_import_mpy_multi.py  564.77 ->  581.49 :  +16.72 =  +2.960% (+/-0.01%)
core_import_mpy_single.py  68.67 ->   67.16 :   -1.51 =  -2.199% (+/-0.01%)
core_qstr.py               64.16 ->   64.12 :   -0.04 =  -0.062% (+/-0.00%)
core_yield_from.py        362.58 ->  354.50 :   -8.08 =  -2.228% (+/-0.00%)
misc_aes.py               429.69 ->  405.59 :  -24.10 =  -5.609% (+/-0.01%)
misc_mandel.py           3485.13 -> 3416.51 :  -68.62 =  -1.969% (+/-0.00%)
misc_pystone.py          2496.53 -> 2405.56 :  -90.97 =  -3.644% (+/-0.01%)
misc_raytrace.py          381.47 ->  374.01 :   -7.46 =  -1.956% (+/-0.01%)
viper_call0.py            576.73 ->  572.49 :   -4.24 =  -0.735% (+/-0.04%)
viper_call1a.py           550.37 ->  546.21 :   -4.16 =  -0.756% (+/-0.09%)
viper_call1b.py           438.23 ->  435.68 :   -2.55 =  -0.582% (+/-0.06%)
viper_call1c.py           442.84 ->  440.04 :   -2.80 =  -0.632% (+/-0.08%)
viper_call2a.py           536.31 ->  532.35 :   -3.96 =  -0.738% (+/-0.06%)
viper_call2b.py           382.34 ->  377.07 :   -5.27 =  -1.378% (+/-0.03%)

And for unix on x64:

diff of scores (higher is better)
N=2000 M=2000        baseline -> this-commit     diff      diff% (error%)
bm_chaos.py          13594.20 ->  13073.84 :  -520.36 =  -3.828% (+/-5.44%)
bm_fannkuch.py          60.63 ->     59.58 :    -1.05 =  -1.732% (+/-3.01%)
bm_fft.py           112009.15 -> 111603.32 :  -405.83 =  -0.362% (+/-4.03%)
bm_float.py         246202.55 -> 247923.81 : +1721.26 =  +0.699% (+/-2.79%)
bm_hexiom.py           615.65 ->    617.21 :    +1.56 =  +0.253% (+/-1.64%)
bm_nqueens.py       215807.95 -> 215600.96 :  -206.99 =  -0.096% (+/-3.52%)
bm_pidigits.py        8246.74 ->   8422.82 :  +176.08 =  +2.135% (+/-3.64%)
misc_aes.py          16133.00 ->  16452.74 :  +319.74 =  +1.982% (+/-1.50%)
misc_mandel.py      128146.69 -> 130796.43 : +2649.74 =  +2.068% (+/-3.18%)
misc_pystone.py      83811.49 ->  83124.85 :  -686.64 =  -0.819% (+/-1.03%)
misc_raytrace.py     21688.02 ->  21385.10 :  -302.92 =  -1.397% (+/-3.20%)

The code size change is (firmware with a lot of frozen code benefits the
most):

       bare-arm:  +396 +0.697%
    minimal x86: +1595 +0.979% [incl +32(data)]
       unix x64: +2408 +0.470% [incl +800(data)]
    unix nanbox: +1396 +0.309% [incl -96(data)]
          stm32: -1256 -0.318% PYBV10
         cc3200:  +288 +0.157%
        esp8266:  -260 -0.037% GENERIC
          esp32:  -216 -0.014% GENERIC[incl -1072(data)]
            nrf:  +116 +0.067% pca10040
            rp2:  -664 -0.135% PICO
           samd:  +844 +0.607% ADAFRUIT_ITSYBITSY_M4_EXPRESS

As part of this change the .mpy file format version is bumped to version 6.
And mpy-tool.py has been improved to provide a good visualisation of the
contents of .mpy files.

In summary: this commit changes the bytecode to use qstr indirection, and
reworks the .mpy file format to be simpler and allow .mpy files to be
executed in-place.  Performance is not impacted too much.  Eventually it
will be possible to store such .mpy files in a linear, read-only, memory-
mappable filesystem so they can be executed from flash/ROM.  This will
essentially be able to replace frozen code for most applications.

Signed-off-by: Damien George <damien@micropython.org>
2022-02-24 18:08:43 +11:00
..
const.py tests/micropython/const.py: Add comment about required config for test. 2021-11-17 14:28:20 +11:00
const.py.exp py/parse: Treat constants that start with underscore as private. 2016-06-06 17:28:32 +01:00
const2.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
const2.py.exp tests/micropython: Add tests for const names being replaced in parser. 2016-09-27 13:03:53 +10:00
const_error.py py/parse: Support constant folding of power operator for integers. 2020-05-03 16:23:19 +10:00
const_error.py.exp py/parse: Remove unnecessary check in const folding for ** operator. 2020-04-09 16:02:39 +10:00
const_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
const_intbig.py.exp tests/micropython: Add test for consts that are bignums. 2017-02-24 13:08:18 +11:00
decorator.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
decorator.py.exp tests: Add tests for things that are not already tested. 2015-03-12 22:48:45 +00:00
decorator_error.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
decorator_error.py.exp tests: Add tests for SyntaxError, TypeError, and other missing things. 2015-03-25 23:10:09 +00:00
emg_exc.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
emg_exc.py.exp tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
extreme_exc.py tests/micropython/extreme_exc.py: Unlink alloc'd lists earlier in chain. 2020-10-29 23:35:36 +11:00
extreme_exc.py.exp tests/micropython/extreme_exc.py: Allow to run without any emg exc buf. 2018-04-05 03:03:16 +10:00
heap_lock.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heap_lock.py.exp py/modmicropython: Add heap_locked function to test state of heap. 2020-03-11 16:54:16 +11:00
heap_locked.py py/modmicropython: Add heap_locked function to test state of heap. 2020-03-11 16:54:16 +11:00
heap_locked.py.exp py/modmicropython: Add heap_locked function to test state of heap. 2020-03-11 16:54:16 +11:00
heapalloc.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc.py.exp tests/micropython: Move alloc-less traceback test to separate test file. 2016-11-21 17:39:23 +11:00
heapalloc_bytesio.py tests: Convert remaining "sys.exit()" to "raise SystemExit". 2017-06-10 20:34:38 +03:00
heapalloc_bytesio.py.exp tests/heapalloc_bytesio: Test for BytesIO with preallocates space. 2017-02-02 00:38:38 +03:00
heapalloc_bytesio2.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_bytesio2.py.exp py/objstringio: If created from immutable object, follow copy on write policy. 2017-06-09 17:33:01 +03:00
heapalloc_exc_compressed.py py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_compressed.py.exp py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_compressed_emg_exc.py py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_compressed_emg_exc.py.exp py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_raise.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_exc_raise.py.exp tests/heapalloc_exc_raise.py: Heap alloc test for raising/catching exc. 2017-02-20 04:22:32 +03:00
heapalloc_fail_bytearray.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_bytearray.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_dict.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_dict.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_list.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_list.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_memoryview.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_memoryview.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_set.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_set.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_tuple.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_tuple.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_inst_call.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_inst_call.py.exp tests/heapalloc_inst_call: Test for no alloc for simple object calls. 2016-12-25 00:50:27 +03:00
heapalloc_int_from_bytes.py tests/micropython: Add test for int.from_bytes with many zero bytes. 2017-05-06 10:29:09 +10:00
heapalloc_int_from_bytes.py.exp tests/micropython: Add test for int.from_bytes with many zero bytes. 2017-05-06 10:29:09 +10:00
heapalloc_iter.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_str.py tests/heapalloc_str: Test no-replacement case for str.replace(). 2017-03-22 22:17:52 +03:00
heapalloc_str.py.exp tests/heapalloc_str: Test for alloc-free string operations. 2017-01-27 00:49:39 +03:00
heapalloc_super.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_super.py.exp tests: Add tests for calling super and loading a method directly. 2017-04-22 23:39:38 +10:00
heapalloc_traceback.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
heapalloc_traceback.py.exp tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_yield_from.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_yield_from.py.exp tests/micropython: Add test for yield-from while heap is locked. 2019-12-27 12:34:22 +11:00
import_mpy_invalid.py py: Rework bytecode and .mpy file format to be mostly static data. 2022-02-24 18:08:43 +11:00
import_mpy_invalid.py.exp py: Rework bytecode and .mpy file format to be mostly static data. 2022-02-24 18:08:43 +11:00
import_mpy_native_gc.py py: Rework bytecode and .mpy file format to be mostly static data. 2022-02-24 18:08:43 +11:00
import_mpy_native_gc.py.exp py/persistentcode: Maintain root ptr list of imported native .mpy code. 2020-08-02 22:34:09 +10:00
import_mpy_native_x64.py py: Rework bytecode and .mpy file format to be mostly static data. 2022-02-24 18:08:43 +11:00
import_mpy_native_x64.py.exp tests: Move .mpy import tests from import/ to micropython/ dir. 2020-07-26 22:04:31 +10:00
kbd_intr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
kbd_intr.py.exp tests/micropython: Add test for micropython.kbd_intr(). 2017-04-18 17:24:30 +10:00
meminfo.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
meminfo.py.exp tests/meminfo: Update for addition of "max free sz" output. 2016-07-01 00:39:26 +03:00
memstats.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
memstats.py.exp tests: Add missing tests for builtins, and many other things. 2015-04-04 22:05:30 +01:00
native_closure.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_closure.py.exp tests: Add specific test for closures in native emitter. 2015-04-03 16:14:25 +01:00
native_const.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_const.py.exp tests/micropython: Test loading const objs in native and viper funcs. 2018-09-27 23:39:08 +10:00
native_const_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_const_intbig.py.exp tests/micropython/: Split off intbig tests. 2017-03-07 07:12:58 +01:00
native_for.py tests: Move native for test from pybnative to micropython. 2021-01-29 23:57:10 +11:00
native_for.py.exp tests: Move native for test from pybnative to micropython. 2021-01-29 23:57:10 +11:00
native_gen.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_gen.py.exp tests/micropython: Add test for native generators. 2019-09-26 16:53:47 +10:00
native_misc.py py/emitnative: Ensure stack settling is safe mid-branch. 2021-07-19 23:18:59 +10:00
native_misc.py.exp py/emitnative: Ensure stack settling is safe mid-branch. 2021-07-19 23:18:59 +10:00
native_try.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_try.py.exp tests/micropython: Add tests for try and with blocks under native/viper. 2018-08-17 14:11:36 +10:00
native_try_deep.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_try_deep.py.exp tests/micropython: Add tests for try and with blocks under native/viper. 2018-08-17 14:11:36 +10:00
native_with.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_with.py.exp py: Shorten error messages by using contractions and some rewording. 2018-09-20 14:33:10 +10:00
opt_level.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
opt_level.py.exp tests: Split out test for optimisation level and line-no printing. 2019-08-28 12:47:58 +10:00
opt_level_lineno.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
opt_level_lineno.py.exp tests: Split out test for optimisation level and line-no printing. 2019-08-28 12:47:58 +10:00
schedule.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
schedule.py.exp tests/micropython: Add tests for micropython.schedule(). 2017-03-20 15:20:26 +11:00
stack_use.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
stack_use.py.exp tests/micropython: Add test for micropython.stack_use() function. 2016-12-28 17:46:52 +11:00
viper_addr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_addr.py.exp py: Allow to pass in read-only buffers to viper and inline-asm funcs. 2019-08-06 15:58:23 +10:00
viper_args.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_args.py.exp py/emitnative: Support arbitrary number of arguments to viper functions. 2018-09-15 22:39:27 +10:00
viper_binop_arith.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_arith.py.exp py: Implement native multiply operation in viper emitter. 2015-06-04 14:00:29 +00:00
viper_binop_arith_uint.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_arith_uint.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_bitwise_uint.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_bitwise_uint.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_comp.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_comp.py.exp tests: Add tests for viper binary operations. 2014-09-29 19:42:06 +01:00
viper_binop_comp_imm.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_comp_imm.py.exp asmarm: Fix bug with encoding small negative ints using MVN instruction. 2014-12-14 03:24:17 +02:00
viper_binop_comp_uint.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_comp_uint.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_divmod.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_divmod.py.exp py/emitnative: Implement floor-division and modulo for viper emitter. 2017-10-11 18:54:34 +11:00
viper_binop_multi_comp.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_multi_comp.py.exp py: Partially fix viper multi-comparison; add test for it. 2014-10-19 19:00:51 +01:00
viper_cond.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_cond.py.exp tests/micropython/viper_cond: Add test for large int as bool. 2018-08-04 22:16:24 +10:00
viper_const.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_const.py.exp tests/micropython: Test loading const objs in native and viper funcs. 2018-09-27 23:39:08 +10:00
viper_const_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_const_intbig.py.exp tests/micropython: Test loading const objs in native and viper funcs. 2018-09-27 23:39:08 +10:00
viper_error.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_error.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_globals.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_globals.py.exp py/emitnative: Make viper funcs run with their correct globals context. 2018-09-15 22:39:27 +10:00
viper_import.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_import.py.exp tests/micropython: Add test for import from within viper function. 2016-11-10 22:54:55 +11:00
viper_misc.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_misc.py.exp tests/micropython/: Split off intbig tests. 2017-03-07 07:12:58 +01:00
viper_misc2.py py/emitnative: Fix x86-64 emitter to generate correct 8/16-bit stores. 2021-05-20 23:43:25 +10:00
viper_misc2.py.exp py/emitnative: Fix x86-64 emitter to generate correct 8/16-bit stores. 2021-05-20 23:43:25 +10:00
viper_misc_intbig.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
viper_misc_intbig.py.exp tests/micropython/: Split off intbig tests. 2017-03-07 07:12:58 +01:00
viper_ptr8_load.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr8_load.py.exp tests: Add more tests for viper, including tests for ViperTypeError's. 2015-04-22 23:18:28 +01:00
viper_ptr8_store.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr8_store.py.exp tests: Add more tests for viper, including tests for ViperTypeError's. 2015-04-22 23:18:28 +01:00
viper_ptr16_load.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr16_load.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_ptr16_store.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr16_store.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_ptr32_load.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr32_load.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_ptr32_store.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr32_store.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_subscr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_subscr.py.exp py: Implement implicit cast to obj for viper load/store index/value. 2015-06-04 11:52:16 +01:00
viper_subscr_multi.py py/emitnative: Ensure load_subscr does not clobber existing REG_RET. 2021-09-13 22:30:24 +10:00
viper_subscr_multi.py.exp py/emitnative: Ensure load_subscr does not clobber existing REG_RET. 2021-09-13 22:30:24 +10:00
viper_try.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_try.py.exp tests/micropython: Add tests for try and with blocks under native/viper. 2018-08-17 14:11:36 +10:00
viper_types.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_types.py.exp py/native: Improve support for bool type in viper functions. 2019-05-03 23:18:30 +10:00
viper_with.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_with.py.exp py: Shorten error messages by using contractions and some rewording. 2018-09-20 14:33:10 +10:00