Skip to content
Snippets Groups Projects
  1. Mar 08, 2019
    • Damien George's avatar
      py: Add support to save native, viper and asm code to .mpy files. · 1396a026
      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.
      1396a026
  2. Oct 13, 2018
  3. Sep 27, 2018
  4. Sep 15, 2018
  5. Aug 17, 2018
  6. Aug 16, 2018
  7. Aug 04, 2018
    • Damien George's avatar
      py/emitnative: Fix x86 native zero checks by comparing full word. · 10830059
      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.
      10830059
  8. Nov 15, 2017
  9. Feb 07, 2017
  10. Dec 09, 2016
Loading