diff options
author | Mike Pall <mike> | 2011-05-27 02:03:02 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-05-27 02:03:02 +0200 |
commit | 7683f39786ab05f02dc20307a49dfaf1a1972d7d (patch) | |
tree | 1f28dd67667291f63a0d528830cab0b65df4c7d5 /src/lj_opt_fold.c | |
parent | 7bad42a3ba453311334f8e0b4e4a4ea24c13b979 (diff) | |
download | luajit-7683f39786ab05f02dc20307a49dfaf1a1972d7d.tar.gz luajit-7683f39786ab05f02dc20307a49dfaf1a1972d7d.tar.bz2 luajit-7683f39786ab05f02dc20307a49dfaf1a1972d7d.zip |
ARM: Fix math.ldexp() recording and folding.
Diffstat (limited to '')
-rw-r--r-- | src/lj_opt_fold.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 2e61abe4..f2980e6f 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -8,6 +8,8 @@ | |||
8 | #define lj_opt_fold_c | 8 | #define lj_opt_fold_c |
9 | #define LUA_CORE | 9 | #define LUA_CORE |
10 | 10 | ||
11 | #include <math.h> | ||
12 | |||
11 | #include "lj_obj.h" | 13 | #include "lj_obj.h" |
12 | 14 | ||
13 | #if LJ_HASJIT | 15 | #if LJ_HASJIT |
@@ -177,6 +179,17 @@ LJFOLDF(kfold_numarith) | |||
177 | return lj_ir_knum(J, y); | 179 | return lj_ir_knum(J, y); |
178 | } | 180 | } |
179 | 181 | ||
182 | LJFOLD(LDEXP KNUM KINT) | ||
183 | LJFOLDF(kfold_ldexp) | ||
184 | { | ||
185 | #if LJ_TARGET_X86ORX64 | ||
186 | UNUSED(J); | ||
187 | return NEXTFOLD; | ||
188 | #else | ||
189 | return lj_ir_knum(J, ldexp(knumleft, fright->i)); | ||
190 | #endif | ||
191 | } | ||
192 | |||
180 | LJFOLD(FPMATH KNUM any) | 193 | LJFOLD(FPMATH KNUM any) |
181 | LJFOLDF(kfold_fpmath) | 194 | LJFOLDF(kfold_fpmath) |
182 | { | 195 | { |
@@ -839,9 +852,11 @@ LJFOLDF(simplify_numpow_kx) | |||
839 | lua_Number n = knumleft; | 852 | lua_Number n = knumleft; |
840 | if (n == 2.0) { /* 2.0 ^ i ==> ldexp(1.0, tonum(i)) */ | 853 | if (n == 2.0) { /* 2.0 ^ i ==> ldexp(1.0, tonum(i)) */ |
841 | fins->o = IR_CONV; | 854 | fins->o = IR_CONV; |
855 | #if LJ_TARGET_X86ORX64 | ||
842 | fins->op1 = fins->op2; | 856 | fins->op1 = fins->op2; |
843 | fins->op2 = IRCONV_NUM_INT; | 857 | fins->op2 = IRCONV_NUM_INT; |
844 | fins->op2 = (IRRef1)lj_opt_fold(J); | 858 | fins->op2 = (IRRef1)lj_opt_fold(J); |
859 | #endif | ||
845 | fins->op1 = (IRRef1)lj_ir_knum_one(J); | 860 | fins->op1 = (IRRef1)lj_ir_knum_one(J); |
846 | fins->o = IR_LDEXP; | 861 | fins->o = IR_LDEXP; |
847 | return RETRYFOLD; | 862 | return RETRYFOLD; |