|
145 | 145 |
|
146 | 146 | #define ASM_LSL_REG(as, reg) asm_x64_shl_r64_cl((as), (reg))
|
147 | 147 | #define ASM_ASR_REG(as, reg) asm_x64_sar_r64_cl((as), (reg))
|
| 148 | +#define ASM_OR_REG_REG(as, reg_dest, reg_src) asm_x64_or_r64_r64((as), (reg_dest), (reg_src)) |
| 149 | +#define ASM_XOR_REG_REG(as, reg_dest, reg_src) asm_x64_xor_r64_r64((as), (reg_dest), (reg_src)) |
| 150 | +#define ASM_AND_REG_REG(as, reg_dest, reg_src) asm_x64_and_r64_r64((as), (reg_dest), (reg_src)) |
148 | 151 | #define ASM_ADD_REG_REG(as, reg_dest, reg_src) asm_x64_add_r64_r64((as), (reg_dest), (reg_src))
|
149 | 152 | #define ASM_SUB_REG_REG(as, reg_dest, reg_src) asm_x64_sub_r64_r64((as), (reg_dest), (reg_src))
|
150 | 153 |
|
@@ -270,6 +273,9 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
|
270 | 273 |
|
271 | 274 | #define ASM_LSL_REG(as, reg) asm_x86_shl_r32_cl((as), (reg))
|
272 | 275 | #define ASM_ASR_REG(as, reg) asm_x86_sar_r32_cl((as), (reg))
|
| 276 | +#define ASM_OR_REG_REG(as, reg_dest, reg_src) asm_x86_or_r32_r32((as), (reg_dest), (reg_src)) |
| 277 | +#define ASM_XOR_REG_REG(as, reg_dest, reg_src) asm_x86_xor_r32_r32((as), (reg_dest), (reg_src)) |
| 278 | +#define ASM_AND_REG_REG(as, reg_dest, reg_src) asm_x86_and_r32_r32((as), (reg_dest), (reg_src)) |
273 | 279 | #define ASM_ADD_REG_REG(as, reg_dest, reg_src) asm_x86_add_r32_r32((as), (reg_dest), (reg_src))
|
274 | 280 | #define ASM_SUB_REG_REG(as, reg_dest, reg_src) asm_x86_sub_r32_r32((as), (reg_dest), (reg_src))
|
275 | 281 |
|
@@ -346,6 +352,9 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
|
346 | 352 |
|
347 | 353 | #define ASM_LSL_REG_REG(as, reg_dest, reg_shift) asm_thumb_format_4((as), ASM_THUMB_FORMAT_4_LSL, (reg_dest), (reg_shift))
|
348 | 354 | #define ASM_ASR_REG_REG(as, reg_dest, reg_shift) asm_thumb_format_4((as), ASM_THUMB_FORMAT_4_ASR, (reg_dest), (reg_shift))
|
| 355 | +#define ASM_OR_REG_REG(as, reg_dest, reg_src) asm_thumb_format_4((as), ASM_THUMB_FORMAT_4_ORR, (reg_dest), (reg_src)) |
| 356 | +#define ASM_XOR_REG_REG(as, reg_dest, reg_src) asm_thumb_format_4((as), ASM_THUMB_FORMAT_4_EOR, (reg_dest), (reg_src)) |
| 357 | +#define ASM_AND_REG_REG(as, reg_dest, reg_src) asm_thumb_format_4((as), ASM_THUMB_FORMAT_4_AND, (reg_dest), (reg_src)) |
349 | 358 | #define ASM_ADD_REG_REG(as, reg_dest, reg_src) asm_thumb_add_rlo_rlo_rlo((as), (reg_dest), (reg_dest), (reg_src))
|
350 | 359 | #define ASM_SUB_REG_REG(as, reg_dest, reg_src) asm_thumb_sub_rlo_rlo_rlo((as), (reg_dest), (reg_dest), (reg_src))
|
351 | 360 |
|
@@ -422,6 +431,9 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
|
422 | 431 |
|
423 | 432 | #define ASM_LSL_REG_REG(as, reg_dest, reg_shift) asm_arm_lsl_reg_reg((as), (reg_dest), (reg_shift))
|
424 | 433 | #define ASM_ASR_REG_REG(as, reg_dest, reg_shift) asm_arm_asr_reg_reg((as), (reg_dest), (reg_shift))
|
| 434 | +#define ASM_OR_REG_REG(as, reg_dest, reg_src) asm_arm_orr_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src)) |
| 435 | +#define ASM_XOR_REG_REG(as, reg_dest, reg_src) asm_arm_eor_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src)) |
| 436 | +#define ASM_AND_REG_REG(as, reg_dest, reg_src) asm_arm_and_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src)) |
425 | 437 | #define ASM_ADD_REG_REG(as, reg_dest, reg_src) asm_arm_add_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src))
|
426 | 438 | #define ASM_SUB_REG_REG(as, reg_dest, reg_src) asm_arm_sub_reg_reg_reg((as), (reg_dest), (reg_dest), (reg_src))
|
427 | 439 |
|
@@ -1769,6 +1781,15 @@ STATIC void emit_native_binary_op(emit_t *emit, mp_binary_op_t op) {
|
1769 | 1781 | ASM_ASR_REG_REG(emit->as, REG_ARG_2, reg_rhs);
|
1770 | 1782 | emit_post_push_reg(emit, VTYPE_INT, REG_ARG_2);
|
1771 | 1783 | #endif
|
| 1784 | + } else if (op == MP_BINARY_OP_OR || op == MP_BINARY_OP_INPLACE_OR) { |
| 1785 | + ASM_OR_REG_REG(emit->as, REG_ARG_2, reg_rhs); |
| 1786 | + emit_post_push_reg(emit, VTYPE_INT, REG_ARG_2); |
| 1787 | + } else if (op == MP_BINARY_OP_XOR || op == MP_BINARY_OP_INPLACE_XOR) { |
| 1788 | + ASM_XOR_REG_REG(emit->as, REG_ARG_2, reg_rhs); |
| 1789 | + emit_post_push_reg(emit, VTYPE_INT, REG_ARG_2); |
| 1790 | + } else if (op == MP_BINARY_OP_AND || op == MP_BINARY_OP_INPLACE_AND) { |
| 1791 | + ASM_AND_REG_REG(emit->as, REG_ARG_2, reg_rhs); |
| 1792 | + emit_post_push_reg(emit, VTYPE_INT, REG_ARG_2); |
1772 | 1793 | } else if (op == MP_BINARY_OP_ADD || op == MP_BINARY_OP_INPLACE_ADD) {
|
1773 | 1794 | ASM_ADD_REG_REG(emit->as, REG_ARG_2, reg_rhs);
|
1774 | 1795 | emit_post_push_reg(emit, VTYPE_INT, REG_ARG_2);
|
|
0 commit comments