Commit 70e18cda authored by André Bargull's avatar André Bargull
Browse files

Bug 1686692 - Part 12: Remove LCompareB. r=jandem

Depends on D101881

Differential Revision: https://phabricator.services.mozilla.com/D101882
parent 0e95ed13
Loading
Loading
Loading
Loading
+0 −27
Original line number Diff line number Diff line
@@ -1481,33 +1481,6 @@ void CodeGenerator::visitCompareFAndBranch(LCompareFAndBranch* comp) {
             comp->ifFalse());
}

void CodeGenerator::visitCompareB(LCompareB* lir) {
  MCompare* mir = lir->mir();

  const ValueOperand lhs = ToValue(lir, LCompareB::Lhs);
  const LAllocation* rhs = lir->rhs();
  const Register output = ToRegister(lir->output());

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);

  Label notBoolean, done;
  masm.branchTestBoolean(Assembler::NotEqual, lhs, &notBoolean);
  {
    if (rhs->isConstant()) {
      masm.cmp32(lhs.payloadReg(), Imm32(rhs->toConstant()->toBoolean()));
    } else {
      masm.cmp32(lhs.payloadReg(), ToRegister(rhs));
    }
    masm.emitSet(JSOpToCondition(mir->compareType(), mir->jsop()), output);
    masm.jump(&done);
  }

  masm.bind(&notBoolean);
  { masm.move32(Imm32(mir->jsop() == JSOp::StrictNe), output); }

  masm.bind(&done);
}

void CodeGenerator::visitBitAndAndBranch(LBitAndAndBranch* baab) {
  ScratchRegisterScope scratch(masm);
  if (baab->right()->isConstant()) {
+0 −24
Original line number Diff line number Diff line
@@ -1412,30 +1412,6 @@ void CodeGenerator::visitCompareFAndBranch(LCompareFAndBranch* comp) {
  emitBranch(cond, comp->ifTrue(), comp->ifFalse());
}

void CodeGenerator::visitCompareB(LCompareB* lir) {
  MCompare* mir = lir->mir();
  const ValueOperand lhs = ToValue(lir, LCompareB::Lhs);
  const LAllocation* rhs = lir->rhs();
  const Register output = ToRegister(lir->output());
  const Assembler::Condition cond =
      JSOpToCondition(mir->compareType(), mir->jsop());

  vixl::UseScratchRegisterScope temps(&masm.asVIXL());
  const Register scratch = temps.AcquireX().asUnsized();

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);

  // Load boxed boolean into scratch.
  if (rhs->isConstant()) {
    masm.moveValue(rhs->toConstant()->toJSValue(), ValueOperand(scratch));
  } else {
    masm.boxValue(JSVAL_TYPE_BOOLEAN, ToRegister(rhs), scratch);
  }

  // Compare the entire Value.
  masm.cmpPtrSet(cond, lhs.valueReg(), scratch, output);
}

void CodeGenerator::visitBitAndAndBranch(LBitAndAndBranch* baab) {
  if (baab->right()->isConstant()) {
    masm.Tst(toWRegister(baab->left()), Operand(ToInt32(baab->right())));
+0 −28
Original line number Diff line number Diff line
@@ -68,34 +68,6 @@ void CodeGeneratorMIPS::splitTagForTest(const ValueOperand& value,
  MOZ_ASSERT(value.typeReg() == tag);
}

void CodeGenerator::visitCompareB(LCompareB* lir) {
  MCompare* mir = lir->mir();

  const ValueOperand lhs = ToValue(lir, LCompareB::Lhs);
  const LAllocation* rhs = lir->rhs();
  const Register output = ToRegister(lir->output());

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);
  Assembler::Condition cond = JSOpToCondition(mir->compareType(), mir->jsop());

  Label notBoolean, done;
  masm.branchTestBoolean(Assembler::NotEqual, lhs, &notBoolean);
  {
    if (rhs->isConstant()) {
      masm.cmp32Set(cond, lhs.payloadReg(),
                    Imm32(rhs->toConstant()->toBoolean()), output);
    } else {
      masm.cmp32Set(cond, lhs.payloadReg(), ToRegister(rhs), output);
    }
    masm.jump(&done);
  }

  masm.bind(&notBoolean);
  { masm.move32(Imm32(mir->jsop() == JSOp::StrictNe), output); }

  masm.bind(&done);
}

void CodeGenerator::visitCompareI64(LCompareI64* lir) {
  MCompare* mir = lir->mir();
  MOZ_ASSERT(mir->compareType() == MCompare::Compare_Int64 ||
+0 −22
Original line number Diff line number Diff line
@@ -128,28 +128,6 @@ void CodeGeneratorMIPS64::splitTagForTest(const ValueOperand& value,
  masm.splitTag(value.valueReg(), tag);
}

void CodeGenerator::visitCompareB(LCompareB* lir) {
  MCompare* mir = lir->mir();

  const ValueOperand lhs = ToValue(lir, LCompareB::Lhs);
  const LAllocation* rhs = lir->rhs();
  const Register output = ToRegister(lir->output());

  MOZ_ASSERT(mir->jsop() == JSOp::StrictEq || mir->jsop() == JSOp::StrictNe);
  Assembler::Condition cond = JSOpToCondition(mir->compareType(), mir->jsop());

  // Load boxed boolean in ScratchRegister.
  if (rhs->isConstant()) {
    masm.moveValue(rhs->toConstant()->toJSValue(),
                   ValueOperand(ScratchRegister));
  } else {
    masm.boxValue(JSVAL_TYPE_BOOLEAN, ToRegister(rhs), ScratchRegister);
  }

  // Perform the comparison.
  masm.cmpPtrSet(cond, lhs.valueReg(), ScratchRegister, output);
}

void CodeGenerator::visitCompareI64(LCompareI64* lir) {
  MCompare* mir = lir->mir();
  MOZ_ASSERT(mir->compareType() == MCompare::Compare_Int64 ||
+0 −20
Original line number Diff line number Diff line
@@ -1792,26 +1792,6 @@ class LCompareBigIntString : public LCallInstructionHelper<1, 2, 0> {
  MCompare* mir() { return mir_->toCompare(); }
};

// Used for strict-equality comparisons where one side is a boolean
// and the other is a value. Note that CompareI is used to compare
// two booleans.
class LCompareB : public LInstructionHelper<1, BOX_PIECES + 1, 0> {
 public:
  LIR_HEADER(CompareB)

  LCompareB(const LBoxAllocation& lhs, const LAllocation& rhs)
      : LInstructionHelper(classOpcode) {
    setBoxOperand(Lhs, lhs);
    setOperand(BOX_PIECES, rhs);
  }

  static const size_t Lhs = 0;

  const LAllocation* rhs() { return getOperand(BOX_PIECES); }

  MCompare* mir() { return mir_->toCompare(); }
};

class LCompareVM : public LCallInstructionHelper<1, 2 * BOX_PIECES, 0> {
 public:
  LIR_HEADER(CompareVM)
Loading