| Index: src/code-stub-assembler.h
|
| diff --git a/src/code-stub-assembler.h b/src/code-stub-assembler.h
|
| index 29afdfe4a0dd3a04ab6614d62238520950cfc4af..dd8769b3005f900cc7b1fdbf688801d03416e0e9 100644
|
| --- a/src/code-stub-assembler.h
|
| +++ b/src/code-stub-assembler.h
|
| @@ -15,6 +15,7 @@ namespace v8 {
|
| namespace internal {
|
|
|
| class CallInterfaceDescriptor;
|
| +class CodeStubArguments;
|
| class StatsCounter;
|
| class StubCache;
|
|
|
| @@ -74,6 +75,12 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
| return Is64() ? INTPTR_PARAMETERS : SMI_PARAMETERS;
|
| }
|
|
|
| + MachineRepresentation OptimalParameterRepresentation() const {
|
| + return OptimalParameterMode() == INTPTR_PARAMETERS
|
| + ? MachineType::PointerRepresentation()
|
| + : MachineRepresentation::kTaggedSigned;
|
| + }
|
| +
|
| Node* UntagParameter(Node* value, ParameterMode mode) {
|
| if (mode != SMI_PARAMETERS) value = SmiUntag(value);
|
| return value;
|
| @@ -144,6 +151,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
|
|
| // Smi | HeapNumber operations.
|
| Node* NumberInc(Node* value);
|
| + void GotoIfNotNumber(Node* value, Label* is_not_number);
|
| + void GotoIfNumber(Node* value, Label* is_number);
|
|
|
| // Allocate an object of the given size.
|
| Node* Allocate(Node* size, AllocationFlags flags = kNone);
|
| @@ -158,6 +167,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
|
|
| // Check a value for smi-ness
|
| Node* TaggedIsSmi(Node* a);
|
| + Node* TaggedIsNotSmi(Node* a);
|
| // Check that the value is a non-negative smi.
|
| Node* WordIsPositiveSmi(Node* a);
|
| // Check that a word has a word-aligned address.
|
| @@ -195,7 +205,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
|
|
| void BranchIfJSReceiver(Node* object, Label* if_true, Label* if_false);
|
| void BranchIfJSObject(Node* object, Label* if_true, Label* if_false);
|
| - void BranchIfFastJSArray(Node* object, Node* context, Label* if_true,
|
| +
|
| + enum class FastJSArrayAccessMode { INBOUNDS_READ, ANY_ACCESS };
|
| + void BranchIfFastJSArray(Node* object, Node* context,
|
| + FastJSArrayAccessMode mode, Label* if_true,
|
| Label* if_false);
|
|
|
| // Load value from current frame by given offset in bytes.
|
| @@ -349,6 +362,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
| Node* object, Node* index, Node* value,
|
| ParameterMode parameter_mode = INTEGER_PARAMETERS);
|
|
|
| + Node* BuildAppendJSArray(ElementsKind kind, Node* context, Node* array,
|
| + CodeStubArguments& args, Variable& arg_index,
|
| + Label* bailout);
|
| +
|
| void StoreFieldsNoWriteBarrier(Node* start_address, Node* end_address,
|
| Node* value);
|
|
|
| @@ -518,6 +535,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
| Node* ChangeFloat64ToTagged(Node* value);
|
| Node* ChangeInt32ToTagged(Node* value);
|
| Node* ChangeUint32ToTagged(Node* value);
|
| + Node* ChangeNumberToFloat64(Node* value);
|
|
|
| // Type conversions.
|
| // Throws a TypeError for {method_name} if {value} is not coercible to Object,
|
| @@ -663,6 +681,9 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
| void IncrementCounter(StatsCounter* counter, int delta);
|
| void DecrementCounter(StatsCounter* counter, int delta);
|
|
|
| + void Increment(Variable& variable, int value = 1,
|
| + ParameterMode mode = INTPTR_PARAMETERS);
|
| +
|
| // Generates "if (false) goto label" code. Useful for marking a label as
|
| // "live" to avoid assertion failures during graph building. In the resulting
|
| // code this check will be eliminated.
|
| @@ -1018,13 +1039,15 @@ class CodeStubArguments {
|
| CodeStubAssembler::ParameterMode mode =
|
| CodeStubAssembler::INTPTR_PARAMETERS);
|
|
|
| - Node* GetReceiver();
|
| + Node* GetReceiver() const;
|
|
|
| // |index| is zero-based and does not include the receiver
|
| Node* AtIndex(Node* index, CodeStubAssembler::ParameterMode mode =
|
| - CodeStubAssembler::INTPTR_PARAMETERS);
|
| + CodeStubAssembler::INTPTR_PARAMETERS) const;
|
| +
|
| + Node* AtIndex(int index) const;
|
|
|
| - Node* AtIndex(int index);
|
| + Node* GetLength() const { return argc_; }
|
|
|
| typedef std::function<void(CodeStubAssembler* assembler, Node* arg)>
|
| ForEachBodyFunction;
|
|
|