зеркало из https://github.com/mozilla/gecko-dev.git
merge
This commit is contained in:
Коммит
7cc178a639
|
@ -1624,46 +1624,47 @@ foprnd2(LIns* i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static LIns*
|
static LIns*
|
||||||
demote(LirWriter *out, LIns* i)
|
demote(LirWriter *out, LIns* ins)
|
||||||
{
|
{
|
||||||
if (i->isCall())
|
JS_ASSERT(ins->isF64());
|
||||||
return i->callArgN(0);
|
if (ins->isCall())
|
||||||
if (isfop(i, LIR_i2f) || isfop(i, LIR_u2f))
|
return ins->callArgN(0);
|
||||||
return foprnd1(i);
|
if (isfop(ins, LIR_i2f) || isfop(ins, LIR_u2f))
|
||||||
if (i->isconst())
|
return foprnd1(ins);
|
||||||
return i;
|
JS_ASSERT(ins->isconstf());
|
||||||
JS_ASSERT(i->isconstf());
|
double cf = ins->imm64f();
|
||||||
double cf = i->imm64f();
|
|
||||||
int32_t ci = cf > 0x7fffffff ? uint32_t(cf) : int32_t(cf);
|
int32_t ci = cf > 0x7fffffff ? uint32_t(cf) : int32_t(cf);
|
||||||
return out->insImm(ci);
|
return out->insImm(ci);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
isPromoteInt(LIns* i)
|
isPromoteInt(LIns* ins)
|
||||||
{
|
{
|
||||||
if (isfop(i, LIR_i2f) || i->isconst())
|
if (isfop(ins, LIR_i2f))
|
||||||
return true;
|
return true;
|
||||||
if (!i->isconstf())
|
if (ins->isconstf()) {
|
||||||
return false;
|
jsdouble d = ins->imm64f();
|
||||||
jsdouble d = i->imm64f();
|
return d == jsdouble(jsint(d)) && !JSDOUBLE_IS_NEGZERO(d);
|
||||||
return d == jsdouble(jsint(d)) && !JSDOUBLE_IS_NEGZERO(d);
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
isPromoteUint(LIns* i)
|
isPromoteUint(LIns* ins)
|
||||||
{
|
{
|
||||||
if (isfop(i, LIR_u2f) || i->isconst())
|
if (isfop(ins, LIR_u2f))
|
||||||
return true;
|
return true;
|
||||||
if (!i->isconstf())
|
if (ins->isconstf()) {
|
||||||
return false;
|
jsdouble d = ins->imm64f();
|
||||||
jsdouble d = i->imm64f();
|
return d == jsdouble(jsuint(d)) && !JSDOUBLE_IS_NEGZERO(d);
|
||||||
return d == jsdouble(jsuint(d)) && !JSDOUBLE_IS_NEGZERO(d);
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
isPromote(LIns* i)
|
isPromote(LIns* ins)
|
||||||
{
|
{
|
||||||
return isPromoteInt(i) || isPromoteUint(i);
|
return isPromoteInt(ins) || isPromoteUint(ins);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче