diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_opt_split.c | 21 |
1 files changed, 0 insertions, 21 deletions
diff --git a/src/lj_opt_split.c b/src/lj_opt_split.c index e526b49d..7925cfa5 100644 --- a/src/lj_opt_split.c +++ b/src/lj_opt_split.c | |||
@@ -403,27 +403,6 @@ static void split_ir(jit_State *J) | |||
403 | hi = split_call_li(J, hisubst, oir, ir, IRCALL_lj_vm_powi); | 403 | hi = split_call_li(J, hisubst, oir, ir, IRCALL_lj_vm_powi); |
404 | break; | 404 | break; |
405 | case IR_FPMATH: | 405 | case IR_FPMATH: |
406 | /* Try to rejoin pow from EXP2, MUL and LOG2. */ | ||
407 | if (nir->op2 == IRFPM_EXP2 && nir->op1 > J->loopref) { | ||
408 | IRIns *irp = IR(nir->op1); | ||
409 | if (irp->o == IR_CALLN && irp->op2 == IRCALL_softfp_mul) { | ||
410 | IRIns *irm4 = IR(irp->op1); | ||
411 | IRIns *irm3 = IR(irm4->op1); | ||
412 | IRIns *irm12 = IR(irm3->op1); | ||
413 | IRIns *irl1 = IR(irm12->op1); | ||
414 | if (irm12->op1 > J->loopref && irl1->o == IR_CALLN && | ||
415 | irl1->op2 == IRCALL_lj_vm_log2) { | ||
416 | IRRef tmp = irl1->op1; /* Recycle first two args from LOG2. */ | ||
417 | IRRef arg3 = irm3->op2, arg4 = irm4->op2; | ||
418 | J->cur.nins--; | ||
419 | tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, arg3); | ||
420 | tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, arg4); | ||
421 | ir->prev = tmp = split_emit(J, IRTI(IR_CALLN), tmp, IRCALL_pow); | ||
422 | hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp); | ||
423 | break; | ||
424 | } | ||
425 | } | ||
426 | } | ||
427 | hi = split_call_l(J, hisubst, oir, ir, IRCALL_lj_vm_floor + ir->op2); | 406 | hi = split_call_l(J, hisubst, oir, ir, IRCALL_lj_vm_floor + ir->op2); |
428 | break; | 407 | break; |
429 | case IR_LDEXP: | 408 | case IR_LDEXP: |