@@ -399,6 +399,8 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
399399
400400#include "py/asmarm.h"
401401
402+ #define ASM_WORD_SIZE (4)
403+
402404#define EXPORT_FUN (name ) emit_native_arm_##name
403405
404406#define REG_RET ASM_ARM_REG_R0
@@ -423,12 +425,16 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
423425#define ASM_NEW asm_arm_new
424426#define ASM_FREE asm_arm_free
425427#define ASM_GET_CODE asm_arm_get_code
428+ #define ASM_GET_CODE_POS asm_arm_get_code_pos
426429#define ASM_GET_CODE_SIZE asm_arm_get_code_size
427430#define ASM_START_PASS asm_arm_start_pass
428431#define ASM_END_PASS asm_arm_end_pass
429432#define ASM_ENTRY asm_arm_entry
430433#define ASM_EXIT asm_arm_exit
431434
435+ #define ASM_ALIGN asm_arm_align
436+ #define ASM_DATA asm_arm_data
437+
432438#define ASM_LABEL_ASSIGN asm_arm_label_assign
433439#define ASM_JUMP asm_arm_b_label
434440#define ASM_JUMP_IF_REG_ZERO (as , reg , label ) \
@@ -468,11 +474,13 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
468474#define ASM_ADD_REG_REG (as , reg_dest , reg_src ) asm_arm_add_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src))
469475#define ASM_SUB_REG_REG (as , reg_dest , reg_src ) asm_arm_sub_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src))
470476
471- #define ASM_LOAD_REG_REG (as , reg_dest , reg_base ) asm_arm_ldr_reg_reg((as), (reg_dest), (reg_base))
477+ #define ASM_LOAD_REG_REG (as , reg_dest , reg_base ) asm_arm_ldr_reg_reg((as), (reg_dest), (reg_base), 0)
478+ #define ASM_LOAD_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) asm_arm_ldr_reg_reg((as), (reg_dest), (reg_base), 4 * (word_offset))
472479#define ASM_LOAD8_REG_REG (as , reg_dest , reg_base ) asm_arm_ldrb_reg_reg((as), (reg_dest), (reg_base))
473480#define ASM_LOAD16_REG_REG (as , reg_dest , reg_base ) asm_arm_ldrh_reg_reg((as), (reg_dest), (reg_base))
474481
475- #define ASM_STORE_REG_REG (as , reg_value , reg_base ) asm_arm_str_reg_reg((as), (reg_value), (reg_base))
482+ #define ASM_STORE_REG_REG (as , reg_value , reg_base ) asm_arm_str_reg_reg((as), (reg_value), (reg_base), 0)
483+ #define ASM_STORE_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) asm_arm_str_reg_reg((as), (reg_dest), (reg_base), 4 * (word_offset))
476484#define ASM_STORE8_REG_REG (as , reg_value , reg_base ) asm_arm_strb_reg_reg((as), (reg_value), (reg_base))
477485#define ASM_STORE16_REG_REG (as , reg_value , reg_base ) asm_arm_strh_reg_reg((as), (reg_value), (reg_base))
478486
@@ -723,6 +731,8 @@ STATIC void emit_native_start_pass(emit_t *emit, pass_kind_t pass, scope_t *scop
723731 #else
724732 #if N_THUMB
725733 ASM_MOV_REG_REG (emit -> as , ASM_THUMB_REG_R4 , REG_ARG_4 );
734+ #elif N_ARM
735+ ASM_MOV_REG_REG (emit -> as , ASM_ARM_REG_R4 , REG_ARG_4 );
726736 #else
727737 ASM_MOV_REG_REG (emit -> as , REG_ARG_5 , REG_ARG_4 );
728738 #endif
@@ -750,6 +760,10 @@ STATIC void emit_native_start_pass(emit_t *emit, pass_kind_t pass, scope_t *scop
750760 asm_thumb_op16 (emit -> as , 0xb400 | (1 << ASM_THUMB_REG_R4 )); // push 5th arg
751761 asm_thumb_bl_ind (emit -> as , mp_fun_table [MP_F_SETUP_CODE_STATE ], MP_F_SETUP_CODE_STATE , ASM_THUMB_REG_R4 );
752762 asm_thumb_op16 (emit -> as , 0xbc00 | (1 << REG_RET )); // pop dummy (was 5th arg)
763+ #elif N_ARM
764+ asm_arm_push (emit -> as , 1 << ASM_ARM_REG_R4 ); // push 5th arg
765+ asm_arm_bl_ind (emit -> as , mp_fun_table [MP_F_SETUP_CODE_STATE ], MP_F_SETUP_CODE_STATE , ASM_ARM_REG_R4 );
766+ asm_arm_pop (emit -> as , 1 << REG_RET ); // pop dummy (was 5th arg)
753767 #else
754768 ASM_CALL_IND (emit -> as , mp_fun_table [MP_F_SETUP_CODE_STATE ], MP_F_SETUP_CODE_STATE );
755769 #endif
0 commit comments