aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ffrecord.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_ffrecord.c19
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. */ 583static void LJ_FASTCALL recff_math_call(jit_State *J, RecordFFData *rd)
584static 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
598static 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);