Skip to content

Commit b50efbd

Browse files
committed
py/asmxtensa: Optimise asm_xtensa_mov_reg_i32_optimised() for tiny ints.
Signed-off-by: Damien George <damien@micropython.org>
1 parent f52b0d0 commit b50efbd

2 files changed

Lines changed: 6 additions & 3 deletions

File tree

py/asmxtensa.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,9 @@ size_t asm_xtensa_mov_reg_i32(asm_xtensa_t *as, uint reg_dest, uint32_t i32) {
185185
}
186186

187187
void asm_xtensa_mov_reg_i32_optimised(asm_xtensa_t *as, uint reg_dest, uint32_t i32) {
188-
if (SIGNED_FIT12(i32)) {
188+
if (-32 <= (int)i32 && (int)i32 <= 95) {
189+
asm_xtensa_op_movi_n(as, reg_dest, i32);
190+
} else if (SIGNED_FIT12(i32)) {
189191
asm_xtensa_op_movi(as, reg_dest, i32);
190192
} else {
191193
asm_xtensa_mov_reg_i32(as, reg_dest, i32);

py/asmxtensa.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,9 @@ static inline void asm_xtensa_op_movi(asm_xtensa_t *as, uint reg_dest, int32_t i
203203
asm_xtensa_op24(as, ASM_XTENSA_ENCODE_RRI8(2, 10, (imm12 >> 8) & 0xf, reg_dest, imm12 & 0xff));
204204
}
205205

206-
static inline void asm_xtensa_op_movi_n(asm_xtensa_t *as, uint reg_dest, int imm4) {
207-
asm_xtensa_op16(as, ASM_XTENSA_ENCODE_RI7(12, reg_dest, imm4));
206+
// Argument must be in the range (-32 .. 95) inclusive.
207+
static inline void asm_xtensa_op_movi_n(asm_xtensa_t *as, uint reg_dest, int imm7) {
208+
asm_xtensa_op16(as, ASM_XTENSA_ENCODE_RI7(12, reg_dest, imm7));
208209
}
209210

210211
static inline void asm_xtensa_op_mull(asm_xtensa_t *as, uint reg_dest, uint reg_src_a, uint reg_src_b) {

0 commit comments

Comments
 (0)