Age | Commit message (Collapse) | Author | |
---|---|---|---|
2020-10-22 | py: Use unsigned comparison of chars. | Emil Renner Berthing | |
On x86 chars are signed, but we're comparing a char to '0' + unsigned int, which is promoted to an unsigned int. Let's promote the char to unsigned before doing the comparison to avoid weird corner cases. | |||
2020-04-05 | all: Use MP_ERROR_TEXT for all error messages. | Jim Mussared | |
2020-02-28 | all: Reformat C and Python source code with tools/codeformat.py. | Damien George | |
This is run with uncrustify 0.70.1, and black 19.10b0. | |||
2019-03-14 | py/compile: Support multiple inline asm emitters. | Damien George | |
2018-09-20 | py: Shorten error messages by using contractions and some rewording. | Damien George | |
2016-12-09 | py/emitinline: Move common code for end of final pass to compiler. | Damien George | |
This patch moves some common code from the individual inline assemblers to the compiler, the code that calls the emit-glue to assign the machine code to the functions scope. | |||
2016-12-09 | py/emitinline: Move inline-asm align and data methods to compiler. | Damien George | |
These are generic methods that don't depend on the architecture and so can be handled directly by the compiler. | |||
2016-12-09 | py/emitinline: Embed entire asm struct instead of a pointer to it. | Damien George | |
This reduces fragmentation, and memory use by 1 word. But more importantly it means the emit_inline_asm_t struct now "derives" from mp_asm_base. | |||
2016-12-09 | py: Add inline Xtensa assembler. | Damien George | |
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. |