diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins-internal-gen.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins-internal-gen.cc | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/deps/v8/src/builtins/builtins-internal-gen.cc b/deps/v8/src/builtins/builtins-internal-gen.cc index 8d22767b58..445c8c9517 100644 --- a/deps/v8/src/builtins/builtins-internal-gen.cc +++ b/deps/v8/src/builtins/builtins-internal-gen.cc @@ -35,7 +35,7 @@ TF_BUILTIN(CopyFastSmiOrObjectElements, CodeStubAssembler) { Node* object = Parameter(Descriptor::kObject); // Load the {object}s elements. - Node* source = LoadObjectField(object, JSObject::kElementsOffset); + TNode<Object> source = LoadObjectField(object, JSObject::kElementsOffset); Node* target = CloneFixedArray(source, ExtractFixedArrayFlag::kFixedArrays); StoreObjectField(object, JSObject::kElementsOffset, target); Return(target); @@ -104,7 +104,7 @@ TF_BUILTIN(NewArgumentsElements, CodeStubAssembler) { // the mapped elements (i.e. the first {mapped_count}) with the hole, but // make sure not to overshoot the {length} if some arguments are missing. TNode<IntPtrT> number_of_holes = IntPtrMin(mapped_count, length); - Node* the_hole = TheHoleConstant(); + TNode<Oddball> the_hole = TheHoleConstant(); // Fill the first elements up to {number_of_holes} with the hole. TVARIABLE(IntPtrT, var_index, IntPtrConstant(0)); @@ -116,7 +116,7 @@ TF_BUILTIN(NewArgumentsElements, CodeStubAssembler) { TNode<IntPtrT> index = var_index.value(); // Check if we are done. - GotoIf(WordEqual(index, number_of_holes), &done_loop1); + GotoIf(IntPtrEqual(index, number_of_holes), &done_loop1); // Store the hole into the {result}. StoreFixedArrayElement(result, index, the_hole, SKIP_WRITE_BARRIER); @@ -139,7 +139,7 @@ TF_BUILTIN(NewArgumentsElements, CodeStubAssembler) { TNode<IntPtrT> index = var_index.value(); // Check if we are done. - GotoIf(WordEqual(index, length), &done_loop2); + GotoIf(IntPtrEqual(index, length), &done_loop2); // Load the parameter at the given {index}. TNode<Object> value = BitcastWordToTagged( @@ -213,7 +213,7 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { : CodeStubAssembler(state) {} Node* IsMarking() { - Node* is_marking_addr = ExternalConstant( + TNode<ExternalReference> is_marking_addr = ExternalConstant( ExternalReference::heap_is_marking_flag_address(this->isolate())); return Load(MachineType::Uint8(), is_marking_addr); } @@ -266,12 +266,12 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { } } - Node* ShouldSkipFPRegs(Node* mode) { - return WordEqual(mode, SmiConstant(kDontSaveFPRegs)); + Node* ShouldSkipFPRegs(SloppyTNode<Object> mode) { + return TaggedEqual(mode, SmiConstant(kDontSaveFPRegs)); } - Node* ShouldEmitRememberSet(Node* remembered_set) { - return WordEqual(remembered_set, SmiConstant(EMIT_REMEMBERED_SET)); + Node* ShouldEmitRememberSet(SloppyTNode<Object> remembered_set) { + return TaggedEqual(remembered_set, SmiConstant(EMIT_REMEMBERED_SET)); } void CallCFunction1WithCallerSavedRegistersMode(MachineType return_type, @@ -323,26 +323,27 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { void InsertToStoreBufferAndGoto(Node* isolate, Node* slot, Node* mode, Label* next) { - Node* store_buffer_top_addr = + TNode<ExternalReference> store_buffer_top_addr = ExternalConstant(ExternalReference::store_buffer_top(this->isolate())); Node* store_buffer_top = Load(MachineType::Pointer(), store_buffer_top_addr); StoreNoWriteBarrier(MachineType::PointerRepresentation(), store_buffer_top, slot); - Node* new_store_buffer_top = + TNode<WordT> new_store_buffer_top = IntPtrAdd(store_buffer_top, IntPtrConstant(kSystemPointerSize)); StoreNoWriteBarrier(MachineType::PointerRepresentation(), store_buffer_top_addr, new_store_buffer_top); - Node* test = WordAnd(new_store_buffer_top, - IntPtrConstant(Heap::store_buffer_mask_constant())); + TNode<WordT> test = + WordAnd(new_store_buffer_top, + IntPtrConstant(Heap::store_buffer_mask_constant())); Label overflow(this); - Branch(WordEqual(test, IntPtrConstant(0)), &overflow, next); + Branch(IntPtrEqual(test, IntPtrConstant(0)), &overflow, next); BIND(&overflow); { - Node* function = + TNode<ExternalReference> function = ExternalConstant(ExternalReference::store_buffer_overflow_function()); CallCFunction1WithCallerSavedRegistersMode(MachineType::Int32(), MachineType::Pointer(), @@ -395,7 +396,7 @@ TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) { BIND(&store_buffer_exit); { - Node* isolate_constant = + TNode<ExternalReference> isolate_constant = ExternalConstant(ExternalReference::isolate_address(isolate())); Node* fp_mode = Parameter(Descriptor::kFPMode); InsertToStoreBufferAndGoto(isolate_constant, slot, fp_mode, &exit); @@ -403,7 +404,7 @@ TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) { BIND(&store_buffer_incremental_wb); { - Node* isolate_constant = + TNode<ExternalReference> isolate_constant = ExternalConstant(ExternalReference::isolate_address(isolate())); Node* fp_mode = Parameter(Descriptor::kFPMode); InsertToStoreBufferAndGoto(isolate_constant, slot, fp_mode, @@ -435,9 +436,9 @@ TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) { BIND(&call_incremental_wb); { - Node* function = ExternalConstant( + TNode<ExternalReference> function = ExternalConstant( ExternalReference::incremental_marking_record_write_function()); - Node* isolate_constant = + TNode<ExternalReference> isolate_constant = ExternalConstant(ExternalReference::isolate_address(isolate())); Node* fp_mode = Parameter(Descriptor::kFPMode); TNode<IntPtrT> object = @@ -457,12 +458,12 @@ TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) { TF_BUILTIN(EphemeronKeyBarrier, RecordWriteCodeStubAssembler) { Label exit(this); - Node* function = ExternalConstant( + TNode<ExternalReference> function = ExternalConstant( ExternalReference::ephemeron_key_write_barrier_function()); - Node* isolate_constant = + TNode<ExternalReference> isolate_constant = ExternalConstant(ExternalReference::isolate_address(isolate())); Node* address = Parameter(Descriptor::kSlotAddress); - Node* object = BitcastTaggedToWord(Parameter(Descriptor::kObject)); + TNode<IntPtrT> object = BitcastTaggedToWord(Parameter(Descriptor::kObject)); Node* fp_mode = Parameter(Descriptor::kFPMode); CallCFunction3WithCallerSavedRegistersMode( MachineType::Int32(), MachineType::Pointer(), MachineType::Pointer(), @@ -495,7 +496,7 @@ class DeletePropertyBaseAssembler : public AccessorAssembler { GotoIf(IsSetWord32(details, PropertyDetails::kAttributesDontDeleteMask), dont_delete); // Overwrite the entry itself (see NameDictionary::SetEntry). - TNode<HeapObject> filler = TheHoleConstant(); + TNode<Oddball> filler = TheHoleConstant(); DCHECK(RootsTable::IsImmortalImmovable(RootIndex::kTheHoleValue)); StoreFixedArrayElement(properties, key_index, filler, SKIP_WRITE_BARRIER); StoreValueByKeyIndex<NameDictionary>(properties, key_index, filler, @@ -534,11 +535,12 @@ TF_BUILTIN(DeleteProperty, DeletePropertyBaseAssembler) { VARIABLE(var_index, MachineType::PointerRepresentation()); VARIABLE(var_unique, MachineRepresentation::kTagged, key); Label if_index(this), if_unique_name(this), if_notunique(this), - if_notfound(this), slow(this); + if_notfound(this), slow(this), if_proxy(this); GotoIf(TaggedIsSmi(receiver), &slow); TNode<Map> receiver_map = LoadMap(CAST(receiver)); - TNode<Int32T> instance_type = LoadMapInstanceType(receiver_map); + TNode<Uint16T> instance_type = LoadMapInstanceType(receiver_map); + GotoIf(InstanceTypeEqual(instance_type, JS_PROXY_TYPE), &if_proxy); GotoIf(IsCustomElementsReceiverInstanceType(instance_type), &slow); TryToName(key, &if_index, &var_index, &if_unique_name, &var_unique, &slow, &if_notunique); @@ -592,6 +594,14 @@ TF_BUILTIN(DeleteProperty, DeletePropertyBaseAssembler) { BIND(&if_notfound); Return(TrueConstant()); + BIND(&if_proxy); + { + TNode<Name> name = CAST(CallBuiltin(Builtins::kToName, context, key)); + GotoIf(IsPrivateSymbol(name), &slow); + TailCallBuiltin(Builtins::kProxyDeleteProperty, context, receiver, name, + language_mode); + } + BIND(&slow); { TailCallRuntime(Runtime::kDeleteProperty, context, receiver, key, @@ -622,7 +632,7 @@ class SetOrCopyDataPropertiesAssembler : public CodeStubAssembler { // Otherwise check if {source} is a proper JSObject, and if not, defer // to testing for non-empty strings below. TNode<Map> source_map = LoadMap(CAST(source)); - TNode<Int32T> source_instance_type = LoadMapInstanceType(source_map); + TNode<Uint16T> source_instance_type = LoadMapInstanceType(source_map); GotoIfNot(IsJSObjectInstanceType(source_instance_type), &if_sourcenotjsobject); @@ -670,7 +680,8 @@ class SetOrCopyDataPropertiesAssembler : public CodeStubAssembler { // handled explicitly by Object.assign() and CopyDataProperties. GotoIfNot(IsStringInstanceType(source_instance_type), &if_done); TNode<IntPtrT> source_length = LoadStringLengthAsWord(CAST(source)); - Branch(WordEqual(source_length, IntPtrConstant(0)), &if_done, if_runtime); + Branch(IntPtrEqual(source_length, IntPtrConstant(0)), &if_done, + if_runtime); } BIND(&if_done); @@ -686,7 +697,7 @@ TF_BUILTIN(CopyDataProperties, SetOrCopyDataPropertiesAssembler) { TNode<Object> source = CAST(Parameter(Descriptor::kSource)); TNode<Context> context = CAST(Parameter(Descriptor::kContext)); - CSA_ASSERT(this, WordNotEqual(target, source)); + CSA_ASSERT(this, TaggedNotEqual(target, source)); Label if_runtime(this, Label::kDeferred); Return(SetOrCopyDataProperties(context, target, source, &if_runtime, false)); @@ -980,7 +991,7 @@ TF_BUILTIN(GetProperty, CodeStubAssembler) { BIND(&if_proxy); { // Convert the {key} to a Name first. - Node* name = CallBuiltin(Builtins::kToName, context, key); + TNode<Object> name = CallBuiltin(Builtins::kToName, context, key); // The {object} is a JSProxy instance, look up the {name} on it, passing // {object} both as receiver and holder. If {name} is absent we can safely @@ -996,7 +1007,7 @@ TF_BUILTIN(GetPropertyWithReceiver, CodeStubAssembler) { Node* key = Parameter(Descriptor::kKey); Node* context = Parameter(Descriptor::kContext); Node* receiver = Parameter(Descriptor::kReceiver); - Node* on_non_existent = Parameter(Descriptor::kOnNonExistent); + TNode<Object> on_non_existent = CAST(Parameter(Descriptor::kOnNonExistent)); Label if_notfound(this), if_proxy(this, Label::kDeferred), if_slow(this, Label::kDeferred); @@ -1028,11 +1039,11 @@ TF_BUILTIN(GetPropertyWithReceiver, CodeStubAssembler) { BIND(&if_notfound); Label throw_reference_error(this); - GotoIf(WordEqual(on_non_existent, - SmiConstant(OnNonExistent::kThrowReferenceError)), + GotoIf(TaggedEqual(on_non_existent, + SmiConstant(OnNonExistent::kThrowReferenceError)), &throw_reference_error); - CSA_ASSERT(this, WordEqual(on_non_existent, - SmiConstant(OnNonExistent::kReturnUndefined))); + CSA_ASSERT(this, TaggedEqual(on_non_existent, + SmiConstant(OnNonExistent::kReturnUndefined))); Return(UndefinedConstant()); BIND(&throw_reference_error); @@ -1045,7 +1056,7 @@ TF_BUILTIN(GetPropertyWithReceiver, CodeStubAssembler) { BIND(&if_proxy); { // Convert the {key} to a Name first. - Node* name = CallBuiltin(Builtins::kToName, context, key); + TNode<Name> name = CAST(CallBuiltin(Builtins::kToName, context, key)); // Proxy cannot handle private symbol so bailout. GotoIf(IsPrivateSymbol(name), &if_slow); |