diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_opt_fold.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index cefd69c8..ae65e15a 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -173,7 +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(ATAN2 KNUM KNUM) | ||
177 | LJFOLD(LDEXP KNUM KNUM) | 176 | LJFOLD(LDEXP KNUM KNUM) |
178 | LJFOLD(MIN KNUM KNUM) | 177 | LJFOLD(MIN KNUM KNUM) |
179 | LJFOLD(MAX KNUM KNUM) | 178 | LJFOLD(MAX KNUM KNUM) |
@@ -213,6 +212,30 @@ LJFOLDF(kfold_fpmath) | |||
213 | return lj_ir_knum(J, y); | 212 | return lj_ir_knum(J, y); |
214 | } | 213 | } |
215 | 214 | ||
215 | LJFOLD(CALLN KNUM any) | ||
216 | LJFOLDF(kfold_fpcall1) | ||
217 | { | ||
218 | const CCallInfo *ci = &lj_ir_callinfo[fins->op2]; | ||
219 | if (CCI_TYPE(ci) == IRT_NUM) { | ||
220 | double y = ((double (*)(double))ci->func)(knumleft); | ||
221 | return lj_ir_knum(J, y); | ||
222 | } | ||
223 | return NEXTFOLD; | ||
224 | } | ||
225 | |||
226 | LJFOLD(CALLN CARG IRCALL_atan2) | ||
227 | LJFOLDF(kfold_fpcall2) | ||
228 | { | ||
229 | if (irref_isk(fleft->op1) && irref_isk(fleft->op2)) { | ||
230 | const CCallInfo *ci = &lj_ir_callinfo[fins->op2]; | ||
231 | double a = ir_knum(IR(fleft->op1))->n; | ||
232 | double b = ir_knum(IR(fleft->op2))->n; | ||
233 | double y = ((double (*)(double, double))ci->func)(a, b); | ||
234 | return lj_ir_knum(J, y); | ||
235 | } | ||
236 | return NEXTFOLD; | ||
237 | } | ||
238 | |||
216 | LJFOLD(POW KNUM KINT) | 239 | LJFOLD(POW KNUM KINT) |
217 | LJFOLDF(kfold_numpow) | 240 | LJFOLDF(kfold_numpow) |
218 | { | 241 | { |