Line data Source code
1 : #ifndef V8_TORQUE_ARRAY_FROM_DSL_BASE_H__
2 : #define V8_TORQUE_ARRAY_FROM_DSL_BASE_H__
3 :
4 : #include "src/compiler/code-assembler.h"
5 : #include "src/code-stub-assembler.h"
6 : #include "src/utils.h"
7 : #include "torque-generated/class-definitions-from-dsl.h"
8 :
9 : namespace v8 {
10 : namespace internal {
11 :
12 12884 : class ArrayBuiltinsFromDSLAssembler {
13 : public:
14 12884 : explicit ArrayBuiltinsFromDSLAssembler(compiler::CodeAssemblerState* state) : state_(state), ca_(state) { USE(state_, ca_); }
15 : void EnsureWriteableFastElements(compiler::TNode<Context> p_context, compiler::TNode<JSArray> p_array);
16 : compiler::TNode<BoolT> IsJSArray(compiler::TNode<Context> p_context, compiler::TNode<Object> p_o);
17 : compiler::TNode<Object> LoadElementOrUndefined(compiler::TNode<FixedArray> p_a, compiler::TNode<Smi> p_i);
18 : compiler::TNode<Object> LoadElementOrUndefined(compiler::TNode<FixedDoubleArray> p_a, compiler::TNode<Smi> p_i);
19 : void StoreArrayHole(compiler::TNode<FixedDoubleArray> p_elements, compiler::TNode<Smi> p_k);
20 : void StoreArrayHole(compiler::TNode<FixedArray> p_elements, compiler::TNode<Smi> p_k);
21 : void CopyArrayElement(compiler::TNode<FixedArray> p_elements, compiler::TNode<FixedArray> p_newElements, compiler::TNode<Smi> p_from, compiler::TNode<Smi> p_to);
22 : void CopyArrayElement(compiler::TNode<FixedDoubleArray> p_elements, compiler::TNode<FixedDoubleArray> p_newElements, compiler::TNode<Smi> p_from, compiler::TNode<Smi> p_to);
23 : compiler::TNode<Object> FastArrayEvery(compiler::TNode<Context> p_context, compiler::TNode<JSReceiver> p_o, compiler::TNode<Number> p_len, compiler::TNode<JSReceiver> p_callbackfn, compiler::TNode<Object> p_thisArg, compiler::CodeAssemblerLabel* label_Bailout, compiler::TypedCodeAssemblerVariable<Smi>* label_Bailout_parameter_0);
24 : compiler::TNode<Object> FastArraySome(compiler::TNode<Context> p_context, compiler::TNode<JSReceiver> p_o, compiler::TNode<Number> p_len, compiler::TNode<JSReceiver> p_callbackfn, compiler::TNode<Object> p_thisArg, compiler::CodeAssemblerLabel* label_Bailout, compiler::TypedCodeAssemblerVariable<Smi>* label_Bailout_parameter_0);
25 : compiler::TNode<Smi> kGenericElementsAccessorId();
26 : compiler::TNode<Smi> kFastElementsAccessorId();
27 : compiler::TNode<Smi> kFailure();
28 : compiler::TNode<Smi> kSuccess();
29 : int31_t kMaxMergePending();
30 : int31_t kMinGallopWins();
31 : compiler::TNode<Smi> kSortStateTempSize();
32 : compiler::TNode<BuiltinPtr> UnsafeCast102FT9ATContext20UT5ATSmi10HeapObject20UT5ATSmi10HeapObject20UT5ATSmi10HeapObject22UT12ATHeapNumber5ATSmi(compiler::TNode<Context> p_context, compiler::TNode<Object> p_o);
33 : compiler::TNode<BuiltinPtr> UnsafeCast50FT9ATContext9SortState5ATSmi20UT5ATSmi10HeapObject(compiler::TNode<Context> p_context, compiler::TNode<Object> p_o);
34 : compiler::TNode<BuiltinPtr> UnsafeCast56FT9ATContext9SortState5ATSmi20UT5ATSmi10HeapObject5ATSmi(compiler::TNode<Context> p_context, compiler::TNode<Object> p_o);
35 : compiler::TNode<BuiltinPtr> UnsafeCast89FT9ATContext10JSReceiver20UT5ATSmi10HeapObject22UT12ATHeapNumber5ATSmi17UT7ATFalse6ATTrue(compiler::TNode<Context> p_context, compiler::TNode<Object> p_o);
36 : compiler::TNode<Smi> GetPendingRunsSize(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState);
37 : compiler::TNode<Smi> GetPendingRunBase(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_pendingRuns, compiler::TNode<Smi> p_run);
38 : void SetPendingRunBase(compiler::TNode<FixedArray> p_pendingRuns, compiler::TNode<Smi> p_run, compiler::TNode<Smi> p_value);
39 : compiler::TNode<Smi> GetPendingRunLength(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_pendingRuns, compiler::TNode<Smi> p_run);
40 : void SetPendingRunLength(compiler::TNode<FixedArray> p_pendingRuns, compiler::TNode<Smi> p_run, compiler::TNode<Smi> p_value);
41 : void PushRun(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_base, compiler::TNode<Smi> p_length);
42 : compiler::TNode<FixedArray> GetTempArray(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_requestedSize);
43 : void EnsureSuccess(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::CodeAssemblerLabel* label_Bailout);
44 : compiler::TNode<Smi> Failure(compiler::TNode<FixedArray> p_sortState);
45 : compiler::TNode<Object> CallLoad(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<BuiltinPtr> p_load, compiler::TNode<Smi> p_index, compiler::CodeAssemblerLabel* label_Bailout);
46 : void CallStore(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<BuiltinPtr> p_store, compiler::TNode<Smi> p_index, compiler::TNode<Object> p_value, compiler::CodeAssemblerLabel* label_Bailout);
47 : compiler::TNode<Smi> CountAndMakeRun(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_lowArg, compiler::TNode<Smi> p_high);
48 : void ReverseRange(compiler::TNode<FixedArray> p_array, compiler::TNode<Smi> p_from, compiler::TNode<Smi> p_to);
49 : void CopyElement(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<BuiltinPtr> p_load, compiler::TNode<BuiltinPtr> p_store, compiler::TNode<Smi> p_from, compiler::TNode<Smi> p_to, compiler::CodeAssemblerLabel* label_Bailout);
50 : void MergeLow(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_baseA, compiler::TNode<Smi> p_lengthAArg, compiler::TNode<Smi> p_baseB, compiler::TNode<Smi> p_lengthBArg, compiler::CodeAssemblerLabel* label_Bailout);
51 : void MergeHigh(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_baseA, compiler::TNode<Smi> p_lengthAArg, compiler::TNode<Smi> p_baseB, compiler::TNode<Smi> p_lengthBArg, compiler::CodeAssemblerLabel* label_Bailout);
52 : compiler::TNode<Smi> ComputeMinRunLength(compiler::TNode<Smi> p_nArg);
53 : compiler::TNode<BoolT> RunInvariantEstablished(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_pendingRuns, compiler::TNode<Smi> p_n);
54 : void MergeCollapse(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::CodeAssemblerLabel* label_Bailout);
55 : void MergeForceCollapse(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::CodeAssemblerLabel* label_Bailout);
56 : void ArrayTimSortImpl(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_length, compiler::CodeAssemblerLabel* label_Bailout);
57 : void CopyReceiverElementsToWorkArray(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_length, compiler::CodeAssemblerLabel* label_Bailout);
58 : void CopyWorkArrayToReceiver(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_sortState, compiler::TNode<Smi> p_length, compiler::CodeAssemblerLabel* label_Bailout);
59 : struct _ThisStructSortState {
60 : compiler::TNode<JSReceiver> receiver;
61 : compiler::TNode<Map> initialReceiverMap;
62 : compiler::TNode<Number> initialReceiverLength;
63 : compiler::TNode<HeapObject> userCmpFn;
64 : compiler::TNode<BuiltinPtr> sortComparePtr;
65 : compiler::TNode<BuiltinPtr> loadFn;
66 : compiler::TNode<BuiltinPtr> storeFn;
67 : compiler::TNode<BuiltinPtr> canUseSameAccessorFn;
68 : compiler::TNode<Smi> bailoutStatus;
69 : compiler::TNode<Smi> minGallop;
70 : compiler::TNode<Smi> pendingRunsSize;
71 : compiler::TNode<FixedArray> pendingRuns;
72 : compiler::TNode<FixedArray> workArray;
73 : compiler::TNode<FixedArray> tempArray;
74 : compiler::TNode<Smi> accessor;
75 :
76 : std::tuple<compiler::TNode<JSReceiver>, compiler::TNode<Map>, compiler::TNode<Number>, compiler::TNode<HeapObject>, compiler::TNode<BuiltinPtr>, compiler::TNode<BuiltinPtr>, compiler::TNode<BuiltinPtr>, compiler::TNode<BuiltinPtr>, compiler::TNode<Smi>, compiler::TNode<Smi>, compiler::TNode<Smi>, compiler::TNode<FixedArray>, compiler::TNode<FixedArray>, compiler::TNode<FixedArray>, compiler::TNode<Smi>> Flatten() const {
77 : return std::tuple_cat(std::make_tuple(receiver), std::make_tuple(initialReceiverMap), std::make_tuple(initialReceiverLength), std::make_tuple(userCmpFn), std::make_tuple(sortComparePtr), std::make_tuple(loadFn), std::make_tuple(storeFn), std::make_tuple(canUseSameAccessorFn), std::make_tuple(bailoutStatus), std::make_tuple(minGallop), std::make_tuple(pendingRunsSize), std::make_tuple(pendingRuns), std::make_tuple(workArray), std::make_tuple(tempArray), std::make_tuple(accessor));
78 : }
79 : };
80 : compiler::TNode<JSReceiver> LoadSortStateReceiver(compiler::TNode<FixedArray> p_o);
81 : void StoreSortStateReceiver(compiler::TNode<FixedArray> p_o, compiler::TNode<JSReceiver> p_v);
82 : compiler::TNode<Map> LoadSortStateInitialReceiverMap(compiler::TNode<FixedArray> p_o);
83 : void StoreSortStateInitialReceiverMap(compiler::TNode<FixedArray> p_o, compiler::TNode<Map> p_v);
84 : compiler::TNode<Number> LoadSortStateInitialReceiverLength(compiler::TNode<FixedArray> p_o);
85 : void StoreSortStateInitialReceiverLength(compiler::TNode<FixedArray> p_o, compiler::TNode<Number> p_v);
86 : compiler::TNode<HeapObject> LoadSortStateUserCmpFn(compiler::TNode<FixedArray> p_o);
87 : void StoreSortStateUserCmpFn(compiler::TNode<FixedArray> p_o, compiler::TNode<HeapObject> p_v);
88 : compiler::TNode<BuiltinPtr> LoadSortStateSortComparePtr(compiler::TNode<FixedArray> p_o);
89 : void StoreSortStateSortComparePtr(compiler::TNode<FixedArray> p_o, compiler::TNode<BuiltinPtr> p_v);
90 : compiler::TNode<BuiltinPtr> LoadSortStateLoadFn(compiler::TNode<FixedArray> p_o);
91 : void StoreSortStateLoadFn(compiler::TNode<FixedArray> p_o, compiler::TNode<BuiltinPtr> p_v);
92 : compiler::TNode<BuiltinPtr> LoadSortStateStoreFn(compiler::TNode<FixedArray> p_o);
93 : void StoreSortStateStoreFn(compiler::TNode<FixedArray> p_o, compiler::TNode<BuiltinPtr> p_v);
94 : compiler::TNode<BuiltinPtr> LoadSortStateCanUseSameAccessorFn(compiler::TNode<FixedArray> p_o);
95 : void StoreSortStateCanUseSameAccessorFn(compiler::TNode<FixedArray> p_o, compiler::TNode<BuiltinPtr> p_v);
96 : compiler::TNode<Smi> LoadSortStateBailoutStatus(compiler::TNode<FixedArray> p_o);
97 : void StoreSortStateBailoutStatus(compiler::TNode<FixedArray> p_o, compiler::TNode<Smi> p_v);
98 : compiler::TNode<Smi> LoadSortStateMinGallop(compiler::TNode<FixedArray> p_o);
99 : void StoreSortStateMinGallop(compiler::TNode<FixedArray> p_o, compiler::TNode<Smi> p_v);
100 : compiler::TNode<Smi> LoadSortStatePendingRunsSize(compiler::TNode<FixedArray> p_o);
101 : void StoreSortStatePendingRunsSize(compiler::TNode<FixedArray> p_o, compiler::TNode<Smi> p_v);
102 : compiler::TNode<FixedArray> LoadSortStatePendingRuns(compiler::TNode<FixedArray> p_o);
103 : void StoreSortStatePendingRuns(compiler::TNode<FixedArray> p_o, compiler::TNode<FixedArray> p_v);
104 : compiler::TNode<FixedArray> LoadSortStateWorkArray(compiler::TNode<FixedArray> p_o);
105 : void StoreSortStateWorkArray(compiler::TNode<FixedArray> p_o, compiler::TNode<FixedArray> p_v);
106 : compiler::TNode<FixedArray> LoadSortStateTempArray(compiler::TNode<FixedArray> p_o);
107 : void StoreSortStateTempArray(compiler::TNode<FixedArray> p_o, compiler::TNode<FixedArray> p_v);
108 : compiler::TNode<Smi> LoadSortStateAccessor(compiler::TNode<FixedArray> p_o);
109 : void StoreSortStateAccessor(compiler::TNode<FixedArray> p_o, compiler::TNode<Smi> p_v);
110 : compiler::TNode<Number> _method_SortState_Compare(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_this, compiler::TNode<Object> p_x, compiler::TNode<Object> p_y);
111 : void _method_SortState_CheckAccessor(compiler::TNode<Context> p_context, compiler::TNode<FixedArray> p_this, compiler::CodeAssemblerLabel* label_Bailout);
112 : compiler::TNode<Oddball> EveryVisitAllElements10FixedArray(compiler::TNode<Context> p_context, compiler::TNode<JSArray> p_o, compiler::TNode<Smi> p_len, compiler::TNode<JSReceiver> p_callbackfn, compiler::TNode<Object> p_thisArg, compiler::CodeAssemblerLabel* label_Bailout, compiler::TypedCodeAssemblerVariable<Smi>* label_Bailout_parameter_0);
113 : compiler::TNode<Oddball> EveryVisitAllElements16FixedDoubleArray(compiler::TNode<Context> p_context, compiler::TNode<JSArray> p_o, compiler::TNode<Smi> p_len, compiler::TNode<JSReceiver> p_callbackfn, compiler::TNode<Object> p_thisArg, compiler::CodeAssemblerLabel* label_Bailout, compiler::TypedCodeAssemblerVariable<Smi>* label_Bailout_parameter_0);
114 : compiler::TNode<Oddball> SomeVisitAllElements10FixedArray(compiler::TNode<Context> p_context, compiler::TNode<JSArray> p_o, compiler::TNode<Smi> p_len, compiler::TNode<JSReceiver> p_callbackfn, compiler::TNode<Object> p_thisArg, compiler::CodeAssemblerLabel* label_Bailout, compiler::TypedCodeAssemblerVariable<Smi>* label_Bailout_parameter_0);
115 : compiler::TNode<Oddball> SomeVisitAllElements16FixedDoubleArray(compiler::TNode<Context> p_context, compiler::TNode<JSArray> p_o, compiler::TNode<Smi> p_len, compiler::TNode<JSReceiver> p_callbackfn, compiler::TNode<Object> p_thisArg, compiler::CodeAssemblerLabel* label_Bailout, compiler::TypedCodeAssemblerVariable<Smi>* label_Bailout_parameter_0);
116 : private:
117 : compiler::CodeAssemblerState* const state_;
118 : compiler::CodeAssembler ca_;};
119 :
120 : } // namespace internal
121 : } // namespace v8
122 :
123 : #endif // V8_TORQUE_ARRAY_FROM_DSL_BASE_H__
|