summaryrefslogtreecommitdiff
path: root/src/lj_opt_narrow.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_opt_narrow.c')
-rw-r--r--src/lj_opt_narrow.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lj_opt_narrow.c b/src/lj_opt_narrow.c
index 9bbb2083..2eb56c23 100644
--- a/src/lj_opt_narrow.c
+++ b/src/lj_opt_narrow.c
@@ -11,13 +11,13 @@
11 11
12#if LJ_HASJIT 12#if LJ_HASJIT
13 13
14#include "lj_str.h"
15#include "lj_bc.h" 14#include "lj_bc.h"
16#include "lj_ir.h" 15#include "lj_ir.h"
17#include "lj_jit.h" 16#include "lj_jit.h"
18#include "lj_iropt.h" 17#include "lj_iropt.h"
19#include "lj_trace.h" 18#include "lj_trace.h"
20#include "lj_vm.h" 19#include "lj_vm.h"
20#include "lj_strscan.h"
21 21
22/* Rationale for narrowing optimizations: 22/* Rationale for narrowing optimizations:
23** 23**
@@ -519,11 +519,11 @@ TRef lj_opt_narrow_arith(jit_State *J, TRef rb, TRef rc,
519{ 519{
520 if (tref_isstr(rb)) { 520 if (tref_isstr(rb)) {
521 rb = emitir(IRTG(IR_STRTO, IRT_NUM), rb, 0); 521 rb = emitir(IRTG(IR_STRTO, IRT_NUM), rb, 0);
522 lj_str_tonum(strV(vb), vb); 522 lj_strscan_num(strV(vb), vb);
523 } 523 }
524 if (tref_isstr(rc)) { 524 if (tref_isstr(rc)) {
525 rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0); 525 rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0);
526 lj_str_tonum(strV(vc), vc); 526 lj_strscan_num(strV(vc), vc);
527 } 527 }
528 /* Must not narrow MUL in non-DUALNUM variant, because it loses -0. */ 528 /* Must not narrow MUL in non-DUALNUM variant, because it loses -0. */
529 if ((op >= IR_ADD && op <= (LJ_DUALNUM ? IR_MUL : IR_SUB)) && 529 if ((op >= IR_ADD && op <= (LJ_DUALNUM ? IR_MUL : IR_SUB)) &&
@@ -541,7 +541,7 @@ TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc)
541{ 541{
542 if (tref_isstr(rc)) { 542 if (tref_isstr(rc)) {
543 rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0); 543 rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0);
544 lj_str_tonum(strV(vc), vc); 544 lj_strscan_num(strV(vc), vc);
545 } 545 }
546 if (tref_isinteger(rc)) { 546 if (tref_isinteger(rc)) {
547 if ((uint32_t)numberVint(vc) != 0x80000000u) 547 if ((uint32_t)numberVint(vc) != 0x80000000u)
@@ -555,7 +555,7 @@ TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc)
555TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc) 555TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc)
556{ 556{
557 TRef tmp; 557 TRef tmp;
558 if (tvisstr(vc) && !lj_str_tonum(strV(vc), vc)) 558 if (tvisstr(vc) && !lj_strscan_num(strV(vc), vc))
559 lj_trace_err(J, LJ_TRERR_BADTYPE); 559 lj_trace_err(J, LJ_TRERR_BADTYPE);
560 if ((LJ_DUALNUM || (J->flags & JIT_F_OPT_NARROW)) && 560 if ((LJ_DUALNUM || (J->flags & JIT_F_OPT_NARROW)) &&
561 tref_isinteger(rb) && tref_isinteger(rc) && 561 tref_isinteger(rb) && tref_isinteger(rc) &&
@@ -575,7 +575,7 @@ TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc)
575/* Narrowing of power operator or math.pow. */ 575/* Narrowing of power operator or math.pow. */
576TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc) 576TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc)
577{ 577{
578 if (tvisstr(vc) && !lj_str_tonum(strV(vc), vc)) 578 if (tvisstr(vc) && !lj_strscan_num(strV(vc), vc))
579 lj_trace_err(J, LJ_TRERR_BADTYPE); 579 lj_trace_err(J, LJ_TRERR_BADTYPE);
580 /* Narrowing must be unconditional to preserve (-x)^i semantics. */ 580 /* Narrowing must be unconditional to preserve (-x)^i semantics. */
581 if (tvisint(vc) || numisint(numV(vc))) { 581 if (tvisint(vc) || numisint(numV(vc))) {