Index: src/ia32/macro-assembler-ia32.cc |
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc |
index 2ab5a259321cd2cd8095fcd43c14a1886d40e62d..8b1be3cf17262f7c7c5d9de2d8a755af7982b937 100644 |
--- a/src/ia32/macro-assembler-ia32.cc |
+++ b/src/ia32/macro-assembler-ia32.cc |
@@ -678,7 +678,7 @@ void MacroAssembler::AssertNumber(Register object) { |
JumpIfSmi(object, &ok); |
cmp(FieldOperand(object, HeapObject::kMapOffset), |
isolate()->factory()->heap_number_map()); |
- Check(equal, "Operand not a number"); |
+ Check(equal, kOperandNotANumber); |
bind(&ok); |
} |
} |
@@ -687,7 +687,7 @@ void MacroAssembler::AssertNumber(Register object) { |
void MacroAssembler::AssertSmi(Register object) { |
if (emit_debug_code()) { |
test(object, Immediate(kSmiTagMask)); |
- Check(equal, "Operand is not a smi"); |
+ Check(equal, kOperandIsNotASmi); |
} |
} |
@@ -695,12 +695,12 @@ void MacroAssembler::AssertSmi(Register object) { |
void MacroAssembler::AssertString(Register object) { |
if (emit_debug_code()) { |
test(object, Immediate(kSmiTagMask)); |
- Check(not_equal, "Operand is a smi and not a string"); |
+ Check(not_equal, kOperandIsASmiAndNotAString); |
push(object); |
mov(object, FieldOperand(object, HeapObject::kMapOffset)); |
CmpInstanceType(object, FIRST_NONSTRING_TYPE); |
pop(object); |
- Check(below, "Operand is not a string"); |
+ Check(below, kOperandIsNotAString); |
} |
} |
@@ -708,12 +708,12 @@ void MacroAssembler::AssertString(Register object) { |
void MacroAssembler::AssertName(Register object) { |
if (emit_debug_code()) { |
test(object, Immediate(kSmiTagMask)); |
- Check(not_equal, "Operand is a smi and not a name"); |
+ Check(not_equal, kOperandIsASmiAndNotAName); |
push(object); |
mov(object, FieldOperand(object, HeapObject::kMapOffset)); |
CmpInstanceType(object, LAST_NAME_TYPE); |
pop(object); |
- Check(below_equal, "Operand is not a name"); |
+ Check(below_equal, kOperandIsNotAName); |
} |
} |
@@ -721,7 +721,7 @@ void MacroAssembler::AssertName(Register object) { |
void MacroAssembler::AssertNotSmi(Register object) { |
if (emit_debug_code()) { |
test(object, Immediate(kSmiTagMask)); |
- Check(not_equal, "Operand is a smi"); |
+ Check(not_equal, kOperandIsASmi); |
} |
} |
@@ -734,7 +734,7 @@ void MacroAssembler::EnterFrame(StackFrame::Type type) { |
push(Immediate(CodeObject())); |
if (emit_debug_code()) { |
cmp(Operand(esp, 0), Immediate(isolate()->factory()->undefined_value())); |
- Check(not_equal, "code object not properly patched"); |
+ Check(not_equal, kCodeObjectNotProperlyPatched); |
} |
} |
@@ -743,7 +743,7 @@ void MacroAssembler::LeaveFrame(StackFrame::Type type) { |
if (emit_debug_code()) { |
cmp(Operand(ebp, StandardFrameConstants::kMarkerOffset), |
Immediate(Smi::FromInt(type))); |
- Check(equal, "stack frame types must match"); |
+ Check(equal, kStackFrameTypesMustMatch); |
} |
leave(); |
} |
@@ -1024,7 +1024,7 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg, |
// When generating debug code, make sure the lexical context is set. |
if (emit_debug_code()) { |
cmp(scratch1, Immediate(0)); |
- Check(not_equal, "we should not have an empty lexical context"); |
+ Check(not_equal, kWeShouldNotHaveAnEmptyLexicalContext); |
} |
// Load the native context of the current context. |
int offset = |
@@ -1037,7 +1037,7 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg, |
// Read the first word and compare to native_context_map. |
cmp(FieldOperand(scratch1, HeapObject::kMapOffset), |
isolate()->factory()->native_context_map()); |
- Check(equal, "JSGlobalObject::native_context should be a native context."); |
+ Check(equal, kJSGlobalObjectNativeContextShouldBeANativeContext); |
} |
// Check if both contexts are the same. |
@@ -1056,12 +1056,12 @@ void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg, |
// Check the context is a native context. |
if (emit_debug_code()) { |
cmp(scratch2, isolate()->factory()->null_value()); |
- Check(not_equal, "JSGlobalProxy::context() should not be null."); |
+ Check(not_equal, kJSGlobalProxyContextShouldNotBeNull); |
// Read the first word and compare to native_context_map(), |
cmp(FieldOperand(scratch2, HeapObject::kMapOffset), |
isolate()->factory()->native_context_map()); |
- Check(equal, "JSGlobalObject::native_context should be a native context."); |
+ Check(equal, kJSGlobalObjectNativeContextShouldBeANativeContext); |
} |
int token_offset = Context::kHeaderSize + |
@@ -1206,7 +1206,7 @@ void MacroAssembler::LoadAllocationTopHelper(Register result, |
#ifdef DEBUG |
// Assert that result actually contains top on entry. |
cmp(result, Operand::StaticVariable(allocation_top)); |
- Check(equal, "Unexpected allocation top"); |
+ Check(equal, kUnexpectedAllocationTop); |
#endif |
return; |
} |
@@ -1226,7 +1226,7 @@ void MacroAssembler::UpdateAllocationTopHelper(Register result_end, |
AllocationFlags flags) { |
if (emit_debug_code()) { |
test(result_end, Immediate(kObjectAlignmentMask)); |
- Check(zero, "Unaligned allocation in new space"); |
+ Check(zero, kUnalignedAllocationInNewSpace); |
} |
ExternalReference allocation_top = |
@@ -1458,7 +1458,7 @@ void MacroAssembler::UndoAllocationInNewSpace(Register object) { |
and_(object, Immediate(~kHeapObjectTagMask)); |
#ifdef DEBUG |
cmp(object, Operand::StaticVariable(new_space_allocation_top)); |
- Check(below, "Undo allocation of non allocated memory"); |
+ Check(below, kUndoAllocationOfNonAllocatedMemory); |
#endif |
mov(Operand::StaticVariable(new_space_allocation_top), object); |
} |
@@ -2062,7 +2062,7 @@ void MacroAssembler::CallApiFunctionAndReturn(Address function_address, |
// previous handle scope. |
mov(Operand::StaticVariable(next_address), ebx); |
sub(Operand::StaticVariable(level_address), Immediate(1)); |
- Assert(above_equal, "Invalid HandleScope level"); |
+ Assert(above_equal, kInvalidHandleScopeLevel); |
cmp(edi, Operand::StaticVariable(limit_address)); |
j(not_equal, &delete_allocated_handles); |
bind(&leave_exit_frame); |
@@ -2104,7 +2104,7 @@ void MacroAssembler::CallApiFunctionAndReturn(Address function_address, |
cmp(return_value, isolate()->factory()->null_value()); |
j(equal, &ok, Label::kNear); |
- Abort("API call returned invalid object"); |
+ Abort(kAPICallReturnedInvalidObject); |
bind(&ok); |
#endif |
@@ -2390,7 +2390,7 @@ void MacroAssembler::LoadContext(Register dst, int context_chain_length) { |
if (emit_debug_code()) { |
cmp(FieldOperand(dst, HeapObject::kMapOffset), |
isolate()->factory()->with_context_map()); |
- Check(not_equal, "Variable resolved to with context."); |
+ Check(not_equal, kVariableResolvedToWithContext); |
} |
} |
@@ -2477,7 +2477,7 @@ void MacroAssembler::LoadGlobalFunctionInitialMap(Register function, |
CheckMap(map, isolate()->factory()->meta_map(), &fail, DO_SMI_CHECK); |
jmp(&ok); |
bind(&fail); |
- Abort("Global functions must have initial map"); |
+ Abort(kGlobalFunctionsMustHaveInitialMap); |
bind(&ok); |
} |
} |
@@ -2578,7 +2578,7 @@ void MacroAssembler::VerifyX87StackDepth(uint32_t depth) { |
and_(eax, kTopMask); |
shr(eax, 11); |
cmp(eax, Immediate(tos)); |
- Check(equal, "Unexpected FPU stack depth after instruction"); |
+ Check(equal, kUnexpectedFPUStackDepthAfterInstruction); |
fnclex(); |
pop(eax); |
} |
@@ -2661,8 +2661,8 @@ void MacroAssembler::DecrementCounter(Condition cc, |
} |
-void MacroAssembler::Assert(Condition cc, const char* msg) { |
- if (emit_debug_code()) Check(cc, msg); |
+void MacroAssembler::Assert(Condition cc, BailoutReason reason) { |
+ if (emit_debug_code()) Check(cc, reason); |
} |
@@ -2679,16 +2679,16 @@ void MacroAssembler::AssertFastElements(Register elements) { |
cmp(FieldOperand(elements, HeapObject::kMapOffset), |
Immediate(factory->fixed_cow_array_map())); |
j(equal, &ok); |
- Abort("JSObject with fast elements map has slow elements"); |
+ Abort(kJSObjectWithFastElementsMapHasSlowElements); |
bind(&ok); |
} |
} |
-void MacroAssembler::Check(Condition cc, const char* msg) { |
+void MacroAssembler::Check(Condition cc, BailoutReason reason) { |
Label L; |
j(cc, &L); |
- Abort(msg); |
+ Abort(reason); |
// will not return here |
bind(&L); |
} |
@@ -2709,12 +2709,13 @@ void MacroAssembler::CheckStackAlignment() { |
} |
-void MacroAssembler::Abort(const char* msg) { |
+void MacroAssembler::Abort(BailoutReason reason) { |
// We want to pass the msg string like a smi to avoid GC |
// problems, however msg is not guaranteed to be aligned |
// properly. Instead, we pass an aligned pointer that is |
// a proper v8 smi, but also pass the alignment difference |
// from the real pointer as a smi. |
+ const char* msg = GetBailoutReason(reason); |
intptr_t p1 = reinterpret_cast<intptr_t>(msg); |
intptr_t p0 = (p1 & ~kSmiTagMask) + kSmiTag; |
ASSERT(reinterpret_cast<Object*>(p0)->IsSmi()); |
@@ -3118,7 +3119,7 @@ void MacroAssembler::EnsureNotWhite( |
if (emit_debug_code()) { |
mov(length, Operand(bitmap_scratch, MemoryChunk::kLiveBytesOffset)); |
cmp(length, Operand(bitmap_scratch, MemoryChunk::kSizeOffset)); |
- Check(less_equal, "Live Bytes Count overflow chunk size"); |
+ Check(less_equal, kLiveBytesCountOverflowChunkSize); |
} |
bind(&done); |