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

Side by Side Diff: src/code-stub-assembler.cc

Issue 2571883002: [stubs] Add CSA::IsSymbol() and CSA::IsPrivateSymbol(). (Closed)
Patch Set: refactor Created 4 years 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
« no previous file with comments | « src/code-stub-assembler.h ('k') | test/cctest/test-code-stub-assembler.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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 #include "src/code-stub-assembler.h" 4 #include "src/code-stub-assembler.h"
5 #include "src/code-factory.h" 5 #include "src/code-factory.h"
6 #include "src/frames-inl.h" 6 #include "src/frames-inl.h"
7 #include "src/frames.h" 7 #include "src/frames.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 2897 matching lines...) Expand 10 before | Expand all | Expand 10 after
2908 Node* CodeStubAssembler::IsName(Node* object) { 2908 Node* CodeStubAssembler::IsName(Node* object) {
2909 return Int32LessThanOrEqual(LoadInstanceType(object), 2909 return Int32LessThanOrEqual(LoadInstanceType(object),
2910 Int32Constant(LAST_NAME_TYPE)); 2910 Int32Constant(LAST_NAME_TYPE));
2911 } 2911 }
2912 2912
2913 Node* CodeStubAssembler::IsString(Node* object) { 2913 Node* CodeStubAssembler::IsString(Node* object) {
2914 return Int32LessThanOrEqual(LoadInstanceType(object), 2914 return Int32LessThanOrEqual(LoadInstanceType(object),
2915 Int32Constant(FIRST_NONSTRING_TYPE)); 2915 Int32Constant(FIRST_NONSTRING_TYPE));
2916 } 2916 }
2917 2917
2918 Node* CodeStubAssembler::IsSymbol(Node* object) {
2919 return IsSymbolMap(LoadMap(object));
2920 }
2921
2922 Node* CodeStubAssembler::IsPrivateSymbol(Node* object) {
2923 return Select(
2924 IsSymbol(object),
2925 [=] {
2926 Node* const flags =
2927 SmiToWord32(LoadObjectField(object, Symbol::kFlagsOffset));
2928 const int kPrivateMask = 1 << Symbol::kPrivateBit;
2929 return IsSetWord32(flags, kPrivateMask);
2930 },
2931 [=] { return Int32Constant(0); }, MachineRepresentation::kWord32);
2932 }
2933
2918 Node* CodeStubAssembler::IsNativeContext(Node* object) { 2934 Node* CodeStubAssembler::IsNativeContext(Node* object) {
2919 return WordEqual(LoadMap(object), LoadRoot(Heap::kNativeContextMapRootIndex)); 2935 return WordEqual(LoadMap(object), LoadRoot(Heap::kNativeContextMapRootIndex));
2920 } 2936 }
2921 2937
2922 Node* CodeStubAssembler::IsFixedDoubleArray(Node* object) { 2938 Node* CodeStubAssembler::IsFixedDoubleArray(Node* object) {
2923 return WordEqual(LoadMap(object), FixedDoubleArrayMapConstant()); 2939 return WordEqual(LoadMap(object), FixedDoubleArrayMapConstant());
2924 } 2940 }
2925 2941
2926 Node* CodeStubAssembler::IsHashTable(Node* object) { 2942 Node* CodeStubAssembler::IsHashTable(Node* object) {
2927 return WordEqual(LoadMap(object), LoadRoot(Heap::kHashTableMapRootIndex)); 2943 return WordEqual(LoadMap(object), LoadRoot(Heap::kHashTableMapRootIndex));
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
4264 Label* if_bailout) { 4280 Label* if_bailout) {
4265 DCHECK_EQ(MachineType::PointerRepresentation(), var_index->rep()); 4281 DCHECK_EQ(MachineType::PointerRepresentation(), var_index->rep());
4266 Comment("TryToName"); 4282 Comment("TryToName");
4267 4283
4268 Label if_hascachedindex(this), if_keyisnotindex(this); 4284 Label if_hascachedindex(this), if_keyisnotindex(this);
4269 // Handle Smi and HeapNumber keys. 4285 // Handle Smi and HeapNumber keys.
4270 var_index->Bind(TryToIntptr(key, &if_keyisnotindex)); 4286 var_index->Bind(TryToIntptr(key, &if_keyisnotindex));
4271 Goto(if_keyisindex); 4287 Goto(if_keyisindex);
4272 4288
4273 Bind(&if_keyisnotindex); 4289 Bind(&if_keyisnotindex);
4274 Node* key_instance_type = LoadInstanceType(key); 4290 Node* key_map = LoadMap(key);
4275 // Symbols are unique. 4291 // Symbols are unique.
4276 GotoIf(Word32Equal(key_instance_type, Int32Constant(SYMBOL_TYPE)), 4292 GotoIf(IsSymbolMap(key_map), if_keyisunique);
4277 if_keyisunique); 4293 Node* key_instance_type = LoadMapInstanceType(key_map);
4278 // Miss if |key| is not a String. 4294 // Miss if |key| is not a String.
4279 STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE); 4295 STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE);
4280 GotoUnless(IsStringInstanceType(key_instance_type), if_bailout); 4296 GotoUnless(IsStringInstanceType(key_instance_type), if_bailout);
4281 // |key| is a String. Check if it has a cached array index. 4297 // |key| is a String. Check if it has a cached array index.
4282 Node* hash = LoadNameHashField(key); 4298 Node* hash = LoadNameHashField(key);
4283 Node* contains_index = 4299 Node* contains_index =
4284 Word32And(hash, Int32Constant(Name::kContainsCachedArrayIndexMask)); 4300 Word32And(hash, Int32Constant(Name::kContainsCachedArrayIndexMask));
4285 GotoIf(Word32Equal(contains_index, Int32Constant(0)), &if_hascachedindex); 4301 GotoIf(Word32Equal(contains_index, Int32Constant(0)), &if_hascachedindex);
4286 // No cached array index. If the string knows that it contains an index, 4302 // No cached array index. If the string knows that it contains an index,
4287 // then it must be an uncacheable index. Handle this case in the runtime. 4303 // then it must be an uncacheable index. Handle this case in the runtime.
(...skipping 3974 matching lines...) Expand 10 before | Expand all | Expand 10 after
8262 Heap::kUndefinedValueRootIndex); 8278 Heap::kUndefinedValueRootIndex);
8263 StoreObjectFieldRoot(result, PromiseReactionJobInfo::kDebugNameOffset, 8279 StoreObjectFieldRoot(result, PromiseReactionJobInfo::kDebugNameOffset,
8264 Heap::kUndefinedValueRootIndex); 8280 Heap::kUndefinedValueRootIndex);
8265 StoreObjectFieldNoWriteBarrier(result, PromiseReactionJobInfo::kContextOffset, 8281 StoreObjectFieldNoWriteBarrier(result, PromiseReactionJobInfo::kContextOffset,
8266 context); 8282 context);
8267 return result; 8283 return result;
8268 } 8284 }
8269 8285
8270 } // namespace internal 8286 } // namespace internal
8271 } // namespace v8 8287 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stub-assembler.h ('k') | test/cctest/test-code-stub-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698