@@ -293,9 +293,8 @@ void asm_xtensa_mov_local_reg(asm_xtensa_t *as, int local_num, uint reg_src);
293293void asm_xtensa_mov_reg_local (asm_xtensa_t * as , uint reg_dest , int local_num );
294294void asm_xtensa_mov_reg_local_addr (asm_xtensa_t * as , uint reg_dest , int local_num );
295295void asm_xtensa_mov_reg_pcrel (asm_xtensa_t * as , uint reg_dest , uint label );
296- void asm_xtensa_l32i_optimised (asm_xtensa_t * as , uint reg_dest , uint reg_base , uint word_offset );
297- void asm_xtensa_s32i_optimised (asm_xtensa_t * as , uint reg_src , uint reg_base , uint word_offset );
298- void asm_xtensa_l16ui_optimised (asm_xtensa_t * as , uint reg_dest , uint reg_base , uint halfword_offset );
296+ void asm_xtensa_load_reg_reg_offset (asm_xtensa_t * as , uint reg_dest , uint reg_base , uint offset , uint operation_size );
297+ void asm_xtensa_store_reg_reg_offset (asm_xtensa_t * as , uint reg_src , uint reg_base , uint offset , uint operation_size );
299298void asm_xtensa_call_ind (asm_xtensa_t * as , uint idx );
300299void asm_xtensa_call_ind_win (asm_xtensa_t * as , uint idx );
301300void asm_xtensa_bit_branch (asm_xtensa_t * as , mp_uint_t reg , mp_uint_t bit , mp_uint_t label , mp_uint_t condition );
@@ -420,32 +419,45 @@ void asm_xtensa_l32r(asm_xtensa_t *as, mp_uint_t reg, mp_uint_t label);
420419#define ASM_MUL_REG_REG (as , reg_dest , reg_src ) asm_xtensa_op_mull((as), (reg_dest), (reg_dest), (reg_src))
421420
422421#define ASM_LOAD_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) ASM_LOAD32_REG_REG_OFFSET((as), (reg_dest), (reg_base), (word_offset))
423- #define ASM_LOAD8_REG_REG (as , reg_dest , reg_base ) asm_xtensa_op_l8ui((as), (reg_dest), (reg_base), 0)
424- #define ASM_LOAD16_REG_REG (as , reg_dest , reg_base ) asm_xtensa_op_l16ui((as), (reg_dest), (reg_base), 0)
425- #define ASM_LOAD16_REG_REG_OFFSET (as , reg_dest , reg_base , uint16_offset ) asm_xtensa_l16ui_optimised((as), (reg_dest), (reg_base), (uint16_offset))
422+ #define ASM_LOAD8_REG_REG (as , reg_dest , reg_base ) ASM_LOAD8_REG_REG_OFFSET((as), (reg_dest), (reg_base), 0)
423+ #define ASM_LOAD8_REG_REG_OFFSET (as , reg_dest , reg_base , byte_offset ) asm_xtensa_load_reg_reg_offset((as), (reg_dest), (reg_base), (byte_offset), 0)
424+ #define ASM_LOAD8_REG_REG_REG (as , reg_dest , reg_base , reg_index ) \
425+ do { \
426+ asm_xtensa_op_add_n((as), (reg_base), (reg_index), (reg_base)); \
427+ asm_xtensa_op_l8ui((as), (reg_dest), (reg_base), 0); \
428+ } while (0)
429+ #define ASM_LOAD16_REG_REG (as , reg_dest , reg_base ) ASM_LOAD16_REG_REG_OFFSET((as), (reg_dest), (reg_base), 0)
430+ #define ASM_LOAD16_REG_REG_OFFSET (as , reg_dest , reg_base , halfword_offset ) asm_xtensa_load_reg_reg_offset((as), (reg_dest), (reg_base), (halfword_offset), 1)
426431#define ASM_LOAD16_REG_REG_REG (as , reg_dest , reg_base , reg_index ) \
427432 do { \
428433 asm_xtensa_op_addx2((as), (reg_base), (reg_index), (reg_base)); \
429434 asm_xtensa_op_l16ui((as), (reg_dest), (reg_base), 0); \
430435 } while (0)
431- #define ASM_LOAD32_REG_REG (as , reg_dest , reg_base ) asm_xtensa_op_l32i_n ((as), (reg_dest), (reg_base), 0)
432- #define ASM_LOAD32_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) asm_xtensa_l32i_optimised ((as), (reg_dest), (reg_base), (word_offset))
436+ #define ASM_LOAD32_REG_REG (as , reg_dest , reg_base ) ASM_LOAD32_REG_REG_OFFSET ((as), (reg_dest), (reg_base), 0)
437+ #define ASM_LOAD32_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) asm_xtensa_load_reg_reg_offset ((as), (reg_dest), (reg_base), (word_offset), 2 )
433438#define ASM_LOAD32_REG_REG_REG (as , reg_dest , reg_base , reg_index ) \
434439 do { \
435440 asm_xtensa_op_addx4((as), (reg_base), (reg_index), (reg_base)); \
436441 asm_xtensa_op_l32i_n((as), (reg_dest), (reg_base), 0); \
437442 } while (0)
438443
439444#define ASM_STORE_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) ASM_STORE32_REG_REG_OFFSET((as), (reg_dest), (reg_base), (word_offset))
440- #define ASM_STORE8_REG_REG (as , reg_src , reg_base ) asm_xtensa_op_s8i((as), (reg_src), (reg_base), 0)
441- #define ASM_STORE16_REG_REG (as , reg_src , reg_base ) asm_xtensa_op_s16i((as), (reg_src), (reg_base), 0)
445+ #define ASM_STORE8_REG_REG (as , reg_src , reg_base ) ASM_STORE8_REG_REG_OFFSET((as), (reg_src), (reg_base), 0)
446+ #define ASM_STORE8_REG_REG_OFFSET (as , reg_src , reg_base , byte_offset ) asm_xtensa_store_reg_reg_offset((as), (reg_src), (reg_base), (byte_offset), 0)
447+ #define ASM_STORE8_REG_REG_REG (as , reg_val , reg_base , reg_index ) \
448+ do { \
449+ asm_xtensa_op_add_n((as), (reg_base), (reg_index), (reg_base)); \
450+ asm_xtensa_op_s8i((as), (reg_val), (reg_base), 0); \
451+ } while (0)
452+ #define ASM_STORE16_REG_REG (as , reg_src , reg_base ) ASM_STORE16_REG_REG_OFFSET((as), (reg_src), (reg_base), 0)
453+ #define ASM_STORE16_REG_REG_OFFSET (as , reg_src , reg_base , halfword_offset ) asm_xtensa_store_reg_reg_offset((as), (reg_src), (reg_base), (halfword_offset), 1)
442454#define ASM_STORE16_REG_REG_REG (as , reg_val , reg_base , reg_index ) \
443455 do { \
444456 asm_xtensa_op_addx2((as), (reg_base), (reg_index), (reg_base)); \
445457 asm_xtensa_op_s16i((as), (reg_val), (reg_base), 0); \
446458 } while (0)
447- #define ASM_STORE32_REG_REG (as , reg_src , reg_base ) asm_xtensa_op_s32i_n ((as), (reg_src), (reg_base), 0)
448- #define ASM_STORE32_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) asm_xtensa_s32i_optimised ((as), (reg_dest), (reg_base), (word_offset))
459+ #define ASM_STORE32_REG_REG (as , reg_src , reg_base ) ASM_STORE32_REG_REG_OFFSET ((as), (reg_src), (reg_base), 0)
460+ #define ASM_STORE32_REG_REG_OFFSET (as , reg_dest , reg_base , word_offset ) asm_xtensa_store_reg_reg_offset ((as), (reg_dest), (reg_base), (word_offset), 2 )
449461#define ASM_STORE32_REG_REG_REG (as , reg_val , reg_base , reg_index ) \
450462 do { \
451463 asm_xtensa_op_addx4((as), (reg_base), (reg_index), (reg_base)); \
0 commit comments