mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 03:35:33 +00:00
Bug 1258327 - Part 6: Remove ToOperand call from mips-shared and mips64 CodeGenerator. r=hev
This commit is contained in:
parent
f73a73f6bf
commit
0637c368c5
@ -1910,24 +1910,23 @@ CodeGeneratorMIPSShared::visitAsmSelect(LAsmSelect* ins)
|
||||
MIRType mirType = ins->mir()->type();
|
||||
|
||||
Register cond = ToRegister(ins->condExpr());
|
||||
const LAllocation* falseExpr = ins->falseExpr();
|
||||
|
||||
if (mirType == MIRType_Int32) {
|
||||
Register falseExpr = ToRegister(ins->falseExpr());
|
||||
Register out = ToRegister(ins->output());
|
||||
MOZ_ASSERT(ToRegister(ins->trueExpr()) == out, "true expr input is reused for output");
|
||||
masm.as_movz(out, falseExpr, cond);
|
||||
masm.as_movz(out, ToRegister(falseExpr), cond);
|
||||
return;
|
||||
}
|
||||
|
||||
Operand falseExpr = ToOperand(ins->falseExpr());
|
||||
FloatRegister out = ToFloatRegister(ins->output());
|
||||
MOZ_ASSERT(ToFloatRegister(ins->trueExpr()) == out, "true expr input is reused for output");
|
||||
|
||||
if (falseExpr.getTag() == Operand::FREG) {
|
||||
if (falseExpr->isFloatReg()) {
|
||||
if (mirType == MIRType_Float32)
|
||||
masm.as_movz(Assembler::SingleFloat, out, falseExpr.toFReg(), cond);
|
||||
masm.as_movz(Assembler::SingleFloat, out, ToFloatRegister(falseExpr), cond);
|
||||
else if (mirType == MIRType_Double)
|
||||
masm.as_movz(Assembler::DoubleFloat, out, falseExpr.toFReg(), cond);
|
||||
masm.as_movz(Assembler::DoubleFloat, out, ToFloatRegister(falseExpr), cond);
|
||||
else
|
||||
MOZ_CRASH("unhandled type in visitAsmSelect!");
|
||||
} else {
|
||||
@ -1935,9 +1934,9 @@ CodeGeneratorMIPSShared::visitAsmSelect(LAsmSelect* ins)
|
||||
masm.ma_b(cond, cond, &done, Assembler::NonZero, ShortJump);
|
||||
|
||||
if (mirType == MIRType_Float32)
|
||||
masm.loadFloat32(falseExpr.toAddress(), out);
|
||||
masm.loadFloat32(ToAddress(falseExpr), out);
|
||||
else if (mirType == MIRType_Double)
|
||||
masm.loadDouble(falseExpr.toAddress(), out);
|
||||
masm.loadDouble(ToAddress(falseExpr), out);
|
||||
else
|
||||
MOZ_CRASH("unhandled type in visitAsmSelect!");
|
||||
|
||||
|
@ -177,23 +177,48 @@ CodeGeneratorMIPS64::visitUnbox(LUnbox* unbox)
|
||||
unbox->snapshot());
|
||||
}
|
||||
|
||||
Operand input = ToOperand(unbox->getOperand(LUnbox::Input));
|
||||
LAllocation* input = unbox->getOperand(LUnbox::Input);
|
||||
Register result = ToRegister(unbox->output());
|
||||
if (input->isRegister()) {
|
||||
Register inputReg = ToRegister(input);
|
||||
switch (mir->type()) {
|
||||
case MIRType_Int32:
|
||||
masm.unboxInt32(inputReg, result);
|
||||
break;
|
||||
case MIRType_Boolean:
|
||||
masm.unboxBoolean(inputReg, result);
|
||||
break;
|
||||
case MIRType_Object:
|
||||
masm.unboxObject(inputReg, result);
|
||||
break;
|
||||
case MIRType_String:
|
||||
masm.unboxString(inputReg, result);
|
||||
break;
|
||||
case MIRType_Symbol:
|
||||
masm.unboxSymbol(inputReg, result);
|
||||
break;
|
||||
default:
|
||||
MOZ_CRASH("Given MIRType cannot be unboxed.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Address inputAddr = ToAddress(input);
|
||||
switch (mir->type()) {
|
||||
case MIRType_Int32:
|
||||
masm.unboxInt32(input, result);
|
||||
masm.unboxInt32(inputAddr, result);
|
||||
break;
|
||||
case MIRType_Boolean:
|
||||
masm.unboxBoolean(input, result);
|
||||
masm.unboxBoolean(inputAddr, result);
|
||||
break;
|
||||
case MIRType_Object:
|
||||
masm.unboxObject(input, result);
|
||||
masm.unboxObject(inputAddr, result);
|
||||
break;
|
||||
case MIRType_String:
|
||||
masm.unboxString(input, result);
|
||||
masm.unboxString(inputAddr, result);
|
||||
break;
|
||||
case MIRType_Symbol:
|
||||
masm.unboxSymbol(input, result);
|
||||
masm.unboxSymbol(inputAddr, result);
|
||||
break;
|
||||
default:
|
||||
MOZ_CRASH("Given MIRType cannot be unboxed.");
|
||||
@ -284,17 +309,17 @@ CodeGeneratorMIPS64::visitAsmSelectI64(LAsmSelectI64* lir)
|
||||
MOZ_ASSERT(lir->mir()->type() == MIRType_Int64);
|
||||
|
||||
Register cond = ToRegister(lir->condExpr());
|
||||
Operand falseExpr = ToOperand(lir->falseExpr());
|
||||
const LAllocation* falseExpr = lir->falseExpr();
|
||||
|
||||
Register out = ToRegister(lir->output());
|
||||
MOZ_ASSERT(ToRegister(lir->trueExpr()) == out, "true expr is reused for input");
|
||||
|
||||
if (falseExpr.getTag() == Operand::REG) {
|
||||
masm.as_movz(out, falseExpr.toReg(), cond);
|
||||
if (falseExpr->isRegister()) {
|
||||
masm.as_movz(out, ToRegister(falseExpr), cond);
|
||||
} else {
|
||||
Label done;
|
||||
masm.ma_b(cond, cond, &done, Assembler::NonZero, ShortJump);
|
||||
masm.loadPtr(falseExpr.toAddress(), out);
|
||||
masm.loadPtr(ToAddress(falseExpr), out);
|
||||
masm.bind(&done);
|
||||
}
|
||||
}
|
||||
|
@ -1276,21 +1276,10 @@ MacroAssemblerMIPS64Compat::unboxInt32(const ValueOperand& operand, Register des
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::unboxInt32(const Operand& operand, Register dest)
|
||||
MacroAssemblerMIPS64Compat::unboxInt32(Register src, Register dest)
|
||||
{
|
||||
switch(operand.getTag()) {
|
||||
case Operand::REG:
|
||||
ma_dsll(dest, operand.toReg(), Imm32(32));
|
||||
ma_dsra(dest, dest, Imm32(32));
|
||||
break;
|
||||
case Operand::MEM:
|
||||
unboxInt32(operand.toAddress(), dest);
|
||||
break;
|
||||
case Operand::FREG:
|
||||
default:
|
||||
MOZ_CRASH("unexpected operand kind");
|
||||
break;
|
||||
}
|
||||
ma_dsll(dest, src, Imm32(32));
|
||||
ma_dsra(dest, dest, Imm32(32));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1313,20 +1302,9 @@ MacroAssemblerMIPS64Compat::unboxBoolean(const ValueOperand& operand, Register d
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::unboxBoolean(const Operand& operand, Register dest)
|
||||
MacroAssemblerMIPS64Compat::unboxBoolean(Register src, Register dest)
|
||||
{
|
||||
switch(operand.getTag()) {
|
||||
case Operand::REG:
|
||||
ma_dext(dest, operand.toReg(), Imm32(0), Imm32(32));
|
||||
break;
|
||||
case Operand::MEM:
|
||||
unboxBoolean(operand.toAddress(), dest);
|
||||
break;
|
||||
case Operand::FREG:
|
||||
default:
|
||||
MOZ_CRASH("unexpected operand kind");
|
||||
break;
|
||||
}
|
||||
ma_dext(dest, src, Imm32(0), Imm32(32));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1361,20 +1339,9 @@ MacroAssemblerMIPS64Compat::unboxString(const ValueOperand& operand, Register de
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::unboxString(const Operand& operand, Register dest)
|
||||
MacroAssemblerMIPS64Compat::unboxString(Register src, Register dest)
|
||||
{
|
||||
switch(operand.getTag()) {
|
||||
case Operand::REG:
|
||||
ma_dext(dest, operand.toReg(), Imm32(0), Imm32(JSVAL_TAG_SHIFT));
|
||||
break;
|
||||
case Operand::MEM:
|
||||
unboxNonDouble(operand.toAddress(), dest);
|
||||
break;
|
||||
case Operand::FREG:
|
||||
default:
|
||||
MOZ_CRASH("unexpected operand kind");
|
||||
break;
|
||||
}
|
||||
ma_dext(dest, src, Imm32(0), Imm32(JSVAL_TAG_SHIFT));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1384,20 +1351,9 @@ MacroAssemblerMIPS64Compat::unboxString(const Address& src, Register dest)
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::unboxSymbol(const Operand& operand, Register dest)
|
||||
MacroAssemblerMIPS64Compat::unboxSymbol(Register src, Register dest)
|
||||
{
|
||||
switch(operand.getTag()) {
|
||||
case Operand::REG:
|
||||
ma_dext(dest, operand.toReg(), Imm32(0), Imm32(JSVAL_TAG_SHIFT));
|
||||
break;
|
||||
case Operand::MEM:
|
||||
unboxNonDouble(operand.toAddress(), dest);
|
||||
break;
|
||||
case Operand::FREG:
|
||||
default:
|
||||
MOZ_CRASH("unexpected operand kind");
|
||||
break;
|
||||
}
|
||||
ma_dext(dest, src, Imm32(0), Imm32(JSVAL_TAG_SHIFT));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1413,20 +1369,9 @@ MacroAssemblerMIPS64Compat::unboxObject(const ValueOperand& src, Register dest)
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::unboxObject(const Operand& src, Register dest)
|
||||
MacroAssemblerMIPS64Compat::unboxObject(Register src, Register dest)
|
||||
{
|
||||
switch(src.getTag()) {
|
||||
case Operand::REG:
|
||||
ma_dext(dest, src.toReg(), Imm32(0), Imm32(JSVAL_TAG_SHIFT));
|
||||
break;
|
||||
case Operand::MEM:
|
||||
unboxNonDouble(src.toAddress(), dest);
|
||||
break;
|
||||
case Operand::FREG:
|
||||
default:
|
||||
MOZ_CRASH("unexpected operand kind");
|
||||
break;
|
||||
}
|
||||
ma_dext(dest, src, Imm32(0), Imm32(JSVAL_TAG_SHIFT));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -341,23 +341,24 @@ class MacroAssemblerMIPS64Compat : public MacroAssemblerMIPS64
|
||||
void unboxNonDouble(const Address& src, Register dest);
|
||||
void unboxNonDouble(const BaseIndex& src, Register dest);
|
||||
void unboxInt32(const ValueOperand& operand, Register dest);
|
||||
void unboxInt32(const Operand& operand, Register dest);
|
||||
void unboxInt32(Register src, Register dest);
|
||||
void unboxInt32(const Address& src, Register dest);
|
||||
void unboxInt32(const BaseIndex& src, Register dest);
|
||||
void unboxBoolean(const ValueOperand& operand, Register dest);
|
||||
void unboxBoolean(const Operand& operand, Register dest);
|
||||
void unboxBoolean(Register src, Register dest);
|
||||
void unboxBoolean(const Address& src, Register dest);
|
||||
void unboxBoolean(const BaseIndex& src, Register dest);
|
||||
void unboxDouble(const ValueOperand& operand, FloatRegister dest);
|
||||
void unboxDouble(Register src, Register dest);
|
||||
void unboxDouble(const Address& src, FloatRegister dest);
|
||||
void unboxString(const ValueOperand& operand, Register dest);
|
||||
void unboxString(const Operand& operand, Register dest);
|
||||
void unboxString(Register src, Register dest);
|
||||
void unboxString(const Address& src, Register dest);
|
||||
void unboxSymbol(const ValueOperand& src, Register dest);
|
||||
void unboxSymbol(const Operand& src, Register dest);
|
||||
void unboxSymbol(Register src, Register dest);
|
||||
void unboxSymbol(const Address& src, Register dest);
|
||||
void unboxObject(const ValueOperand& src, Register dest);
|
||||
void unboxObject(const Operand& src, Register dest);
|
||||
void unboxObject(Register src, Register dest);
|
||||
void unboxObject(const Address& src, Register dest);
|
||||
void unboxObject(const BaseIndex& src, Register dest) { unboxNonDouble(src, dest); }
|
||||
void unboxValue(const ValueOperand& src, AnyRegister dest);
|
||||
|
Loading…
Reference in New Issue
Block a user