Index: src/arm/full-codegen-arm.cc |
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
index b73006a17d99136d69d5b8a782ae3134fdd20675..ea7b73f2fe987fcbfde93d4a334fb1395b57bf42 100644 |
--- a/src/arm/full-codegen-arm.cc |
+++ b/src/arm/full-codegen-arm.cc |
@@ -786,9 +786,9 @@ void FullCodeGenerator::EmitDebugCheckDeclarationContext(Variable* variable) { |
// Check that we're not inside a with or catch context. |
__ ldr(r1, FieldMemOperand(cp, HeapObject::kMapOffset)); |
__ CompareRoot(r1, Heap::kWithContextMapRootIndex); |
- __ Check(ne, kDeclarationInWithContext); |
+ __ Check(ne, "Declaration in with context."); |
__ CompareRoot(r1, Heap::kCatchContextMapRootIndex); |
- __ Check(ne, kDeclarationInCatchContext); |
+ __ Check(ne, "Declaration in catch context."); |
} |
} |
@@ -2512,7 +2512,7 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var, |
// Check for an uninitialized let binding. |
__ ldr(r2, location); |
__ CompareRoot(r2, Heap::kTheHoleValueRootIndex); |
- __ Check(eq, kLetBindingReInitialization); |
+ __ Check(eq, "Let binding re-initialization."); |
} |
// Perform the assignment. |
__ str(r0, location); |
@@ -3473,23 +3473,23 @@ void FullCodeGenerator::EmitSeqStringSetCharCheck(Register string, |
Register value, |
uint32_t encoding_mask) { |
__ SmiTst(index); |
- __ Check(eq, kNonSmiIndex); |
+ __ Check(eq, "Non-smi index"); |
__ SmiTst(value); |
- __ Check(eq, kNonSmiValue); |
+ __ Check(eq, "Non-smi value"); |
__ ldr(ip, FieldMemOperand(string, String::kLengthOffset)); |
__ cmp(index, ip); |
- __ Check(lt, kIndexIsTooLarge); |
+ __ Check(lt, "Index is too large"); |
__ cmp(index, Operand(Smi::FromInt(0))); |
- __ Check(ge, kIndexIsNegative); |
+ __ Check(ge, "Index is negative"); |
__ ldr(ip, FieldMemOperand(string, HeapObject::kMapOffset)); |
__ ldrb(ip, FieldMemOperand(ip, Map::kInstanceTypeOffset)); |
__ and_(ip, ip, Operand(kStringRepresentationMask | kStringEncodingMask)); |
__ cmp(ip, Operand(encoding_mask)); |
- __ Check(eq, kUnexpectedStringType); |
+ __ Check(eq, "Unexpected string type"); |
} |
@@ -3849,7 +3849,7 @@ void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) { |
Handle<FixedArray> jsfunction_result_caches( |
isolate()->native_context()->jsfunction_result_caches()); |
if (jsfunction_result_caches->length() <= cache_id) { |
- __ Abort(kAttemptToUseUndefinedCache); |
+ __ Abort("Attempt to use undefined cache."); |
__ LoadRoot(r0, Heap::kUndefinedValueRootIndex); |
context()->Plug(r0); |
return; |
@@ -4030,7 +4030,7 @@ void FullCodeGenerator::EmitFastAsciiArrayJoin(CallRuntime* expr) { |
// elements_end: Array end. |
if (generate_debug_code_) { |
__ cmp(array_length, Operand::Zero()); |
- __ Assert(gt, kNoEmptyArraysHereInEmitFastAsciiArrayJoin); |
+ __ Assert(gt, "No empty arrays here in EmitFastAsciiArrayJoin"); |
} |
__ bind(&loop); |
__ ldr(string, MemOperand(element, kPointerSize, PostIndex)); |
@@ -4349,12 +4349,35 @@ void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { |
break; |
} |
+ case Token::SUB: |
+ EmitUnaryOperation(expr, "[ UnaryOperation (SUB)"); |
+ break; |
+ |
+ case Token::BIT_NOT: |
+ EmitUnaryOperation(expr, "[ UnaryOperation (BIT_NOT)"); |
+ break; |
+ |
default: |
UNREACHABLE(); |
} |
} |
+void FullCodeGenerator::EmitUnaryOperation(UnaryOperation* expr, |
+ const char* comment) { |
+ // TODO(svenpanne): Allowing format strings in Comment would be nice here... |
+ Comment cmt(masm_, comment); |
+ UnaryOpStub stub(expr->op()); |
+ // UnaryOpStub expects the argument to be in the |
+ // accumulator register r0. |
+ VisitForAccumulatorValue(expr->expression()); |
+ SetSourcePosition(expr->position()); |
+ CallIC(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, |
+ expr->UnaryOperationFeedbackId()); |
+ context()->Plug(r0); |
+} |
+ |
+ |
void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { |
Comment cmnt(masm_, "[ CountOperation"); |
SetSourcePosition(expr->position()); |