Skip to content
Snippets Groups Projects
Commit dd53b121 authored by Damien George's avatar Damien George
Browse files

py/emitinline: Move inline-asm align and data methods to compiler.

These are generic methods that don't depend on the architecture and so
can be handled directly by the compiler.
parent a7fd786a
Branches
No related tags found
No related merge requests found
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "py/emit.h" #include "py/emit.h"
#include "py/compile.h" #include "py/compile.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "py/asmbase.h"
#if MICROPY_ENABLE_COMPILER #if MICROPY_ENABLE_COMPILER
...@@ -3224,7 +3225,8 @@ STATIC void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind ...@@ -3224,7 +3225,8 @@ STATIC void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind
return; return;
} }
if (pass > MP_PASS_SCOPE) { if (pass > MP_PASS_SCOPE) {
EMIT_INLINE_ASM_ARG(align, MP_PARSE_NODE_LEAF_SMALL_INT(pn_arg[0])); mp_asm_base_align((mp_asm_base_t*)comp->emit_inline_asm,
MP_PARSE_NODE_LEAF_SMALL_INT(pn_arg[0]));
} }
} else if (op == MP_QSTR_data) { } else if (op == MP_QSTR_data) {
if (!(n_args >= 2 && MP_PARSE_NODE_IS_SMALL_INT(pn_arg[0]))) { if (!(n_args >= 2 && MP_PARSE_NODE_IS_SMALL_INT(pn_arg[0]))) {
...@@ -3238,7 +3240,8 @@ STATIC void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind ...@@ -3238,7 +3240,8 @@ STATIC void compile_scope_inline_asm(compiler_t *comp, scope_t *scope, pass_kind
compile_syntax_error(comp, nodes[i], "'data' requires integer arguments"); compile_syntax_error(comp, nodes[i], "'data' requires integer arguments");
return; return;
} }
EMIT_INLINE_ASM_ARG(data, bytesize, MP_PARSE_NODE_LEAF_SMALL_INT(pn_arg[j])); mp_asm_base_data((mp_asm_base_t*)comp->emit_inline_asm,
bytesize, MP_PARSE_NODE_LEAF_SMALL_INT(pn_arg[j]));
} }
} }
} else { } else {
......
...@@ -266,8 +266,6 @@ typedef struct _emit_inline_asm_method_table_t { ...@@ -266,8 +266,6 @@ typedef struct _emit_inline_asm_method_table_t {
void (*end_pass)(emit_inline_asm_t *emit, mp_uint_t type_sig); void (*end_pass)(emit_inline_asm_t *emit, mp_uint_t type_sig);
mp_uint_t (*count_params)(emit_inline_asm_t *emit, mp_uint_t n_params, mp_parse_node_t *pn_params); mp_uint_t (*count_params)(emit_inline_asm_t *emit, mp_uint_t n_params, mp_parse_node_t *pn_params);
bool (*label)(emit_inline_asm_t *emit, mp_uint_t label_num, qstr label_id); bool (*label)(emit_inline_asm_t *emit, mp_uint_t label_num, qstr label_id);
void (*align)(emit_inline_asm_t *emit, mp_uint_t align);
void (*data)(emit_inline_asm_t *emit, mp_uint_t bytesize, mp_uint_t val);
void (*op)(emit_inline_asm_t *emit, qstr op, mp_uint_t n_args, mp_parse_node_t *pn_args); void (*op)(emit_inline_asm_t *emit, qstr op, mp_uint_t n_args, mp_parse_node_t *pn_args);
} emit_inline_asm_method_table_t; } emit_inline_asm_method_table_t;
......
...@@ -130,14 +130,6 @@ STATIC bool emit_inline_thumb_label(emit_inline_asm_t *emit, mp_uint_t label_num ...@@ -130,14 +130,6 @@ STATIC bool emit_inline_thumb_label(emit_inline_asm_t *emit, mp_uint_t label_num
return true; return true;
} }
STATIC void emit_inline_thumb_align(emit_inline_asm_t *emit, mp_uint_t align) {
mp_asm_base_align(&emit->as.base, align);
}
STATIC void emit_inline_thumb_data(emit_inline_asm_t *emit, mp_uint_t bytesize, mp_uint_t val) {
mp_asm_base_data(&emit->as.base, bytesize, val);
}
typedef struct _reg_name_t { byte reg; byte name[3]; } reg_name_t; typedef struct _reg_name_t { byte reg; byte name[3]; } reg_name_t;
STATIC const reg_name_t reg_name_table[] = { STATIC const reg_name_t reg_name_table[] = {
{0, "r0\0"}, {0, "r0\0"},
...@@ -823,8 +815,6 @@ const emit_inline_asm_method_table_t emit_inline_thumb_method_table = { ...@@ -823,8 +815,6 @@ const emit_inline_asm_method_table_t emit_inline_thumb_method_table = {
emit_inline_thumb_end_pass, emit_inline_thumb_end_pass,
emit_inline_thumb_count_params, emit_inline_thumb_count_params,
emit_inline_thumb_label, emit_inline_thumb_label,
emit_inline_thumb_align,
emit_inline_thumb_data,
emit_inline_thumb_op, emit_inline_thumb_op,
}; };
......
...@@ -123,14 +123,6 @@ STATIC bool emit_inline_xtensa_label(emit_inline_asm_t *emit, mp_uint_t label_nu ...@@ -123,14 +123,6 @@ STATIC bool emit_inline_xtensa_label(emit_inline_asm_t *emit, mp_uint_t label_nu
return true; return true;
} }
STATIC void emit_inline_xtensa_align(emit_inline_asm_t *emit, mp_uint_t align) {
mp_asm_base_align(&emit->as.base, align);
}
STATIC void emit_inline_xtensa_data(emit_inline_asm_t *emit, mp_uint_t bytesize, mp_uint_t val) {
mp_asm_base_data(&emit->as.base, bytesize, val);
}
typedef struct _reg_name_t { byte reg; byte name[3]; } reg_name_t; typedef struct _reg_name_t { byte reg; byte name[3]; } reg_name_t;
STATIC const reg_name_t reg_name_table[] = { STATIC const reg_name_t reg_name_table[] = {
{0, "a0\0"}, {0, "a0\0"},
...@@ -355,8 +347,6 @@ const emit_inline_asm_method_table_t emit_inline_xtensa_method_table = { ...@@ -355,8 +347,6 @@ const emit_inline_asm_method_table_t emit_inline_xtensa_method_table = {
emit_inline_xtensa_end_pass, emit_inline_xtensa_end_pass,
emit_inline_xtensa_count_params, emit_inline_xtensa_count_params,
emit_inline_xtensa_label, emit_inline_xtensa_label,
emit_inline_xtensa_align,
emit_inline_xtensa_data,
emit_inline_xtensa_op, emit_inline_xtensa_op,
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment