summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-08-17 01:11:22 +1000
committerDamien George <damien.p.george@gmail.com>2018-08-17 14:11:37 +1000
commit1ad44acb1522a44a42bfcb0cd017289918915cbc (patch)
tree63e35061311852541be3e573f524a097f317732f /py
parentfd10a11c6bbed4c237e6f099b0161352b7913fa5 (diff)
py/asmxtensa: Optimise loading local addr and support larger offsets.
Diffstat (limited to 'py')
-rw-r--r--py/asmxtensa.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/py/asmxtensa.c b/py/asmxtensa.c
index d44c310ee..6c7c344f1 100644
--- a/py/asmxtensa.c
+++ b/py/asmxtensa.c
@@ -178,8 +178,13 @@ void asm_xtensa_mov_reg_local(asm_xtensa_t *as, uint reg_dest, int local_num) {
}
void asm_xtensa_mov_reg_local_addr(asm_xtensa_t *as, uint reg_dest, int local_num) {
- asm_xtensa_op_mov_n(as, reg_dest, ASM_XTENSA_REG_A1);
- asm_xtensa_op_addi(as, reg_dest, reg_dest, (4 + local_num) * WORD_SIZE);
+ uint off = (4 + local_num) * WORD_SIZE;
+ if (SIGNED_FIT8(off)) {
+ asm_xtensa_op_addi(as, reg_dest, ASM_XTENSA_REG_A1, off);
+ } else {
+ asm_xtensa_op_movi(as, reg_dest, off);
+ asm_xtensa_op_add(as, reg_dest, reg_dest, ASM_XTENSA_REG_A1);
+ }
}
void asm_xtensa_mov_reg_pcrel(asm_xtensa_t *as, uint reg_dest, uint label) {