| Index: src/mips/lithium-mips.cc
|
| diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc
|
| index 38ac19f609c2d8e4294b73a32f86efa78ae81db7..a5371f7d67334fffd712fd6ac672e1b842709a10 100644
|
| --- a/src/mips/lithium-mips.cc
|
| +++ b/src/mips/lithium-mips.cc
|
| @@ -442,7 +442,7 @@ LPlatformChunk* LChunkBuilder::Build() {
|
| }
|
|
|
|
|
| -void LCodeGen::Abort(BailoutReason reason) {
|
| +void LCodeGen::Abort(const char* reason) {
|
| info()->set_bailout_reason(reason);
|
| status_ = ABORTED;
|
| }
|
| @@ -650,7 +650,7 @@ LUnallocated* LChunkBuilder::TempRegister() {
|
| new(zone()) LUnallocated(LUnallocated::MUST_HAVE_REGISTER);
|
| int vreg = allocator_->GetVirtualRegister();
|
| if (!allocator_->AllocationOk()) {
|
| - Abort(kOutOfVirtualRegistersWhileTryingToAllocateTempRegister);
|
| + Abort("Out of virtual registers while trying to allocate temp register.");
|
| vreg = 0;
|
| }
|
| operand->set_virtual_register(vreg);
|
| @@ -1327,6 +1327,15 @@ LInstruction* LChunkBuilder::DoBitwise(HBitwise* instr) {
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoBitNot(HBitNot* instr) {
|
| + ASSERT(instr->value()->representation().IsInteger32());
|
| + ASSERT(instr->representation().IsInteger32());
|
| + if (instr->HasNoUses()) return NULL;
|
| + LOperand* value = UseRegisterAtStart(instr->value());
|
| + return DefineAsRegister(new(zone()) LBitNotI(value));
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoDiv(HDiv* instr) {
|
| if (instr->representation().IsDouble()) {
|
| return DoArithmeticD(Token::DIV, instr);
|
| @@ -1744,6 +1753,17 @@ LInstruction* LChunkBuilder::DoSeqStringSetChar(HSeqStringSetChar* instr) {
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoNumericConstraint(HNumericConstraint* instr) {
|
| + return NULL;
|
| +}
|
| +
|
| +
|
| +LInstruction* LChunkBuilder::DoInductionVariableAnnotation(
|
| + HInductionVariableAnnotation* instr) {
|
| + return NULL;
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoBoundsCheck(HBoundsCheck* instr) {
|
| LOperand* value = UseRegisterOrConstantAtStart(instr->index());
|
| LOperand* length = UseRegister(instr->length());
|
| @@ -1917,6 +1937,19 @@ LInstruction* LChunkBuilder::DoCheckInstanceType(HCheckInstanceType* instr) {
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) {
|
| + LUnallocated* temp1 = NULL;
|
| + LOperand* temp2 = NULL;
|
| + if (!instr->CanOmitPrototypeChecks()) {
|
| + temp1 = TempRegister();
|
| + temp2 = TempRegister();
|
| + }
|
| + LCheckPrototypeMaps* result = new(zone()) LCheckPrototypeMaps(temp1, temp2);
|
| + if (instr->CanOmitPrototypeChecks()) return result;
|
| + return AssignEnvironment(result);
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) {
|
| LOperand* value = UseRegisterAtStart(instr->value());
|
| return AssignEnvironment(new(zone()) LCheckFunction(value));
|
| @@ -1925,16 +1958,10 @@ LInstruction* LChunkBuilder::DoCheckFunction(HCheckFunction* instr) {
|
|
|
| LInstruction* LChunkBuilder::DoCheckMaps(HCheckMaps* instr) {
|
| LOperand* value = NULL;
|
| - if (!instr->CanOmitMapChecks()) {
|
| - value = UseRegisterAtStart(instr->value());
|
| - if (instr->has_migration_target()) info()->MarkAsDeferredCalling();
|
| - }
|
| - LCheckMaps* result = new(zone()) LCheckMaps(value);
|
| - if (!instr->CanOmitMapChecks()) {
|
| - AssignEnvironment(result);
|
| - if (instr->has_migration_target()) return AssignPointerMap(result);
|
| - }
|
| - return result;
|
| + if (!instr->CanOmitMapChecks()) value = UseRegisterAtStart(instr->value());
|
| + LInstruction* result = new(zone()) LCheckMaps(value);
|
| + if (instr->CanOmitMapChecks()) return result;
|
| + return AssignEnvironment(result);
|
| }
|
|
|
|
|
| @@ -2218,7 +2245,7 @@ LInstruction* LChunkBuilder::DoTrapAllocationMemento(
|
| LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) {
|
| bool is_in_object = instr->access().IsInobject();
|
| bool needs_write_barrier = instr->NeedsWriteBarrier();
|
| - bool needs_write_barrier_for_map = instr->has_transition() &&
|
| + bool needs_write_barrier_for_map = !instr->transition().is_null() &&
|
| instr->NeedsWriteBarrierForMap();
|
|
|
| LOperand* obj;
|
| @@ -2338,7 +2365,7 @@ LInstruction* LChunkBuilder::DoParameter(HParameter* instr) {
|
| LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) {
|
| int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width.
|
| if (spill_index > LUnallocated::kMaxFixedSlotIndex) {
|
| - Abort(kTooManySpillSlotsNeededForOSR);
|
| + Abort("Too many spill slots needed for OSR");
|
| spill_index = 0;
|
| }
|
| return DefineAsSpilled(new(zone()) LUnknownOSRValue, spill_index);
|
|
|