py: Make asm_arm_less_op take destination register as first arg.
This gets ARM native emitter working againg and addresses issue #858.
This commit is contained in:
parent
b92cbe6129
commit
d4a799f152
@ -287,10 +287,10 @@ void asm_arm_cmp_reg_reg(asm_arm_t *as, uint rd, uint rn) {
|
|||||||
emit_al(as, 0x1500000 | (rd << 16) | rn);
|
emit_al(as, 0x1500000 | (rd << 16) | rn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void asm_arm_less_op(asm_arm_t *as, uint rd, uint rn) {
|
void asm_arm_less_op(asm_arm_t *as, uint rd, uint rn, uint rm) {
|
||||||
asm_arm_cmp_reg_reg(as, rd, rn); // cmp rd, rn
|
asm_arm_cmp_reg_reg(as, rn, rm); // cmp rn, rm
|
||||||
emit(as, asm_arm_op_mov_imm(REG_RET, 1) | ARM_CC_LT); // movlt REG_RET, #1
|
emit(as, asm_arm_op_mov_imm(rd, 1) | ARM_CC_LT); // movlt rd, #1
|
||||||
emit(as, asm_arm_op_mov_imm(REG_RET, 0) | ARM_CC_GE); // movge REG_RET, #0
|
emit(as, asm_arm_op_mov_imm(rd, 0) | ARM_CC_GE); // movge rd, #0
|
||||||
}
|
}
|
||||||
|
|
||||||
void asm_arm_add_reg(asm_arm_t *as, uint rd, uint rn, uint rm) {
|
void asm_arm_add_reg(asm_arm_t *as, uint rd, uint rn, uint rm) {
|
||||||
|
@ -88,7 +88,7 @@ void asm_arm_mov_reg_local(asm_arm_t *as, uint rd, int local_num);
|
|||||||
|
|
||||||
void asm_arm_cmp_reg_i8(asm_arm_t *as, uint rd, int imm);
|
void asm_arm_cmp_reg_i8(asm_arm_t *as, uint rd, int imm);
|
||||||
void asm_arm_cmp_reg_reg(asm_arm_t *as, uint rd, uint rn);
|
void asm_arm_cmp_reg_reg(asm_arm_t *as, uint rd, uint rn);
|
||||||
void asm_arm_less_op(asm_arm_t *as, uint rd, uint rn);
|
void asm_arm_less_op(asm_arm_t *as, uint rd, uint rn, uint rm);
|
||||||
void asm_arm_add_reg(asm_arm_t *as, uint rd, uint rn, uint rm);
|
void asm_arm_add_reg(asm_arm_t *as, uint rd, uint rn, uint rm);
|
||||||
void asm_arm_mov_reg_local_addr(asm_arm_t *as, uint rd, int local_num);
|
void asm_arm_mov_reg_local_addr(asm_arm_t *as, uint rd, int local_num);
|
||||||
|
|
||||||
|
@ -1514,7 +1514,7 @@ STATIC void emit_native_binary_op(emit_t *emit, mp_binary_op_t op) {
|
|||||||
asm_thumb_mov_rlo_i8(emit->as, REG_RET, 0); // if r0 >= r1
|
asm_thumb_mov_rlo_i8(emit->as, REG_RET, 0); // if r0 >= r1
|
||||||
asm_thumb_mov_rlo_i8(emit->as, REG_RET, 1); // if r0 < r1
|
asm_thumb_mov_rlo_i8(emit->as, REG_RET, 1); // if r0 < r1
|
||||||
#elif N_ARM
|
#elif N_ARM
|
||||||
asm_arm_less_op(emit->as, REG_ARG_2, REG_ARG_3);
|
asm_arm_less_op(emit->as, REG_RET, REG_ARG_2, REG_ARG_3);
|
||||||
#else
|
#else
|
||||||
#error not implemented
|
#error not implemented
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user