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

Side by Side Diff: src/ic.cc

Issue 2840018: [Isolates] Moved more compilation-related globals (builtins, runtime, &c.)... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: rebase Created 10 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 | « src/ic.h ('k') | src/isolate.h » ('j') | src/runtime.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-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 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 272
273 void KeyedStoreIC::Clear(Address address, Code* target) { 273 void KeyedStoreIC::Clear(Address address, Code* target) {
274 if (target->ic_state() == UNINITIALIZED) return; 274 if (target->ic_state() == UNINITIALIZED) return;
275 SetTargetAtAddress(address, initialize_stub()); 275 SetTargetAtAddress(address, initialize_stub());
276 } 276 }
277 277
278 278
279 Code* KeyedLoadIC::external_array_stub(JSObject::ElementsKind elements_kind) { 279 Code* KeyedLoadIC::external_array_stub(JSObject::ElementsKind elements_kind) {
280 switch (elements_kind) { 280 switch (elements_kind) {
281 case JSObject::EXTERNAL_BYTE_ELEMENTS: 281 case JSObject::EXTERNAL_BYTE_ELEMENTS:
282 return Builtins::builtin(Builtins::KeyedLoadIC_ExternalByteArray); 282 return Isolate::Current()->builtins()->builtin(
283 Builtins::KeyedLoadIC_ExternalByteArray);
283 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 284 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
284 return Builtins::builtin(Builtins::KeyedLoadIC_ExternalUnsignedByteArray); 285 return Isolate::Current()->builtins()->builtin(
286 Builtins::KeyedLoadIC_ExternalUnsignedByteArray);
285 case JSObject::EXTERNAL_SHORT_ELEMENTS: 287 case JSObject::EXTERNAL_SHORT_ELEMENTS:
286 return Builtins::builtin(Builtins::KeyedLoadIC_ExternalShortArray); 288 return Isolate::Current()->builtins()->builtin(
289 Builtins::KeyedLoadIC_ExternalShortArray);
287 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 290 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
288 return Builtins::builtin( 291 return Isolate::Current()->builtins()->builtin(
289 Builtins::KeyedLoadIC_ExternalUnsignedShortArray); 292 Builtins::KeyedLoadIC_ExternalUnsignedShortArray);
290 case JSObject::EXTERNAL_INT_ELEMENTS: 293 case JSObject::EXTERNAL_INT_ELEMENTS:
291 return Builtins::builtin(Builtins::KeyedLoadIC_ExternalIntArray); 294 return Isolate::Current()->builtins()->builtin(
295 Builtins::KeyedLoadIC_ExternalIntArray);
292 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 296 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
293 return Builtins::builtin(Builtins::KeyedLoadIC_ExternalUnsignedIntArray); 297 return Isolate::Current()->builtins()->builtin(
298 Builtins::KeyedLoadIC_ExternalUnsignedIntArray);
294 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 299 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
295 return Builtins::builtin(Builtins::KeyedLoadIC_ExternalFloatArray); 300 return Isolate::Current()->builtins()->builtin(
301 Builtins::KeyedLoadIC_ExternalFloatArray);
296 default: 302 default:
297 UNREACHABLE(); 303 UNREACHABLE();
298 return NULL; 304 return NULL;
299 } 305 }
300 } 306 }
301 307
302 308
303 Code* KeyedStoreIC::external_array_stub(JSObject::ElementsKind elements_kind) { 309 Code* KeyedStoreIC::external_array_stub(JSObject::ElementsKind elements_kind) {
304 switch (elements_kind) { 310 switch (elements_kind) {
305 case JSObject::EXTERNAL_BYTE_ELEMENTS: 311 case JSObject::EXTERNAL_BYTE_ELEMENTS:
306 return Builtins::builtin(Builtins::KeyedStoreIC_ExternalByteArray); 312 return Isolate::Current()->builtins()->builtin(
313 Builtins::KeyedStoreIC_ExternalByteArray);
307 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 314 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
308 return Builtins::builtin( 315 return Isolate::Current()->builtins()->builtin(
309 Builtins::KeyedStoreIC_ExternalUnsignedByteArray); 316 Builtins::KeyedStoreIC_ExternalUnsignedByteArray);
310 case JSObject::EXTERNAL_SHORT_ELEMENTS: 317 case JSObject::EXTERNAL_SHORT_ELEMENTS:
311 return Builtins::builtin(Builtins::KeyedStoreIC_ExternalShortArray); 318 return Isolate::Current()->builtins()->builtin(
319 Builtins::KeyedStoreIC_ExternalShortArray);
312 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 320 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
313 return Builtins::builtin( 321 return Isolate::Current()->builtins()->builtin(
314 Builtins::KeyedStoreIC_ExternalUnsignedShortArray); 322 Builtins::KeyedStoreIC_ExternalUnsignedShortArray);
315 case JSObject::EXTERNAL_INT_ELEMENTS: 323 case JSObject::EXTERNAL_INT_ELEMENTS:
316 return Builtins::builtin(Builtins::KeyedStoreIC_ExternalIntArray); 324 return Isolate::Current()->builtins()->builtin(
325 Builtins::KeyedStoreIC_ExternalIntArray);
317 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 326 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
318 return Builtins::builtin(Builtins::KeyedStoreIC_ExternalUnsignedIntArray); 327 return Isolate::Current()->builtins()->builtin(
328 Builtins::KeyedStoreIC_ExternalUnsignedIntArray);
319 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 329 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
320 return Builtins::builtin(Builtins::KeyedStoreIC_ExternalFloatArray); 330 return Isolate::Current()->builtins()->builtin(
331 Builtins::KeyedStoreIC_ExternalFloatArray);
321 default: 332 default:
322 UNREACHABLE(); 333 UNREACHABLE();
323 return NULL; 334 return NULL;
324 } 335 }
325 } 336 }
326 337
327 338
328 static bool HasInterceptorGetter(JSObject* object) { 339 static bool HasInterceptorGetter(JSObject* object) {
329 return !object->GetNamedInterceptor()->getter()->IsUndefined(); 340 return !object->GetNamedInterceptor()->getter()->IsUndefined();
330 } 341 }
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 #ifdef DEBUG 681 #ifdef DEBUG
671 if (FLAG_trace_ic) PrintF("[LoadIC : +#length /string]\n"); 682 if (FLAG_trace_ic) PrintF("[LoadIC : +#length /string]\n");
672 #endif 683 #endif
673 Map* map = HeapObject::cast(*object)->map(); 684 Map* map = HeapObject::cast(*object)->map();
674 if (object->IsString()) { 685 if (object->IsString()) {
675 const int offset = String::kLengthOffset; 686 const int offset = String::kLengthOffset;
676 PatchInlinedLoad(address(), map, offset); 687 PatchInlinedLoad(address(), map, offset);
677 } 688 }
678 689
679 Code* target = NULL; 690 Code* target = NULL;
680 target = Builtins::builtin(Builtins::LoadIC_StringLength); 691 target = Isolate::Current()->builtins()->builtin(
692 Builtins::LoadIC_StringLength);
681 set_target(target); 693 set_target(target);
682 return Smi::FromInt(String::cast(*object)->length()); 694 return Smi::FromInt(String::cast(*object)->length());
683 } 695 }
684 696
685 // Use specialized code for getting the length of arrays. 697 // Use specialized code for getting the length of arrays.
686 if (object->IsJSArray() && name->Equals(HEAP->length_symbol())) { 698 if (object->IsJSArray() && name->Equals(HEAP->length_symbol())) {
687 #ifdef DEBUG 699 #ifdef DEBUG
688 if (FLAG_trace_ic) PrintF("[LoadIC : +#length /array]\n"); 700 if (FLAG_trace_ic) PrintF("[LoadIC : +#length /array]\n");
689 #endif 701 #endif
690 Map* map = HeapObject::cast(*object)->map(); 702 Map* map = HeapObject::cast(*object)->map();
691 const int offset = JSArray::kLengthOffset; 703 const int offset = JSArray::kLengthOffset;
692 PatchInlinedLoad(address(), map, offset); 704 PatchInlinedLoad(address(), map, offset);
693 705
694 Code* target = Builtins::builtin(Builtins::LoadIC_ArrayLength); 706 Code* target = Isolate::Current()->builtins()->builtin(
707 Builtins::LoadIC_ArrayLength);
695 set_target(target); 708 set_target(target);
696 return JSArray::cast(*object)->length(); 709 return JSArray::cast(*object)->length();
697 } 710 }
698 711
699 // Use specialized code for getting prototype of functions. 712 // Use specialized code for getting prototype of functions.
700 if (object->IsJSFunction() && name->Equals(HEAP->prototype_symbol()) && 713 if (object->IsJSFunction() && name->Equals(HEAP->prototype_symbol()) &&
701 JSFunction::cast(*object)->should_have_prototype()) { 714 JSFunction::cast(*object)->should_have_prototype()) {
702 #ifdef DEBUG 715 #ifdef DEBUG
703 if (FLAG_trace_ic) PrintF("[LoadIC : +#prototype /function]\n"); 716 if (FLAG_trace_ic) PrintF("[LoadIC : +#prototype /function]\n");
704 #endif 717 #endif
705 Code* target = Builtins::builtin(Builtins::LoadIC_FunctionPrototype); 718 Code* target = Isolate::Current()->builtins()->builtin(
719 Builtins::LoadIC_FunctionPrototype);
706 set_target(target); 720 set_target(target);
707 return Accessors::FunctionGetPrototype(*object, 0); 721 return Accessors::FunctionGetPrototype(*object, 0);
708 } 722 }
709 } 723 }
710 724
711 // Check if the name is trivially convertible to an index and get 725 // Check if the name is trivially convertible to an index and get
712 // the element if so. 726 // the element if so.
713 uint32_t index; 727 uint32_t index;
714 if (name->AsArrayIndex(&index)) return object->GetElement(index); 728 if (name->AsArrayIndex(&index)) return object->GetElement(index);
715 729
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
1157 return *value; 1171 return *value;
1158 } 1172 }
1159 1173
1160 // Use specialized code for setting the length of arrays. 1174 // Use specialized code for setting the length of arrays.
1161 if (receiver->IsJSArray() 1175 if (receiver->IsJSArray()
1162 && name->Equals(HEAP->length_symbol()) 1176 && name->Equals(HEAP->length_symbol())
1163 && receiver->AllowsSetElementsLength()) { 1177 && receiver->AllowsSetElementsLength()) {
1164 #ifdef DEBUG 1178 #ifdef DEBUG
1165 if (FLAG_trace_ic) PrintF("[StoreIC : +#length /array]\n"); 1179 if (FLAG_trace_ic) PrintF("[StoreIC : +#length /array]\n");
1166 #endif 1180 #endif
1167 Code* target = Builtins::builtin(Builtins::StoreIC_ArrayLength); 1181 Code* target = Isolate::Current()->builtins()->builtin(
1182 Builtins::StoreIC_ArrayLength);
1168 set_target(target); 1183 set_target(target);
1169 return receiver->SetProperty(*name, *value, NONE); 1184 return receiver->SetProperty(*name, *value, NONE);
1170 } 1185 }
1171 1186
1172 // Lookup the property locally in the receiver. 1187 // Lookup the property locally in the receiver.
1173 if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) { 1188 if (FLAG_use_ic && !receiver->IsJSGlobalProxy()) {
1174 LookupResult lookup; 1189 LookupResult lookup;
1175 if (LookupForWrite(*receiver, *name, &lookup)) { 1190 if (LookupForWrite(*receiver, *name, &lookup)) {
1176 UpdateCaches(&lookup, state, receiver, name, value); 1191 UpdateCaches(&lookup, state, receiver, name, value);
1177 } 1192 }
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1656 #undef ADDR 1671 #undef ADDR
1657 }; 1672 };
1658 1673
1659 1674
1660 Address IC::AddressFromUtilityId(IC::UtilityId id) { 1675 Address IC::AddressFromUtilityId(IC::UtilityId id) {
1661 return IC_utilities[id]; 1676 return IC_utilities[id];
1662 } 1677 }
1663 1678
1664 1679
1665 } } // namespace v8::internal 1680 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic.h ('k') | src/isolate.h » ('j') | src/runtime.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698