diff options
author | Mike Pall <mike> | 2017-02-20 02:51:31 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2017-02-20 02:51:31 +0100 |
commit | 4416e885d28c0f49d2c7bb3f9630ab23c22fbc9a (patch) | |
tree | 23a968e51205a9f9ccf254ea96a9e100af87499c | |
parent | 019fb9d1e92b6521a3db2c15c8d0f6922d5250e6 (diff) | |
download | luajit-4416e885d28c0f49d2c7bb3f9630ab23c22fbc9a.tar.gz luajit-4416e885d28c0f49d2c7bb3f9630ab23c22fbc9a.tar.bz2 luajit-4416e885d28c0f49d2c7bb3f9630ab23c22fbc9a.zip |
Fix FOLD rules for math.abs() and FP negation.
Broken since SIMD constants were switched to IR_FLOAD REF_NIL.
-rw-r--r-- | src/lj_opt_fold.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 11f670b2..408811f2 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -173,8 +173,6 @@ LJFOLD(ADD KNUM KNUM) | |||
173 | LJFOLD(SUB KNUM KNUM) | 173 | LJFOLD(SUB KNUM KNUM) |
174 | LJFOLD(MUL KNUM KNUM) | 174 | LJFOLD(MUL KNUM KNUM) |
175 | LJFOLD(DIV KNUM KNUM) | 175 | LJFOLD(DIV KNUM KNUM) |
176 | LJFOLD(NEG KNUM KNUM) | ||
177 | LJFOLD(ABS KNUM KNUM) | ||
178 | LJFOLD(ATAN2 KNUM KNUM) | 176 | LJFOLD(ATAN2 KNUM KNUM) |
179 | LJFOLD(LDEXP KNUM KNUM) | 177 | LJFOLD(LDEXP KNUM KNUM) |
180 | LJFOLD(MIN KNUM KNUM) | 178 | LJFOLD(MIN KNUM KNUM) |
@@ -187,6 +185,15 @@ LJFOLDF(kfold_numarith) | |||
187 | return lj_ir_knum(J, y); | 185 | return lj_ir_knum(J, y); |
188 | } | 186 | } |
189 | 187 | ||
188 | LJFOLD(NEG KNUM FLOAD) | ||
189 | LJFOLD(ABS KNUM FLOAD) | ||
190 | LJFOLDF(kfold_numabsneg) | ||
191 | { | ||
192 | lua_Number a = knumleft; | ||
193 | lua_Number y = lj_vm_foldarith(a, a, fins->o - IR_ADD); | ||
194 | return lj_ir_knum(J, y); | ||
195 | } | ||
196 | |||
190 | LJFOLD(LDEXP KNUM KINT) | 197 | LJFOLD(LDEXP KNUM KINT) |
191 | LJFOLDF(kfold_ldexp) | 198 | LJFOLDF(kfold_ldexp) |
192 | { | 199 | { |
@@ -916,13 +923,13 @@ LJFOLDF(shortcut_round) | |||
916 | return NEXTFOLD; | 923 | return NEXTFOLD; |
917 | } | 924 | } |
918 | 925 | ||
919 | LJFOLD(ABS ABS KNUM) | 926 | LJFOLD(ABS ABS FLOAD) |
920 | LJFOLDF(shortcut_left) | 927 | LJFOLDF(shortcut_left) |
921 | { | 928 | { |
922 | return LEFTFOLD; /* f(g(x)) ==> g(x) */ | 929 | return LEFTFOLD; /* f(g(x)) ==> g(x) */ |
923 | } | 930 | } |
924 | 931 | ||
925 | LJFOLD(ABS NEG KNUM) | 932 | LJFOLD(ABS NEG FLOAD) |
926 | LJFOLDF(shortcut_dropleft) | 933 | LJFOLDF(shortcut_dropleft) |
927 | { | 934 | { |
928 | PHIBARRIER(fleft); | 935 | PHIBARRIER(fleft); |