aboutsummaryrefslogtreecommitdiff
path: root/py/asmthumb.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-02-25 15:45:55 +0000
committerDamien George <damien.p.george@gmail.com>2015-02-25 15:45:55 +0000
commit534574348e477005b8647e45402d859a0f3db6ca (patch)
treebe3afb6a850b36c9bf438763828ed7c50136d50a /py/asmthumb.h
parent11aa6ba456287d6c80598a7ebbebd2887ce8f5a2 (diff)
py: Make inline assembler raise exception when branch not in range.
Addresses issue #1132.
Diffstat (limited to 'py/asmthumb.h')
-rw-r--r--py/asmthumb.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/py/asmthumb.h b/py/asmthumb.h
index 8d413322f..2dd4dbb99 100644
--- a/py/asmthumb.h
+++ b/py/asmthumb.h
@@ -214,8 +214,10 @@ static inline void asm_thumb_ldrh_rlo_rlo_i5(asm_thumb_t *as, uint rlo_dest, uin
void asm_thumb_mov_reg_reg(asm_thumb_t *as, uint reg_dest, uint reg_src);
void asm_thumb_mov_reg_i16(asm_thumb_t *as, uint mov_op, uint reg_dest, int i16_src);
-void asm_thumb_b_n(asm_thumb_t *as, uint label);
-void asm_thumb_bcc_n(asm_thumb_t *as, int cond, uint label);
+// these return true if the destination is in range, false otherwise
+bool asm_thumb_b_n_label(asm_thumb_t *as, uint label);
+bool asm_thumb_bcc_n_label(asm_thumb_t *as, int cond, uint label);
+bool asm_thumb_bl_label(asm_thumb_t *as, uint label);
void asm_thumb_mov_reg_i32(asm_thumb_t *as, uint reg_dest, mp_uint_t i32_src); // convenience
void asm_thumb_mov_reg_i32_optimised(asm_thumb_t *as, uint reg_dest, int i32_src); // convenience
@@ -224,9 +226,8 @@ void asm_thumb_mov_local_reg(asm_thumb_t *as, int local_num_dest, uint rlo_src);
void asm_thumb_mov_reg_local(asm_thumb_t *as, uint rlo_dest, int local_num); // convenience
void asm_thumb_mov_reg_local_addr(asm_thumb_t *as, uint rlo_dest, int local_num); // convenience
-void asm_thumb_b_label(asm_thumb_t *as, uint label); // convenience ?
+void asm_thumb_b_label(asm_thumb_t *as, uint label); // convenience: picks narrow or wide branch
void asm_thumb_bcc_label(asm_thumb_t *as, int cc, uint label); // convenience: picks narrow or wide branch
-void asm_thumb_bl(asm_thumb_t *as, uint label);
-void asm_thumb_bl_ind(asm_thumb_t *as, void *fun_ptr, uint fun_id, uint reg_temp); // convenience ?
+void asm_thumb_bl_ind(asm_thumb_t *as, void *fun_ptr, uint fun_id, uint reg_temp); // convenience
#endif // __MICROPY_INCLUDED_PY_ASMTHUMB_H__