Skip to content
Snippets Groups Projects
  1. Sep 15, 2018
  2. Aug 17, 2018
  3. Aug 16, 2018
  4. Dec 09, 2016
    • Damien George's avatar
      py/asm: Remove need for dummy_data when doing initial assembler passes. · 155fdc74
      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).
      155fdc74
    • Damien George's avatar
      py: Add inline Xtensa assembler. · f76b1bfa
      Damien George authored
      This patch adds the MICROPY_EMIT_INLINE_XTENSA option, which, when
      enabled, allows the @micropython.asm_xtensa decorator to be used.
      
      The following opcodes are currently supported (ax is a register, a0-a15):
      
          ret_n()
          callx0(ax)
          j(label)
          jx(ax)
      
          beqz(ax, label)
          bnez(ax, label)
          mov(ax, ay)
          movi(ax, imm) # imm can be full 32-bit, uses l32r if needed
      
          and_(ax, ay, az)
          or_(ax, ay, az)
          xor(ax, ay, az)
          add(ax, ay, az)
          sub(ax, ay, az)
          mull(ax, ay, az)
      
          l8ui(ax, ay, imm)
          l16ui(ax, ay, imm)
          l32i(ax, ay, imm)
          s8i(ax, ay, imm)
          s16i(ax, ay, imm)
          s32i(ax, ay, imm)
          l16si(ax, ay, imm)
          addi(ax, ay, imm)
      
          ball(ax, ay, label)
          bany(ax, ay, label)
          bbc(ax, ay, label)
          bbs(ax, ay, label)
          beq(ax, ay, label)
          bge(ax, ay, label)
          bgeu(ax, ay, label)
          blt(ax, ay, label)
          bnall(ax, ay, label)
          bne(ax, ay, label)
          bnone(ax, ay, label)
      
      Upon entry to the assembly function the registers a0, a12, a13, a14 are
      pushed to the stack and the stack pointer (a1) decreased by 16.  Upon
      exit, these registers and the stack pointer are restored, and ret.n is
      executed to return to the caller (caller address is in a0).
      
      Note that the ABI for the Xtensa emitters is non-windowing.
      f76b1bfa
    • Damien George's avatar
      fcac4b07
Loading