diff options
author | Damien George <damien.p.george@gmail.com> | 2016-01-15 15:20:43 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-01-27 14:27:10 +0000 |
commit | 8f54c08691faa3dd859852d211230fd7d9791abd (patch) | |
tree | 5cc82db6ea4d9d6538c6a876a09592a85fca4242 /py/emitinlinethumb.c | |
parent | 3d42aa07dd6e94942b3721ee42ba5454cd0edf55 (diff) | |
download | micropython-8f54c08691faa3dd859852d211230fd7d9791abd.tar.gz micropython-8f54c08691faa3dd859852d211230fd7d9791abd.zip |
py/inlineasm: Add ability to specify return type of asm_thumb funcs.
Supported return types are: object, bool, int, uint.
For example:
@micropython.asm_thumb
def foo(r0, r1) -> uint:
add(r0, r0, r1)
Diffstat (limited to 'py/emitinlinethumb.c')
-rw-r--r-- | py/emitinlinethumb.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/py/emitinlinethumb.c b/py/emitinlinethumb.c index 317febe923..c31a931c25 100644 --- a/py/emitinlinethumb.c +++ b/py/emitinlinethumb.c @@ -84,13 +84,14 @@ STATIC void emit_inline_thumb_start_pass(emit_inline_asm_t *emit, pass_kind_t pa asm_thumb_entry(emit->as, 0); } -STATIC void emit_inline_thumb_end_pass(emit_inline_asm_t *emit) { +STATIC void emit_inline_thumb_end_pass(emit_inline_asm_t *emit, mp_uint_t type_sig) { asm_thumb_exit(emit->as); asm_thumb_end_pass(emit->as); if (emit->pass == MP_PASS_EMIT) { void *f = asm_thumb_get_code(emit->as); - mp_emit_glue_assign_native(emit->scope->raw_code, MP_CODE_NATIVE_ASM, f, asm_thumb_get_code_size(emit->as), NULL, emit->scope->num_pos_args, 0, 0); + mp_emit_glue_assign_native(emit->scope->raw_code, MP_CODE_NATIVE_ASM, f, + asm_thumb_get_code_size(emit->as), NULL, emit->scope->num_pos_args, 0, type_sig); } } |