summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins-internal-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/builtins-internal-gen.cc')
-rw-r--r--deps/v8/src/builtins/builtins-internal-gen.cc81
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);