Fix FOLD rules for math.abs() and FP negation.

Broken since SIMD constants were switched to IR_FLOAD REF_NIL.
This commit is contained in:
Mike Pall 2017-02-20 02:51:31 +01:00
parent 019fb9d1e9
commit 4416e885d2

View File

@ -173,8 +173,6 @@ LJFOLD(ADD KNUM KNUM)
LJFOLD(SUB KNUM KNUM) LJFOLD(SUB KNUM KNUM)
LJFOLD(MUL KNUM KNUM) LJFOLD(MUL KNUM KNUM)
LJFOLD(DIV KNUM KNUM) LJFOLD(DIV KNUM KNUM)
LJFOLD(NEG KNUM KNUM)
LJFOLD(ABS KNUM KNUM)
LJFOLD(ATAN2 KNUM KNUM) LJFOLD(ATAN2 KNUM KNUM)
LJFOLD(LDEXP KNUM KNUM) LJFOLD(LDEXP KNUM KNUM)
LJFOLD(MIN KNUM KNUM) LJFOLD(MIN KNUM KNUM)
@ -187,6 +185,15 @@ LJFOLDF(kfold_numarith)
return lj_ir_knum(J, y); return lj_ir_knum(J, y);
} }
LJFOLD(NEG KNUM FLOAD)
LJFOLD(ABS KNUM FLOAD)
LJFOLDF(kfold_numabsneg)
{
lua_Number a = knumleft;
lua_Number y = lj_vm_foldarith(a, a, fins->o - IR_ADD);
return lj_ir_knum(J, y);
}
LJFOLD(LDEXP KNUM KINT) LJFOLD(LDEXP KNUM KINT)
LJFOLDF(kfold_ldexp) LJFOLDF(kfold_ldexp)
{ {
@ -916,13 +923,13 @@ LJFOLDF(shortcut_round)
return NEXTFOLD; return NEXTFOLD;
} }
LJFOLD(ABS ABS KNUM) LJFOLD(ABS ABS FLOAD)
LJFOLDF(shortcut_left) LJFOLDF(shortcut_left)
{ {
return LEFTFOLD; /* f(g(x)) ==> g(x) */ return LEFTFOLD; /* f(g(x)) ==> g(x) */
} }
LJFOLD(ABS NEG KNUM) LJFOLD(ABS NEG FLOAD)
LJFOLDF(shortcut_dropleft) LJFOLDF(shortcut_dropleft)
{ {
PHIBARRIER(fleft); PHIBARRIER(fleft);