Allow boards to enable the micropython.native
decorator
Adds the `CIRCUITPY_ENABLE_MPY_NATIVE` for `mpconfigboard.mk` that enables the `micropython.native` decorator.
This commit is contained in:
parent
01bf932169
commit
c7195c4bc5
@ -25,3 +25,6 @@ CIRCUITPY_I2CSLAVE = 0
|
|||||||
CIRCUITPY_NETWORK = 0
|
CIRCUITPY_NETWORK = 0
|
||||||
CIRCUITPY_TOUCHIO = 0
|
CIRCUITPY_TOUCHIO = 0
|
||||||
CIRCUITPY_PS2IO = 0
|
CIRCUITPY_PS2IO = 0
|
||||||
|
|
||||||
|
# Enable micropython.native
|
||||||
|
CIRCUITPY_ENABLE_MPY_NATIVE = 1
|
||||||
|
@ -56,8 +56,8 @@
|
|||||||
#define MICROPY_COMP_MODULE_CONST (1)
|
#define MICROPY_COMP_MODULE_CONST (1)
|
||||||
#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (0)
|
#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (0)
|
||||||
#define MICROPY_DEBUG_PRINTERS (0)
|
#define MICROPY_DEBUG_PRINTERS (0)
|
||||||
#define MICROPY_EMIT_INLINE_THUMB (0)
|
#define MICROPY_EMIT_INLINE_THUMB (CIRCUITPY_ENABLE_MPY_NATIVE)
|
||||||
#define MICROPY_EMIT_THUMB (0)
|
#define MICROPY_EMIT_THUMB (CIRCUITPY_ENABLE_MPY_NATIVE)
|
||||||
#define MICROPY_EMIT_X64 (0)
|
#define MICROPY_EMIT_X64 (0)
|
||||||
#define MICROPY_ENABLE_DOC_STRING (0)
|
#define MICROPY_ENABLE_DOC_STRING (0)
|
||||||
#define MICROPY_ENABLE_FINALISER (1)
|
#define MICROPY_ENABLE_FINALISER (1)
|
||||||
|
@ -294,3 +294,10 @@ ifndef CIRCUITPY_BITBANG_APA102
|
|||||||
CIRCUITPY_BITBANG_APA102 = 0
|
CIRCUITPY_BITBANG_APA102 = 0
|
||||||
endif
|
endif
|
||||||
CFLAGS += -DCIRCUITPY_BITBANG_APA102=$(CIRCUITPY_BITBANG_APA102)
|
CFLAGS += -DCIRCUITPY_BITBANG_APA102=$(CIRCUITPY_BITBANG_APA102)
|
||||||
|
|
||||||
|
|
||||||
|
# Enabled micropython.native decorator (experimental)
|
||||||
|
ifndef CIRCUITPY_ENABLE_MPY_NATIVE
|
||||||
|
CIRCUITPY_ENABLE_MPY_NATIVE = 0
|
||||||
|
endif
|
||||||
|
CFLAGS += -DCIRCUITPY_ENABLE_MPY_NATIVE=$(CIRCUITPY_ENABLE_MPY_NATIVE)
|
||||||
|
@ -3207,7 +3207,7 @@ STATIC void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind
|
|||||||
}
|
}
|
||||||
if (pass > MP_PASS_SCOPE) {
|
if (pass > MP_PASS_SCOPE) {
|
||||||
mp_int_t bytesize = MP_PARSE_NODE_LEAF_SMALL_INT(pn_arg[0]);
|
mp_int_t bytesize = MP_PARSE_NODE_LEAF_SMALL_INT(pn_arg[0]);
|
||||||
for (uint j = 1; j < n_args; j++) {
|
for (int j = 1; j < n_args; j++) {
|
||||||
if (!MP_PARSE_NODE_IS_SMALL_INT(pn_arg[j])) {
|
if (!MP_PARSE_NODE_IS_SMALL_INT(pn_arg[j])) {
|
||||||
compile_syntax_error(comp, nodes[i], translate("'data' requires integer arguments"));
|
compile_syntax_error(comp, nodes[i], translate("'data' requires integer arguments"));
|
||||||
return;
|
return;
|
||||||
|
@ -58,6 +58,22 @@
|
|||||||
#define DEBUG_printf(...) (void)0
|
#define DEBUG_printf(...) (void)0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef N_X64
|
||||||
|
#define N_X64 (0)
|
||||||
|
#endif
|
||||||
|
#ifndef N_X86
|
||||||
|
#define N_X86 (0)
|
||||||
|
#endif
|
||||||
|
#ifndef N_THUMB
|
||||||
|
#define N_THUMB (0)
|
||||||
|
#endif
|
||||||
|
#ifndef N_ARM
|
||||||
|
#define N_ARM (0)
|
||||||
|
#endif
|
||||||
|
#ifndef N_XTENSA
|
||||||
|
#define N_XTENSA (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
// wrapper around everything in this file
|
// wrapper around everything in this file
|
||||||
#if N_X64 || N_X86 || N_THUMB || N_ARM || N_XTENSA
|
#if N_X64 || N_X86 || N_THUMB || N_ARM || N_XTENSA
|
||||||
|
|
||||||
@ -443,10 +459,12 @@ STATIC void emit_native_end_pass(emit_t *emit) {
|
|||||||
type_sig |= (emit->local_vtype[i] & 0xf) << (i * 4 + 4);
|
type_sig |= (emit->local_vtype[i] & 0xf) << (i * 4 + 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
mp_emit_glue_assign_native(emit->scope->raw_code,
|
mp_emit_glue_assign_native(emit->scope->raw_code,
|
||||||
emit->do_viper_types ? MP_CODE_NATIVE_VIPER : MP_CODE_NATIVE_PY,
|
emit->do_viper_types ? MP_CODE_NATIVE_VIPER : MP_CODE_NATIVE_PY,
|
||||||
f, f_len, (mp_uint_t*)((byte*)f + emit->const_table_offset),
|
f, f_len, (mp_uint_t*)((byte*)f + emit->const_table_offset),
|
||||||
emit->scope->num_pos_args, emit->scope->scope_flags, type_sig);
|
emit->scope->num_pos_args, emit->scope->scope_flags, type_sig);
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,7 +546,9 @@ STATIC mp_uint_t convert_obj_for_inline_asm(mp_obj_t obj) {
|
|||||||
STATIC mp_obj_t fun_asm_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
STATIC mp_obj_t fun_asm_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
||||||
mp_obj_fun_asm_t *self = self_in;
|
mp_obj_fun_asm_t *self = self_in;
|
||||||
|
|
||||||
|
#pragma GCC diagnostic ignored "-Wint-conversion"
|
||||||
mp_arg_check_num(n_args, n_kw, self->n_args, self->n_args, false);
|
mp_arg_check_num(n_args, n_kw, self->n_args, self->n_args, false);
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
void *fun = MICROPY_MAKE_POINTER_CALLABLE(self->fun_data);
|
void *fun = MICROPY_MAKE_POINTER_CALLABLE(self->fun_data);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user