Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: src/arm/full-codegen-arm.cc

Issue 17576005: Rename Literal::handle to Literal::value (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/ast.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1674 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 __ push(r0); // Save result on stack 1685 __ push(r0); // Save result on stack
1686 result_saved = true; 1686 result_saved = true;
1687 } 1687 }
1688 switch (property->kind()) { 1688 switch (property->kind()) {
1689 case ObjectLiteral::Property::CONSTANT: 1689 case ObjectLiteral::Property::CONSTANT:
1690 UNREACHABLE(); 1690 UNREACHABLE();
1691 case ObjectLiteral::Property::MATERIALIZED_LITERAL: 1691 case ObjectLiteral::Property::MATERIALIZED_LITERAL:
1692 ASSERT(!CompileTimeValue::IsCompileTimeValue(property->value())); 1692 ASSERT(!CompileTimeValue::IsCompileTimeValue(property->value()));
1693 // Fall through. 1693 // Fall through.
1694 case ObjectLiteral::Property::COMPUTED: 1694 case ObjectLiteral::Property::COMPUTED:
1695 if (key->handle()->IsInternalizedString()) { 1695 if (key->value()->IsInternalizedString()) {
1696 if (property->emit_store()) { 1696 if (property->emit_store()) {
1697 VisitForAccumulatorValue(value); 1697 VisitForAccumulatorValue(value);
1698 __ mov(r2, Operand(key->handle())); 1698 __ mov(r2, Operand(key->value()));
1699 __ ldr(r1, MemOperand(sp)); 1699 __ ldr(r1, MemOperand(sp));
1700 Handle<Code> ic = is_classic_mode() 1700 Handle<Code> ic = is_classic_mode()
1701 ? isolate()->builtins()->StoreIC_Initialize() 1701 ? isolate()->builtins()->StoreIC_Initialize()
1702 : isolate()->builtins()->StoreIC_Initialize_Strict(); 1702 : isolate()->builtins()->StoreIC_Initialize_Strict();
1703 CallIC(ic, RelocInfo::CODE_TARGET, key->LiteralFeedbackId()); 1703 CallIC(ic, RelocInfo::CODE_TARGET, key->LiteralFeedbackId());
1704 PrepareForBailoutForId(key->id(), NO_REGISTERS); 1704 PrepareForBailoutForId(key->id(), NO_REGISTERS);
1705 } else { 1705 } else {
1706 VisitForEffect(value); 1706 VisitForEffect(value);
1707 } 1707 }
1708 break; 1708 break;
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
2254 // Only the value field needs a write barrier, as the other values are in the 2254 // Only the value field needs a write barrier, as the other values are in the
2255 // root set. 2255 // root set.
2256 __ RecordWriteField(r0, JSGeneratorObject::kResultValuePropertyOffset, 2256 __ RecordWriteField(r0, JSGeneratorObject::kResultValuePropertyOffset,
2257 r2, r3, kLRHasBeenSaved, kDontSaveFPRegs); 2257 r2, r3, kLRHasBeenSaved, kDontSaveFPRegs);
2258 } 2258 }
2259 2259
2260 2260
2261 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { 2261 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
2262 SetSourcePosition(prop->position()); 2262 SetSourcePosition(prop->position());
2263 Literal* key = prop->key()->AsLiteral(); 2263 Literal* key = prop->key()->AsLiteral();
2264 __ mov(r2, Operand(key->handle())); 2264 __ mov(r2, Operand(key->value()));
2265 // Call load IC. It has arguments receiver and property name r0 and r2. 2265 // Call load IC. It has arguments receiver and property name r0 and r2.
2266 Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize(); 2266 Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
2267 CallIC(ic, RelocInfo::CODE_TARGET, prop->PropertyFeedbackId()); 2267 CallIC(ic, RelocInfo::CODE_TARGET, prop->PropertyFeedbackId());
2268 } 2268 }
2269 2269
2270 2270
2271 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) { 2271 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) {
2272 SetSourcePosition(prop->position()); 2272 SetSourcePosition(prop->position());
2273 // Call keyed load IC. It has arguments key and receiver in r0 and r1. 2273 // Call keyed load IC. It has arguments key and receiver in r0 and r1.
2274 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Initialize(); 2274 Handle<Code> ic = isolate()->builtins()->KeyedLoadIC_Initialize();
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2409 Variable* var = expr->AsVariableProxy()->var(); 2409 Variable* var = expr->AsVariableProxy()->var();
2410 EffectContext context(this); 2410 EffectContext context(this);
2411 EmitVariableAssignment(var, Token::ASSIGN); 2411 EmitVariableAssignment(var, Token::ASSIGN);
2412 break; 2412 break;
2413 } 2413 }
2414 case NAMED_PROPERTY: { 2414 case NAMED_PROPERTY: {
2415 __ push(r0); // Preserve value. 2415 __ push(r0); // Preserve value.
2416 VisitForAccumulatorValue(prop->obj()); 2416 VisitForAccumulatorValue(prop->obj());
2417 __ mov(r1, r0); 2417 __ mov(r1, r0);
2418 __ pop(r0); // Restore value. 2418 __ pop(r0); // Restore value.
2419 __ mov(r2, Operand(prop->key()->AsLiteral()->handle())); 2419 __ mov(r2, Operand(prop->key()->AsLiteral()->value()));
2420 Handle<Code> ic = is_classic_mode() 2420 Handle<Code> ic = is_classic_mode()
2421 ? isolate()->builtins()->StoreIC_Initialize() 2421 ? isolate()->builtins()->StoreIC_Initialize()
2422 : isolate()->builtins()->StoreIC_Initialize_Strict(); 2422 : isolate()->builtins()->StoreIC_Initialize_Strict();
2423 CallIC(ic); 2423 CallIC(ic);
2424 break; 2424 break;
2425 } 2425 }
2426 case KEYED_PROPERTY: { 2426 case KEYED_PROPERTY: {
2427 __ push(r0); // Preserve value. 2427 __ push(r0); // Preserve value.
2428 VisitForStackValue(prop->obj()); 2428 VisitForStackValue(prop->obj());
2429 VisitForAccumulatorValue(prop->key()); 2429 VisitForAccumulatorValue(prop->key());
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2538 2538
2539 2539
2540 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { 2540 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) {
2541 // Assignment to a property, using a named store IC. 2541 // Assignment to a property, using a named store IC.
2542 Property* prop = expr->target()->AsProperty(); 2542 Property* prop = expr->target()->AsProperty();
2543 ASSERT(prop != NULL); 2543 ASSERT(prop != NULL);
2544 ASSERT(prop->key()->AsLiteral() != NULL); 2544 ASSERT(prop->key()->AsLiteral() != NULL);
2545 2545
2546 // Record source code position before IC call. 2546 // Record source code position before IC call.
2547 SetSourcePosition(expr->position()); 2547 SetSourcePosition(expr->position());
2548 __ mov(r2, Operand(prop->key()->AsLiteral()->handle())); 2548 __ mov(r2, Operand(prop->key()->AsLiteral()->value()));
2549 __ pop(r1); 2549 __ pop(r1);
2550 2550
2551 Handle<Code> ic = is_classic_mode() 2551 Handle<Code> ic = is_classic_mode()
2552 ? isolate()->builtins()->StoreIC_Initialize() 2552 ? isolate()->builtins()->StoreIC_Initialize()
2553 : isolate()->builtins()->StoreIC_Initialize_Strict(); 2553 : isolate()->builtins()->StoreIC_Initialize_Strict();
2554 CallIC(ic, RelocInfo::CODE_TARGET, expr->AssignmentFeedbackId()); 2554 CallIC(ic, RelocInfo::CODE_TARGET, expr->AssignmentFeedbackId());
2555 2555
2556 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 2556 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
2557 context()->Plug(r0); 2557 context()->Plug(r0);
2558 } 2558 }
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
2812 // The receiver is either the global receiver or an object found 2812 // The receiver is either the global receiver or an object found
2813 // by LoadContextSlot. That object could be the hole if the 2813 // by LoadContextSlot. That object could be the hole if the
2814 // receiver is implicitly the global object. 2814 // receiver is implicitly the global object.
2815 EmitCallWithStub(expr, RECEIVER_MIGHT_BE_IMPLICIT); 2815 EmitCallWithStub(expr, RECEIVER_MIGHT_BE_IMPLICIT);
2816 } else if (property != NULL) { 2816 } else if (property != NULL) {
2817 { PreservePositionScope scope(masm()->positions_recorder()); 2817 { PreservePositionScope scope(masm()->positions_recorder());
2818 VisitForStackValue(property->obj()); 2818 VisitForStackValue(property->obj());
2819 } 2819 }
2820 if (property->key()->IsPropertyName()) { 2820 if (property->key()->IsPropertyName()) {
2821 EmitCallWithIC(expr, 2821 EmitCallWithIC(expr,
2822 property->key()->AsLiteral()->handle(), 2822 property->key()->AsLiteral()->value(),
2823 RelocInfo::CODE_TARGET); 2823 RelocInfo::CODE_TARGET);
2824 } else { 2824 } else {
2825 EmitKeyedCallWithIC(expr, property->key()); 2825 EmitKeyedCallWithIC(expr, property->key());
2826 } 2826 }
2827 } else { 2827 } else {
2828 // Call to an arbitrary expression not handled specially above. 2828 // Call to an arbitrary expression not handled specially above.
2829 { PreservePositionScope scope(masm()->positions_recorder()); 2829 { PreservePositionScope scope(masm()->positions_recorder());
2830 VisitForStackValue(callee); 2830 VisitForStackValue(callee);
2831 } 2831 }
2832 // Load global receiver object. 2832 // Load global receiver object.
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
3420 3420
3421 __ bind(&done); 3421 __ bind(&done);
3422 context()->Plug(r0); 3422 context()->Plug(r0);
3423 } 3423 }
3424 3424
3425 3425
3426 void FullCodeGenerator::EmitDateField(CallRuntime* expr) { 3426 void FullCodeGenerator::EmitDateField(CallRuntime* expr) {
3427 ZoneList<Expression*>* args = expr->arguments(); 3427 ZoneList<Expression*>* args = expr->arguments();
3428 ASSERT(args->length() == 2); 3428 ASSERT(args->length() == 2);
3429 ASSERT_NE(NULL, args->at(1)->AsLiteral()); 3429 ASSERT_NE(NULL, args->at(1)->AsLiteral());
3430 Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->handle())); 3430 Smi* index = Smi::cast(*(args->at(1)->AsLiteral()->value()));
3431 3431
3432 VisitForAccumulatorValue(args->at(0)); // Load the object. 3432 VisitForAccumulatorValue(args->at(0)); // Load the object.
3433 3433
3434 Label runtime, done, not_date_object; 3434 Label runtime, done, not_date_object;
3435 Register object = r0; 3435 Register object = r0;
3436 Register result = r0; 3436 Register result = r0;
3437 Register scratch0 = r9; 3437 Register scratch0 = r9;
3438 Register scratch1 = r1; 3438 Register scratch1 = r1;
3439 3439
3440 __ JumpIfSmi(object, &not_date_object); 3440 __ JumpIfSmi(object, &not_date_object);
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
3839 VisitForStackValue(args->at(2)); 3839 VisitForStackValue(args->at(2));
3840 __ CallStub(&stub); 3840 __ CallStub(&stub);
3841 context()->Plug(r0); 3841 context()->Plug(r0);
3842 } 3842 }
3843 3843
3844 3844
3845 void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) { 3845 void FullCodeGenerator::EmitGetFromCache(CallRuntime* expr) {
3846 ZoneList<Expression*>* args = expr->arguments(); 3846 ZoneList<Expression*>* args = expr->arguments();
3847 ASSERT_EQ(2, args->length()); 3847 ASSERT_EQ(2, args->length());
3848 ASSERT_NE(NULL, args->at(0)->AsLiteral()); 3848 ASSERT_NE(NULL, args->at(0)->AsLiteral());
3849 int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value(); 3849 int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->value()))->value();
3850 3850
3851 Handle<FixedArray> jsfunction_result_caches( 3851 Handle<FixedArray> jsfunction_result_caches(
3852 isolate()->native_context()->jsfunction_result_caches()); 3852 isolate()->native_context()->jsfunction_result_caches());
3853 if (jsfunction_result_caches->length() <= cache_id) { 3853 if (jsfunction_result_caches->length() <= cache_id) {
3854 __ Abort("Attempt to use undefined cache."); 3854 __ Abort("Attempt to use undefined cache.");
3855 __ LoadRoot(r0, Heap::kUndefinedValueRootIndex); 3855 __ LoadRoot(r0, Heap::kUndefinedValueRootIndex);
3856 context()->Plug(r0); 3856 context()->Plug(r0);
3857 return; 3857 return;
3858 } 3858 }
3859 3859
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after
4512 context()->PlugTOS(); 4512 context()->PlugTOS();
4513 } 4513 }
4514 } else { 4514 } else {
4515 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), 4515 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(),
4516 Token::ASSIGN); 4516 Token::ASSIGN);
4517 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4517 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4518 context()->Plug(r0); 4518 context()->Plug(r0);
4519 } 4519 }
4520 break; 4520 break;
4521 case NAMED_PROPERTY: { 4521 case NAMED_PROPERTY: {
4522 __ mov(r2, Operand(prop->key()->AsLiteral()->handle())); 4522 __ mov(r2, Operand(prop->key()->AsLiteral()->value()));
4523 __ pop(r1); 4523 __ pop(r1);
4524 Handle<Code> ic = is_classic_mode() 4524 Handle<Code> ic = is_classic_mode()
4525 ? isolate()->builtins()->StoreIC_Initialize() 4525 ? isolate()->builtins()->StoreIC_Initialize()
4526 : isolate()->builtins()->StoreIC_Initialize_Strict(); 4526 : isolate()->builtins()->StoreIC_Initialize_Strict();
4527 CallIC(ic, RelocInfo::CODE_TARGET, expr->CountStoreFeedbackId()); 4527 CallIC(ic, RelocInfo::CODE_TARGET, expr->CountStoreFeedbackId());
4528 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4528 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4529 if (expr->is_postfix()) { 4529 if (expr->is_postfix()) {
4530 if (!context()->IsEffect()) { 4530 if (!context()->IsEffect()) {
4531 context()->PlugTOS(); 4531 context()->PlugTOS();
4532 } 4532 }
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
4918 *context_length = 0; 4918 *context_length = 0;
4919 return previous_; 4919 return previous_;
4920 } 4920 }
4921 4921
4922 4922
4923 #undef __ 4923 #undef __
4924 4924
4925 } } // namespace v8::internal 4925 } } // namespace v8::internal
4926 4926
4927 #endif // V8_TARGET_ARCH_ARM 4927 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/ast.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698