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(MUL KNUM KNUM)
LJFOLD(DIV KNUM KNUM)
LJFOLD(NEG KNUM KNUM)
LJFOLD(ABS KNUM KNUM)
LJFOLD(ATAN2 KNUM KNUM)
LJFOLD(LDEXP KNUM KNUM)
LJFOLD(MIN KNUM KNUM)
@ -187,6 +185,15 @@ LJFOLDF(kfold_numarith)
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)
LJFOLDF(kfold_ldexp)
{
@ -916,13 +923,13 @@ LJFOLDF(shortcut_round)
return NEXTFOLD;
}
LJFOLD(ABS ABS KNUM)
LJFOLD(ABS ABS FLOAD)
LJFOLDF(shortcut_left)
{
return LEFTFOLD; /* f(g(x)) ==> g(x) */
}
LJFOLD(ABS NEG KNUM)
LJFOLD(ABS NEG FLOAD)
LJFOLDF(shortcut_dropleft)
{
PHIBARRIER(fleft);