diff options
Diffstat (limited to 'src/lj_opt_narrow.c')
-rw-r--r-- | src/lj_opt_narrow.c | 12 |
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) | |||
555 | TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc) | 555 | TRef 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. */ |
576 | TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc) | 576 | TRef 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))) { |