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

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

Issue 1758003: Changed inlined property load detection on ARM... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 8 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 | « src/arm/codegen-arm.cc ('k') | src/arm/ic-arm.cc » ('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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 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 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 Property* property = var->AsProperty(); 693 Property* property = var->AsProperty();
694 694
695 if (var->is_global() && !var->is_this()) { 695 if (var->is_global() && !var->is_this()) {
696 Comment cmnt(masm_, "Global variable"); 696 Comment cmnt(masm_, "Global variable");
697 // Use inline caching. Variable name is passed in r2 and the global 697 // Use inline caching. Variable name is passed in r2 and the global
698 // object on the stack. 698 // object on the stack.
699 __ ldr(ip, CodeGenerator::GlobalObject()); 699 __ ldr(ip, CodeGenerator::GlobalObject());
700 __ push(ip); 700 __ push(ip);
701 __ mov(r2, Operand(var->name())); 701 __ mov(r2, Operand(var->name()));
702 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); 702 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
703 { Assembler::BlockConstPoolScope block_const_pool(masm_); 703 __ Call(ic, RelocInfo::CODE_TARGET_CONTEXT);
704 __ Call(ic, RelocInfo::CODE_TARGET_CONTEXT);
705 // A B instruction following the call signals that the load was inlined.
706 // Ensure that there is not a B instruction here.
707 __ nop();
708 }
709 DropAndApply(1, context, r0); 704 DropAndApply(1, context, r0);
710 705
711 } else if (slot != NULL && slot->type() == Slot::LOOKUP) { 706 } else if (slot != NULL && slot->type() == Slot::LOOKUP) {
712 Comment cmnt(masm_, "Lookup slot"); 707 Comment cmnt(masm_, "Lookup slot");
713 __ mov(r1, Operand(var->name())); 708 __ mov(r1, Operand(var->name()));
714 __ stm(db_w, sp, cp.bit() | r1.bit()); // Context and name. 709 __ stm(db_w, sp, cp.bit() | r1.bit()); // Context and name.
715 __ CallRuntime(Runtime::kLoadContextSlot, 2); 710 __ CallRuntime(Runtime::kLoadContextSlot, 2);
716 Apply(context, r0); 711 Apply(context, r0);
717 712
718 } else if (slot != NULL) { 713 } else if (slot != NULL) {
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 break; 991 break;
997 } 992 }
998 } 993 }
999 994
1000 995
1001 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { 996 void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) {
1002 SetSourcePosition(prop->position()); 997 SetSourcePosition(prop->position());
1003 Literal* key = prop->key()->AsLiteral(); 998 Literal* key = prop->key()->AsLiteral();
1004 __ mov(r2, Operand(key->handle())); 999 __ mov(r2, Operand(key->handle()));
1005 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); 1000 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
1006 { Assembler::BlockConstPoolScope block_const_pool(masm_); 1001 __ Call(ic, RelocInfo::CODE_TARGET);
1007 __ Call(ic, RelocInfo::CODE_TARGET);
1008 // A B instruction following the call signals that the load was inlined.
1009 // Ensure that there is not a B instruction here.
1010 __ nop();
1011 }
1012 } 1002 }
1013 1003
1014 1004
1015 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) { 1005 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) {
1016 SetSourcePosition(prop->position()); 1006 SetSourcePosition(prop->position());
1017 Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize)); 1007 Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize));
1018 __ Call(ic, RelocInfo::CODE_TARGET); 1008 __ Call(ic, RelocInfo::CODE_TARGET);
1019 } 1009 }
1020 1010
1021 1011
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
1438 if (proxy != NULL && 1428 if (proxy != NULL &&
1439 !proxy->var()->is_this() && 1429 !proxy->var()->is_this() &&
1440 proxy->var()->is_global()) { 1430 proxy->var()->is_global()) {
1441 Comment cmnt(masm_, "Global variable"); 1431 Comment cmnt(masm_, "Global variable");
1442 __ ldr(r0, CodeGenerator::GlobalObject()); 1432 __ ldr(r0, CodeGenerator::GlobalObject());
1443 __ push(r0); 1433 __ push(r0);
1444 __ mov(r2, Operand(proxy->name())); 1434 __ mov(r2, Operand(proxy->name()));
1445 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); 1435 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
1446 // Use a regular load, not a contextual load, to avoid a reference 1436 // Use a regular load, not a contextual load, to avoid a reference
1447 // error. 1437 // error.
1448 { Assembler::BlockConstPoolScope block_const_pool(masm_); 1438 __ Call(ic, RelocInfo::CODE_TARGET);
1449 __ Call(ic, RelocInfo::CODE_TARGET);
1450 // A B instruction following the call signals that the load was
1451 // inlined. Ensure that there is not a B instruction here.
1452 __ nop();
1453 }
1454 __ str(r0, MemOperand(sp)); 1439 __ str(r0, MemOperand(sp));
1455 } else if (proxy != NULL && 1440 } else if (proxy != NULL &&
1456 proxy->var()->slot() != NULL && 1441 proxy->var()->slot() != NULL &&
1457 proxy->var()->slot()->type() == Slot::LOOKUP) { 1442 proxy->var()->slot()->type() == Slot::LOOKUP) {
1458 __ mov(r0, Operand(proxy->name())); 1443 __ mov(r0, Operand(proxy->name()));
1459 __ stm(db_w, sp, cp.bit() | r0.bit()); 1444 __ stm(db_w, sp, cp.bit() | r0.bit());
1460 __ CallRuntime(Runtime::kLoadContextSlotNoReferenceError, 2); 1445 __ CallRuntime(Runtime::kLoadContextSlotNoReferenceError, 2);
1461 __ push(r0); 1446 __ push(r0);
1462 } else { 1447 } else {
1463 // This expression cannot throw a reference error at the top level. 1448 // This expression cannot throw a reference error at the top level.
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1871 __ pop(result_register()); 1856 __ pop(result_register());
1872 ASSERT_EQ(1, kSmiTagSize + kSmiShiftSize); 1857 ASSERT_EQ(1, kSmiTagSize + kSmiShiftSize);
1873 __ mov(r1, Operand(r1, ASR, 1)); // Un-smi-tag value. 1858 __ mov(r1, Operand(r1, ASR, 1)); // Un-smi-tag value.
1874 __ add(pc, r1, Operand(masm_->CodeObject())); 1859 __ add(pc, r1, Operand(masm_->CodeObject()));
1875 } 1860 }
1876 1861
1877 1862
1878 #undef __ 1863 #undef __
1879 1864
1880 } } // namespace v8::internal 1865 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/codegen-arm.cc ('k') | src/arm/ic-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698