diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_ffrecord.c | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c index 436d5037..42049511 100644 --- a/src/lj_ffrecord.c +++ b/src/lj_ffrecord.c | |||
@@ -563,7 +563,7 @@ static void LJ_FASTCALL recff_math_atan2(jit_State *J, RecordFFData *rd) | |||
563 | { | 563 | { |
564 | TRef tr = lj_ir_tonum(J, J->base[0]); | 564 | TRef tr = lj_ir_tonum(J, J->base[0]); |
565 | TRef tr2 = lj_ir_tonum(J, J->base[1]); | 565 | TRef tr2 = lj_ir_tonum(J, J->base[1]); |
566 | J->base[0] = emitir(IRTN(IR_ATAN2), tr, tr2); | 566 | J->base[0] = lj_ir_call(J, IRCALL_atan2, tr, tr2); |
567 | UNUSED(rd); | 567 | UNUSED(rd); |
568 | } | 568 | } |
569 | 569 | ||
@@ -580,22 +580,7 @@ static void LJ_FASTCALL recff_math_ldexp(jit_State *J, RecordFFData *rd) | |||
580 | UNUSED(rd); | 580 | UNUSED(rd); |
581 | } | 581 | } |
582 | 582 | ||
583 | /* Record math.asin, math.acos, math.atan. */ | 583 | static void LJ_FASTCALL recff_math_call(jit_State *J, RecordFFData *rd) |
584 | static void LJ_FASTCALL recff_math_atrig(jit_State *J, RecordFFData *rd) | ||
585 | { | ||
586 | TRef y = lj_ir_tonum(J, J->base[0]); | ||
587 | TRef x = lj_ir_knum_one(J); | ||
588 | uint32_t ffid = rd->data; | ||
589 | if (ffid != FF_math_atan) { | ||
590 | TRef tmp = emitir(IRTN(IR_MUL), y, y); | ||
591 | tmp = emitir(IRTN(IR_SUB), x, tmp); | ||
592 | tmp = emitir(IRTN(IR_FPMATH), tmp, IRFPM_SQRT); | ||
593 | if (ffid == FF_math_asin) { x = tmp; } else { x = y; y = tmp; } | ||
594 | } | ||
595 | J->base[0] = emitir(IRTN(IR_ATAN2), y, x); | ||
596 | } | ||
597 | |||
598 | static void LJ_FASTCALL recff_math_htrig(jit_State *J, RecordFFData *rd) | ||
599 | { | 584 | { |
600 | TRef tr = lj_ir_tonum(J, J->base[0]); | 585 | TRef tr = lj_ir_tonum(J, J->base[0]); |
601 | J->base[0] = emitir(IRTN(IR_CALLN), tr, rd->data); | 586 | J->base[0] = emitir(IRTN(IR_CALLN), tr, rd->data); |