circuitpython/tools
Damien George 1fb01bd6c5 py/emitnative: Put a pointer to the native prelude in child_table array.
Some architectures (like esp32 xtensa) cannot read byte-wise from
executable memory.  This means the prelude for native functions -- which is
usually located after the machine code for the native function -- must be
placed in separate memory that can be read byte-wise.  Prior to this commit
this was achieved by enabling N_PRELUDE_AS_BYTES_OBJ for the emitter and
MICROPY_EMIT_NATIVE_PRELUDE_AS_BYTES_OBJ for the runtime.  The prelude was
then placed in a bytes object, pointed to by the module's constant table.

This behaviour is changed by this commit so that a pointer to the prelude
is stored either in mp_obj_fun_bc_t.child_table, or in
mp_obj_fun_bc_t.child_table[num_children] if num_children > 0.  The reasons
for doing this are:

1. It decouples the native emitter from runtime requirements, the emitted
   code no longer needs to know if the system it runs on can/can't read
   byte-wise from executable memory.

2. It makes all ports have the same emitter behaviour, there is no longer
   the N_PRELUDE_AS_BYTES_OBJ option.

3. The module's constant table is now used only for actual constants in the
   Python code.  This allows further optimisations to be done with the
   constants (eg constant deduplication).

Code size change for those ports that enable the native emitter:
   unix x64:   +80 +0.015%
      stm32:   +24 +0.004% PYBV10
    esp8266:   +88 +0.013% GENERIC
      esp32:   -20 -0.002% GENERIC[incl -112(data)]
        rp2:   +32 +0.005% PICO

Signed-off-by: Damien George <damien@micropython.org>
2022-05-17 16:44:49 +10:00
..
autobuild tools/autobuild: Update for ports/renesas-ra. 2022-05-06 17:15:21 +09:00
mpremote tools/mpremote: Add option to mount cmd to allow "unsafe" symlinks. 2022-04-11 15:15:04 +10:00
.gitattributes micropython-upip: Mark as binary file and re-commit. 2015-06-06 23:09:23 +03:00
.gitignore tools: check-in errordeveloper/tinytest@eb2dbc858f 2014-05-08 01:41:21 +03:00
cc1 tools: Add C middle-processor to make builtin tables proper hash tables. 2015-12-31 00:24:33 +00:00
ci.sh tools/ci.sh: For esp8266 CI install esptool 3.3.1. 2022-05-17 16:01:56 +10:00
codeformat.py tools/codeformat.py: Include more ports .c/.h files in formatting. 2022-04-20 16:02:11 +10:00
codestats.sh all: Update Makefiles and others to build with new ports/ dir layout. 2017-09-06 14:09:13 +10:00
dfu.py tools/dfu.py: Make tool work with python3 when parsing DFU files. 2021-11-01 15:46:59 +11:00
file2h.py all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
gen-changelog.sh Rename "Micro Python" to "MicroPython" in REPL, help, readme's and misc. 2015-10-12 00:06:25 +01:00
gen-cpydiff.py tools/gen-cpydiff: Skip Black fmt comments. 2022-03-25 12:13:00 +11:00
gendoc.py all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
insert-usb-ids.py ports: Rename USBD_VID/PID config macros to MICROPY_HW_USB_VID/PID. 2021-08-07 23:13:55 +10:00
makemanifest.py py: Only search frozen modules when '.frozen' is found in sys.path. 2021-12-18 00:01:59 +11:00
metrics.py tools/metrics.py: Add rp2 port to table of ports that can be built. 2021-04-20 21:39:53 +10:00
mpy-tool.py py/emitnative: Put a pointer to the native prelude in child_table array. 2022-05-17 16:44:49 +10:00
mpy_bin2res.py tools/mpy_bin2res: Tools to convert binary resources to Python module. 2017-07-27 14:41:27 +03:00
mpy_cross_all.py all: Remove MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE. 2021-09-16 16:04:03 +10:00
mpy_ld.py py/persistentcode: Remove unicode feature flag from .mpy file. 2022-05-17 12:51:54 +10:00
pyboard.py tools/mpremote: Show progress indicator when copying large files. 2022-04-11 15:04:20 +10:00
pydfu.py all: Update Python formatting to latest Black version 21.12b0. 2021-12-09 12:09:40 +11:00
tinytest-codegen.py tests/basics: Split f-string debug printing to separate file with .exp. 2021-08-26 23:56:02 +10:00
uf2conv.py tools/uf2conv.py: Update to latest version. 2022-02-02 23:43:58 +11:00
uf2families.json tools/uf2conv.py: Update to latest version. 2022-02-02 23:43:58 +11:00
uncrustify.cfg tools/uncrustify: Make sure a space exists after a comma. 2022-05-05 13:30:40 +10:00
upip.py tools/upip.py: Remove unused op_basename() function. 2022-02-25 18:24:03 +11:00
upip_utarfile.py all: Reformat C and Python source code with tools/codeformat.py. 2020-02-28 10:33:03 +11:00
verifygitlog.py tools/verifygitlog.py: Ignore line length in body if it's a URL. 2022-02-18 14:33:33 +11:00