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); |