- Mar 08, 2019
-
-
Damien George authored
This commit adds support for saving and loading .mpy files that contain native code (native, viper and inline-asm). A lot of the ground work was already done for this in the form of removing pointers from generated native code. The changes here are mainly to link in qstr values to the native code, and change the format of .mpy files to contain native code blocks (possibly mixed with bytecode). A top-level summary: - @micropython.native, @micropython.viper and @micropython.asm_thumb/ asm_xtensa are now allowed in .py files when compiling to .mpy, and they work transparently to the user. - Entire .py files can be compiled to native via mpy-cross -X emit=native and for the most part the generated .mpy files should work the same as their bytecode version. - The .mpy file format is changed to 1) specify in the header if the file contains native code and if so the architecture (eg x86, ARMV7M, Xtensa); 2) for each function block the kind of code is specified (bytecode, native, viper, asm). - When native code is loaded from a .mpy file the native code must be modified (in place) to link qstr values in, just like bytecode (see py/persistentcode.c:arch_link_qstr() function). In addition, this now defines a public, native ABI for dynamically loadable native code generated by other languages, like C.
-
- Oct 13, 2018
-
-
Damien George authored
All architectures now have a dedicated register to hold the pointer to the native function table mp_fun_table, and so they all need to load this register at the start of the native function. This commit makes the loading of this register uniform across architectures by passing the pointer in the constant table for the native function, and then loading the register from the constant table. Doing it this way means that the pointer is not stored in the assembly code, helping to make the code more portable.
-
Damien George authored
Instead of storing the function pointer directly in the assembly code. This makes the generated code more independent of the runtime (so easier to relocate the code), and reduces the generated code size.
-
Damien George authored
The esp register is always a fixed distance below ebp, and using esp to reference locals on the stack frees up the ebp register for general purpose use (which is important for an architecture with only 8 user registers).
-
- Oct 01, 2018
-
-
Damien George authored
-
- Sep 27, 2018
-
-
Damien George authored
After the previous commit this macro is no longer needed by the native emitter because live heap pointers are no longer stored in generated native machine code.
-
- Sep 14, 2018
-
-
Damien George authored
-
- Aug 16, 2018
-
-
Damien George authored
Useful for position independent code, and implementing state machines.
-
- Aug 04, 2018
-
-
Damien George authored
-
Damien George authored
On x86 archs (both 32 and 64 bit) a bool return value only sets the 8-bit al register, and the higher bits of the ax register have an undefined value. When testing the return value of such cases it is required to just test al for zero/non-zero. On the other hand, checking for truth or zero/non-zero on an integer return value requires checking all bits of the register. These two cases must be distinguished and handled correctly in generated native code. This patch makes sure of this. For other supported native archs (ARM, Thumb2, Xtensa) there is no such distinction and this patch does not change anything for them.
-
- Feb 24, 2018
-
-
Damien George authored
All callers of the asm entry function guarantee that num_locals>=0, so no need to add an explicit check for it. Use an assertion instead. Also, the signature of asm_x86_entry is changed to match the other asm entry functions.
-
- Jul 31, 2017
-
-
Alexander Steffen authored
There were several different spellings of MicroPython present in comments, when there should be only one.
-
- Dec 09, 2016
-
-
Damien George authored
-
Damien George authored
For all but the last pass the assembler only needs to count how much space is needed for the machine code, it doesn't actually need to emit anything. The dummy_data just uses unnecessary RAM and without it the code is not any more complex (and code size does not increase for Thumb and Xtensa archs).
-
- Nov 27, 2016
-
-
Damien George authored
All assemblers should "derive" from mp_asm_base_t.
-
- Nov 27, 2015
-
-
Damien George authored
-
- Jun 04, 2015
-
-
Damien George authored
-
- Apr 07, 2015
-
-
Damien George authored
This patch gets full function argument passing working with native emitter. Includes named args, keyword args, default args, var args and var keyword args. Fully Python compliant. It reuses the bytecode mp_setup_code_state function to do all the hard work. This function is slightly adjusted to accommodate native calls, and the native emitter is forced a bit to emit similar prelude and code-info as bytecode.
-
- Feb 13, 2015
-
-
Paul Sokolovsky authored
-
- Jan 20, 2015
-
-
Damien George authored
See issue #699.
-
- Jan 16, 2015
-
-
Damien George authored
See issue #699.
-
- Jan 14, 2015
-
-
Damien George authored
Previously was allocating at end of PASS_COMPUTE, and this pass was being run twice, so memory was being allocated twice.
-
- Jan 01, 2015
-
-
Damien George authored
Addresses issue #1022.
-
- Dec 10, 2014
-
-
Damien George authored
-
- Oct 12, 2014
-
-
Damien George authored
Viper can now do: ptr8(buf)[0], which loads a byte from a buffer using machine instructions.
-
Damien George authored
-
- Sep 29, 2014
-
-
Damien George authored
This included a bit of restructuring of the assembler backends. Note that the ARM backend is missing a few functions and won't compile.
-
Damien George authored
-
Damien George authored
-
- Sep 08, 2014
-
-
Damien George authored
-
- Sep 06, 2014
-
-
Damien George authored
-
Damien George authored
Fix some bugs with x86 stack and saving registers correctly.
-
Damien George authored
-