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

Side by Side Diff: src/mips/stub-cache-mips.cc

Issue 12319144: Avoid TLS accesses in Object::Lookup and Object::GetPrototype. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Simplified Object::GetPrototype a bit Created 7 years, 9 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/isolate.cc ('k') | src/objects.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 1928 matching lines...) Expand 10 before | Expand all | Expand 10 after
1939 } 1939 }
1940 1940
1941 GenerateNameCheck(name, &name_miss); 1941 GenerateNameCheck(name, &name_miss);
1942 1942
1943 // Check that the maps starting from the prototype haven't changed. 1943 // Check that the maps starting from the prototype haven't changed.
1944 GenerateDirectLoadGlobalFunctionPrototype(masm(), 1944 GenerateDirectLoadGlobalFunctionPrototype(masm(),
1945 Context::STRING_FUNCTION_INDEX, 1945 Context::STRING_FUNCTION_INDEX,
1946 v0, 1946 v0,
1947 &miss); 1947 &miss);
1948 ASSERT(!object.is_identical_to(holder)); 1948 ASSERT(!object.is_identical_to(holder));
1949 CheckPrototypes(Handle<JSObject>(JSObject::cast(object->GetPrototype())), 1949 CheckPrototypes(
1950 v0, holder, a1, a3, t0, name, &miss); 1950 Handle<JSObject>(JSObject::cast(object->GetPrototype(isolate()))),
1951 v0, holder, a1, a3, t0, name, &miss);
1951 1952
1952 Register receiver = a1; 1953 Register receiver = a1;
1953 Register index = t1; 1954 Register index = t1;
1954 Register result = v0; 1955 Register result = v0;
1955 __ lw(receiver, MemOperand(sp, argc * kPointerSize)); 1956 __ lw(receiver, MemOperand(sp, argc * kPointerSize));
1956 if (argc > 0) { 1957 if (argc > 0) {
1957 __ lw(index, MemOperand(sp, (argc - 1) * kPointerSize)); 1958 __ lw(index, MemOperand(sp, (argc - 1) * kPointerSize));
1958 } else { 1959 } else {
1959 __ LoadRoot(index, Heap::kUndefinedValueRootIndex); 1960 __ LoadRoot(index, Heap::kUndefinedValueRootIndex);
1960 } 1961 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 index_out_of_range_label = &miss; 2020 index_out_of_range_label = &miss;
2020 } 2021 }
2021 GenerateNameCheck(name, &name_miss); 2022 GenerateNameCheck(name, &name_miss);
2022 2023
2023 // Check that the maps starting from the prototype haven't changed. 2024 // Check that the maps starting from the prototype haven't changed.
2024 GenerateDirectLoadGlobalFunctionPrototype(masm(), 2025 GenerateDirectLoadGlobalFunctionPrototype(masm(),
2025 Context::STRING_FUNCTION_INDEX, 2026 Context::STRING_FUNCTION_INDEX,
2026 v0, 2027 v0,
2027 &miss); 2028 &miss);
2028 ASSERT(!object.is_identical_to(holder)); 2029 ASSERT(!object.is_identical_to(holder));
2029 CheckPrototypes(Handle<JSObject>(JSObject::cast(object->GetPrototype())), 2030 CheckPrototypes(
2030 v0, holder, a1, a3, t0, name, &miss); 2031 Handle<JSObject>(JSObject::cast(object->GetPrototype(isolate()))),
2032 v0, holder, a1, a3, t0, name, &miss);
2031 2033
2032 Register receiver = v0; 2034 Register receiver = v0;
2033 Register index = t1; 2035 Register index = t1;
2034 Register scratch = a3; 2036 Register scratch = a3;
2035 Register result = v0; 2037 Register result = v0;
2036 __ lw(receiver, MemOperand(sp, argc * kPointerSize)); 2038 __ lw(receiver, MemOperand(sp, argc * kPointerSize));
2037 if (argc > 0) { 2039 if (argc > 0) {
2038 __ lw(index, MemOperand(sp, (argc - 1) * kPointerSize)); 2040 __ lw(index, MemOperand(sp, (argc - 1) * kPointerSize));
2039 } else { 2041 } else {
2040 __ LoadRoot(index, Heap::kUndefinedValueRootIndex); 2042 __ LoadRoot(index, Heap::kUndefinedValueRootIndex);
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
2476 break; 2478 break;
2477 2479
2478 case STRING_CHECK: 2480 case STRING_CHECK:
2479 // Check that the object is a two-byte string or a symbol. 2481 // Check that the object is a two-byte string or a symbol.
2480 __ GetObjectType(a1, a3, a3); 2482 __ GetObjectType(a1, a3, a3);
2481 __ Branch(&miss, Ugreater_equal, a3, Operand(FIRST_NONSTRING_TYPE)); 2483 __ Branch(&miss, Ugreater_equal, a3, Operand(FIRST_NONSTRING_TYPE));
2482 // Check that the maps starting from the prototype haven't changed. 2484 // Check that the maps starting from the prototype haven't changed.
2483 GenerateDirectLoadGlobalFunctionPrototype( 2485 GenerateDirectLoadGlobalFunctionPrototype(
2484 masm(), Context::STRING_FUNCTION_INDEX, a0, &miss); 2486 masm(), Context::STRING_FUNCTION_INDEX, a0, &miss);
2485 CheckPrototypes( 2487 CheckPrototypes(
2486 Handle<JSObject>(JSObject::cast(object->GetPrototype())), 2488 Handle<JSObject>(JSObject::cast(object->GetPrototype(isolate()))),
2487 a0, holder, a3, a1, t0, name, &miss); 2489 a0, holder, a3, a1, t0, name, &miss);
2488 break; 2490 break;
2489 2491
2490 case NUMBER_CHECK: { 2492 case NUMBER_CHECK: {
2491 Label fast; 2493 Label fast;
2492 // Check that the object is a smi or a heap number. 2494 // Check that the object is a smi or a heap number.
2493 __ JumpIfSmi(a1, &fast); 2495 __ JumpIfSmi(a1, &fast);
2494 __ GetObjectType(a1, a0, a0); 2496 __ GetObjectType(a1, a0, a0);
2495 __ Branch(&miss, ne, a0, Operand(HEAP_NUMBER_TYPE)); 2497 __ Branch(&miss, ne, a0, Operand(HEAP_NUMBER_TYPE));
2496 __ bind(&fast); 2498 __ bind(&fast);
2497 // Check that the maps starting from the prototype haven't changed. 2499 // Check that the maps starting from the prototype haven't changed.
2498 GenerateDirectLoadGlobalFunctionPrototype( 2500 GenerateDirectLoadGlobalFunctionPrototype(
2499 masm(), Context::NUMBER_FUNCTION_INDEX, a0, &miss); 2501 masm(), Context::NUMBER_FUNCTION_INDEX, a0, &miss);
2500 CheckPrototypes( 2502 CheckPrototypes(
2501 Handle<JSObject>(JSObject::cast(object->GetPrototype())), 2503 Handle<JSObject>(JSObject::cast(object->GetPrototype(isolate()))),
2502 a0, holder, a3, a1, t0, name, &miss); 2504 a0, holder, a3, a1, t0, name, &miss);
2503 break; 2505 break;
2504 } 2506 }
2505 case BOOLEAN_CHECK: { 2507 case BOOLEAN_CHECK: {
2506 Label fast; 2508 Label fast;
2507 // Check that the object is a boolean. 2509 // Check that the object is a boolean.
2508 __ LoadRoot(t0, Heap::kTrueValueRootIndex); 2510 __ LoadRoot(t0, Heap::kTrueValueRootIndex);
2509 __ Branch(&fast, eq, a1, Operand(t0)); 2511 __ Branch(&fast, eq, a1, Operand(t0));
2510 __ LoadRoot(t0, Heap::kFalseValueRootIndex); 2512 __ LoadRoot(t0, Heap::kFalseValueRootIndex);
2511 __ Branch(&miss, ne, a1, Operand(t0)); 2513 __ Branch(&miss, ne, a1, Operand(t0));
2512 __ bind(&fast); 2514 __ bind(&fast);
2513 // Check that the maps starting from the prototype haven't changed. 2515 // Check that the maps starting from the prototype haven't changed.
2514 GenerateDirectLoadGlobalFunctionPrototype( 2516 GenerateDirectLoadGlobalFunctionPrototype(
2515 masm(), Context::BOOLEAN_FUNCTION_INDEX, a0, &miss); 2517 masm(), Context::BOOLEAN_FUNCTION_INDEX, a0, &miss);
2516 CheckPrototypes( 2518 CheckPrototypes(
2517 Handle<JSObject>(JSObject::cast(object->GetPrototype())), 2519 Handle<JSObject>(JSObject::cast(object->GetPrototype(isolate()))),
2518 a0, holder, a3, a1, t0, name, &miss); 2520 a0, holder, a3, a1, t0, name, &miss);
2519 break; 2521 break;
2520 } 2522 }
2521 } 2523 }
2522 2524
2523 __ jmp(success); 2525 __ jmp(success);
2524 2526
2525 // Handle call cache miss. 2527 // Handle call cache miss.
2526 __ bind(&miss); 2528 __ bind(&miss);
2527 2529
(...skipping 1698 matching lines...) Expand 10 before | Expand all | Expand 10 after
4226 __ Jump(ic_slow, RelocInfo::CODE_TARGET); 4228 __ Jump(ic_slow, RelocInfo::CODE_TARGET);
4227 } 4229 }
4228 } 4230 }
4229 4231
4230 4232
4231 #undef __ 4233 #undef __
4232 4234
4233 } } // namespace v8::internal 4235 } } // namespace v8::internal
4234 4236
4235 #endif // V8_TARGET_ARCH_MIPS 4237 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/isolate.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698