aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_narrow.c
diff options
context:
space:
mode:
authorMike Pall <mike>2022-03-08 19:44:10 +0100
committerMike Pall <mike>2022-03-08 19:44:10 +0100
commit96d6d5032098ea9f0002165394a8774dcaa0c0ce (patch)
tree84712e02c1452d8f0c48a6f506a9aa1ebe0f4a32 /src/lj_opt_narrow.c
parentaa0550e3f0999cc6ef62f7ef80493ebef8c9a2f7 (diff)
downloadluajit-96d6d5032098ea9f0002165394a8774dcaa0c0ce.tar.gz
luajit-96d6d5032098ea9f0002165394a8774dcaa0c0ce.tar.bz2
luajit-96d6d5032098ea9f0002165394a8774dcaa0c0ce.zip
Revert to trival pow() optimizations to prevent inaccuracies.
Diffstat (limited to 'src/lj_opt_narrow.c')
-rw-r--r--src/lj_opt_narrow.c24
1 files changed, 0 insertions, 24 deletions
diff --git a/src/lj_opt_narrow.c b/src/lj_opt_narrow.c
index fe92468e..586f1bc7 100644
--- a/src/lj_opt_narrow.c
+++ b/src/lj_opt_narrow.c
@@ -584,30 +584,6 @@ TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vb, TValue *vc)
584 return emitir(IRTN(IR_SUB), rb, tmp); 584 return emitir(IRTN(IR_SUB), rb, tmp);
585} 585}
586 586
587/* Narrowing of power operator or math.pow. */
588TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vb, TValue *vc)
589{
590 rb = conv_str_tonum(J, rb, vb);
591 rb = lj_ir_tonum(J, rb); /* Left arg is always treated as an FP number. */
592 rc = conv_str_tonum(J, rc, vc);
593 if (tvisint(vc) || numisint(numV(vc))) {
594 int32_t k = numberVint(vc);
595 if (!(k >= -65536 && k <= 65536)) goto force_pow_num;
596 if (!tref_isinteger(rc)) {
597 /* Guarded conversion to integer! */
598 rc = emitir(IRTGI(IR_CONV), rc, IRCONV_INT_NUM|IRCONV_CHECK);
599 }
600 if (!tref_isk(rc)) { /* Range guard: -65536 <= i <= 65536 */
601 TRef tmp = emitir(IRTI(IR_ADD), rc, lj_ir_kint(J, 65536));
602 emitir(IRTGI(IR_ULE), tmp, lj_ir_kint(J, 2*65536));
603 }
604 } else {
605force_pow_num:
606 rc = lj_ir_tonum(J, rc); /* Want POW(num, num), not POW(num, int). */
607 }
608 return emitir(IRTN(IR_POW), rb, rc);
609}
610
611/* -- Predictive narrowing of induction variables ------------------------- */ 587/* -- Predictive narrowing of induction variables ------------------------- */
612 588
613/* Narrow a single runtime value. */ 589/* Narrow a single runtime value. */