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

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

Issue 2571883002: [stubs] Add CSA::IsSymbol() and CSA::IsPrivateSymbol(). (Closed)
Patch Set: remove stuff 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 HasInstanceType(object, SYMBOL_TYPE);
Igor Sheludko 2016/12/13 20:56:28 IsSymbolMap(LoadMap(object)) does not require load
gsathya 2016/12/13 22:01:03 Doh ofc. Changed
2920 }
2921
2922 Node* CodeStubAssembler::IsPrivateSymbol(Node* object) {
2923 Label out(this);
2924 Variable var_result(this, MachineType::PointerRepresentation());
Igor Sheludko 2016/12/13 20:56:28 CSA expects kWord32 nodes as a condition in Branch
gsathya 2016/12/13 22:01:04 Ah, okay. Changed.
2925 var_result.Bind(IntPtrConstant(0));
Igor Sheludko 2016/12/13 20:56:28 Same here: Int32Constant().
gsathya 2016/12/13 22:01:03 Done.
2926
2927 GotoUnless(IsSymbolMap(LoadMap(object)), &out);
Igor Sheludko 2016/12/13 20:56:28 IsSymbol(object)
gsathya 2016/12/13 22:01:04 Done.
2928 Node* const flags =
2929 SmiToWord32(LoadObjectField(object, Symbol::kFlagsOffset));
2930 const int kPrivateMask = 1 << Symbol::kPrivateBit;
2931 var_result.Bind(IsSetWord32(flags, kPrivateMask));
2932 Goto(&out);
2933
2934 Bind(&out);
2935 return var_result.value();
Igor Sheludko 2016/12/13 20:56:28 You may want to use Select() for this.
gsathya 2016/12/13 22:01:03 I did initially but didn't look very readable to m
2936 }
2937
2918 Node* CodeStubAssembler::IsNativeContext(Node* object) { 2938 Node* CodeStubAssembler::IsNativeContext(Node* object) {
2919 return WordEqual(LoadMap(object), LoadRoot(Heap::kNativeContextMapRootIndex)); 2939 return WordEqual(LoadMap(object), LoadRoot(Heap::kNativeContextMapRootIndex));
2920 } 2940 }
2921 2941
2922 Node* CodeStubAssembler::IsFixedDoubleArray(Node* object) { 2942 Node* CodeStubAssembler::IsFixedDoubleArray(Node* object) {
2923 return WordEqual(LoadMap(object), FixedDoubleArrayMapConstant()); 2943 return WordEqual(LoadMap(object), FixedDoubleArrayMapConstant());
2924 } 2944 }
2925 2945
2926 Node* CodeStubAssembler::IsHashTable(Node* object) { 2946 Node* CodeStubAssembler::IsHashTable(Node* object) {
2927 return WordEqual(LoadMap(object), LoadRoot(Heap::kHashTableMapRootIndex)); 2947 return WordEqual(LoadMap(object), LoadRoot(Heap::kHashTableMapRootIndex));
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
4264 Label* if_bailout) { 4284 Label* if_bailout) {
4265 DCHECK_EQ(MachineType::PointerRepresentation(), var_index->rep()); 4285 DCHECK_EQ(MachineType::PointerRepresentation(), var_index->rep());
4266 Comment("TryToName"); 4286 Comment("TryToName");
4267 4287
4268 Label if_hascachedindex(this), if_keyisnotindex(this); 4288 Label if_hascachedindex(this), if_keyisnotindex(this);
4269 // Handle Smi and HeapNumber keys. 4289 // Handle Smi and HeapNumber keys.
4270 var_index->Bind(TryToIntptr(key, &if_keyisnotindex)); 4290 var_index->Bind(TryToIntptr(key, &if_keyisnotindex));
4271 Goto(if_keyisindex); 4291 Goto(if_keyisindex);
4272 4292
4273 Bind(&if_keyisnotindex); 4293 Bind(&if_keyisnotindex);
4294 // Symbols are unique.
4295 GotoIf(IsSymbol(key), if_keyisunique);
4274 Node* key_instance_type = LoadInstanceType(key); 4296 Node* key_instance_type = LoadInstanceType(key);
Igor Sheludko 2016/12/13 20:56:28 On this path we are loading map twice. How about:
gsathya 2016/12/13 22:01:04 Done.
4275 // Symbols are unique.
4276 GotoIf(Word32Equal(key_instance_type, Int32Constant(SYMBOL_TYPE)),
4277 if_keyisunique);
4278 // Miss if |key| is not a String. 4297 // Miss if |key| is not a String.
4279 STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE); 4298 STATIC_ASSERT(FIRST_NAME_TYPE == FIRST_TYPE);
4280 GotoUnless(IsStringInstanceType(key_instance_type), if_bailout); 4299 GotoUnless(IsStringInstanceType(key_instance_type), if_bailout);
4281 // |key| is a String. Check if it has a cached array index. 4300 // |key| is a String. Check if it has a cached array index.
4282 Node* hash = LoadNameHashField(key); 4301 Node* hash = LoadNameHashField(key);
4283 Node* contains_index = 4302 Node* contains_index =
4284 Word32And(hash, Int32Constant(Name::kContainsCachedArrayIndexMask)); 4303 Word32And(hash, Int32Constant(Name::kContainsCachedArrayIndexMask));
4285 GotoIf(Word32Equal(contains_index, Int32Constant(0)), &if_hascachedindex); 4304 GotoIf(Word32Equal(contains_index, Int32Constant(0)), &if_hascachedindex);
4286 // No cached array index. If the string knows that it contains an index, 4305 // 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. 4306 // 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); 8281 Heap::kUndefinedValueRootIndex);
8263 StoreObjectFieldRoot(result, PromiseReactionJobInfo::kDebugNameOffset, 8282 StoreObjectFieldRoot(result, PromiseReactionJobInfo::kDebugNameOffset,
8264 Heap::kUndefinedValueRootIndex); 8283 Heap::kUndefinedValueRootIndex);
8265 StoreObjectFieldNoWriteBarrier(result, PromiseReactionJobInfo::kContextOffset, 8284 StoreObjectFieldNoWriteBarrier(result, PromiseReactionJobInfo::kContextOffset,
8266 context); 8285 context);
8267 return result; 8286 return result;
8268 } 8287 }
8269 8288
8270 } // namespace internal 8289 } // namespace internal
8271 } // namespace v8 8290 } // 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