aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_opt_fold.c25
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)
173LJFOLD(SUB KNUM KNUM) 173LJFOLD(SUB KNUM KNUM)
174LJFOLD(MUL KNUM KNUM) 174LJFOLD(MUL KNUM KNUM)
175LJFOLD(DIV KNUM KNUM) 175LJFOLD(DIV KNUM KNUM)
176LJFOLD(ATAN2 KNUM KNUM)
177LJFOLD(LDEXP KNUM KNUM) 176LJFOLD(LDEXP KNUM KNUM)
178LJFOLD(MIN KNUM KNUM) 177LJFOLD(MIN KNUM KNUM)
179LJFOLD(MAX KNUM KNUM) 178LJFOLD(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
215LJFOLD(CALLN KNUM any)
216LJFOLDF(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
226LJFOLD(CALLN CARG IRCALL_atan2)
227LJFOLDF(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
216LJFOLD(POW KNUM KINT) 239LJFOLD(POW KNUM KINT)
217LJFOLDF(kfold_numpow) 240LJFOLDF(kfold_numpow)
218{ 241{