Add a new MICROPY_COMP_CONST_FLOAT feature, enabled by in mpy-cross and
when compiling with MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES. The new
feature leverages the code of MICROPY_COMP_CONST_FOLDING to support folding
of floating point constants.
If MICROPY_COMP_MODULE_CONST is defined as well, math module constants are
made available at compile time. For example:
_DEG_TO_GRADIANT = const(math.pi / 180)
_INVALID_VALUE = const(math.nan)
A few corner cases had to be handled:
- The float const folding code should not fold expressions resulting into
complex results, as the mpy parser for complex immediates has
limitations.
- The constant generation code must distinguish between -0.0 and 0.0, which
are different even if C consider them as ==.
This change removes previous limitations on the use of `const()`
expressions that would result in floating point number, so the test cases
of micropython/const_error have to be updated.
Additional test cases have been added to cover the new repr() code (from a
previous commit). A few other simple test cases have been added to handle
the use of floats in `const()` expressions, but the float folding code
itself is also tested when running general float test cases, as float
expressions often get resolved at compile-time (with this change).
Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
|
||
|---|---|---|
| .. | ||
| mpy_cross | ||
| gccollect.c | ||
| main.c | ||
| Makefile | ||
| mpconfigport.h | ||
| mphalport.h | ||
| mpy-cross.vcxproj | ||
| qstrdefsport.h | ||
| README.md | ||
MicroPython cross compiler
This directory contains the MicroPython cross compiler, which runs under any Unix-like system and compiles .py scripts into .mpy files.
Build it as usual:
$ make
The compiler is called mpy-cross. Invoke it as:
$ ./mpy-cross foo.py
This will create a file foo.mpy which can then be copied to a place accessible
by the target MicroPython runtime (eg onto a pyboard's filesystem), and then
imported like any other Python module using import foo.
Different target runtimes may require a different format of the compiled bytecode, and such options can be passed to the cross compiler.
If the Python code contains @native or @viper annotations, then you must
specify -march to match the target architecture.
Run ./mpy-cross -h to get a full list of options.
The optimisation level is 0 by default. Optimisation levels are detailed in https://docs.micropython.org/en/latest/library/micropython.html#micropython.opt_level