Line data Source code
1 : #include "src/builtins/builtins-utils-gen.h"
2 : #include "src/builtins/builtins.h"
3 : #include "src/code-factory.h"
4 : #include "src/elements-kind.h"
5 : #include "src/heap/factory-inl.h"
6 : #include "src/objects.h"
7 : #include "src/objects/arguments.h"
8 : #include "src/objects/bigint.h"
9 : #include "src/builtins/builtins-array-gen.h"
10 : #include "src/builtins/builtins-collections-gen.h"
11 : #include "src/builtins/builtins-data-view-gen.h"
12 : #include "src/builtins/builtins-iterator-gen.h"
13 : #include "src/builtins/builtins-regexp-gen.h"
14 : #include "src/builtins/builtins-typed-array-gen.h"
15 : #include "src/builtins/builtins-constructor-gen.h"
16 : #include "torque-generated/builtins-base-from-dsl-gen.h"
17 : #include "torque-generated/builtins-arguments-from-dsl-gen.h"
18 : #include "torque-generated/builtins-array-from-dsl-gen.h"
19 : #include "torque-generated/builtins-array-copywithin-from-dsl-gen.h"
20 : #include "torque-generated/builtins-array-filter-from-dsl-gen.h"
21 : #include "torque-generated/builtins-array-foreach-from-dsl-gen.h"
22 : #include "torque-generated/builtins-array-join-from-dsl-gen.h"
23 : #include "torque-generated/builtins-array-lastindexof-from-dsl-gen.h"
24 : #include "torque-generated/builtins-array-of-from-dsl-gen.h"
25 : #include "torque-generated/builtins-array-map-from-dsl-gen.h"
26 : #include "torque-generated/builtins-array-reverse-from-dsl-gen.h"
27 : #include "torque-generated/builtins-array-slice-from-dsl-gen.h"
28 : #include "torque-generated/builtins-array-splice-from-dsl-gen.h"
29 : #include "torque-generated/builtins-array-unshift-from-dsl-gen.h"
30 : #include "torque-generated/builtins-collections-from-dsl-gen.h"
31 : #include "torque-generated/builtins-data-view-from-dsl-gen.h"
32 : #include "torque-generated/builtins-extras-utils-from-dsl-gen.h"
33 : #include "torque-generated/builtins-object-from-dsl-gen.h"
34 : #include "torque-generated/builtins-iterator-from-dsl-gen.h"
35 : #include "torque-generated/builtins-string-from-dsl-gen.h"
36 : #include "torque-generated/builtins-typed-array-from-dsl-gen.h"
37 : #include "torque-generated/builtins-typed-array-createtypedarray-from-dsl-gen.h"
38 : #include "torque-generated/builtins-test-from-dsl-gen.h"
39 :
40 : namespace v8 {
41 : namespace internal {
42 :
43 56 : void ArrayUnshiftBuiltinsFromDSLAssembler::TryFastArrayUnshift(compiler::TNode<Context> p_context, compiler::TNode<Object> p_receiver, CodeStubArguments* p_arguments, compiler::CodeAssemblerLabel* label_Slow) {
44 56 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
45 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
46 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, JSArray> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
47 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSArray, Map> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
48 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSArray, Map> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
49 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSArray, Map, Map> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
50 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSArray, Map, Map> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
51 112 : compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
52 56 : ca_.Goto(&block0, p_context, p_receiver);
53 :
54 56 : if (block0.is_used()) {
55 56 : compiler::TNode<Context> tmp0;
56 56 : compiler::TNode<Object> tmp1;
57 56 : ca_.Bind(&block0, &tmp0, &tmp1);
58 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 11);
59 56 : compiler::TNode<JSArray> tmp2;
60 56 : USE(tmp2);
61 56 : compiler::CodeAssemblerLabel label0(&ca_);
62 56 : tmp2 = BaseBuiltinsFromDSLAssembler(state_).Cast13ATFastJSArray(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}, &label0);
63 56 : ca_.Goto(&block2, tmp0, tmp1, tmp1, tmp2);
64 56 : if (label0.is_used()) {
65 56 : ca_.Bind(&label0);
66 56 : ca_.Goto(&block3, tmp0, tmp1, tmp1);
67 56 : }
68 : }
69 :
70 56 : if (block3.is_used()) {
71 56 : compiler::TNode<Context> tmp3;
72 56 : compiler::TNode<Object> tmp4;
73 56 : compiler::TNode<Object> tmp5;
74 56 : ca_.Bind(&block3, &tmp3, &tmp4, &tmp5);
75 56 : ca_.Goto(&block1);
76 : }
77 :
78 56 : if (block2.is_used()) {
79 56 : compiler::TNode<Context> tmp6;
80 56 : compiler::TNode<Object> tmp7;
81 56 : compiler::TNode<Object> tmp8;
82 56 : compiler::TNode<JSArray> tmp9;
83 56 : ca_.Bind(&block2, &tmp6, &tmp7, &tmp8, &tmp9);
84 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 12);
85 56 : ArrayBuiltinsFromDSLAssembler(state_).EnsureWriteableFastElements(compiler::TNode<Context>{tmp6}, compiler::TNode<JSArray>{tmp9});
86 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 14);
87 56 : compiler::TNode<Map> tmp10;
88 56 : USE(tmp10);
89 56 : tmp10 = ca_.UncheckedCast<Map>(BaseBuiltinsFromDSLAssembler(state_).LoadHeapObjectMap(compiler::TNode<HeapObject>{tmp9}));
90 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 15);
91 56 : compiler::TNode<BoolT> tmp11;
92 56 : USE(tmp11);
93 56 : tmp11 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).IsExtensibleMap(compiler::TNode<Map>{tmp10}));
94 56 : compiler::TNode<BoolT> tmp12;
95 56 : USE(tmp12);
96 56 : tmp12 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).Word32BinaryNot(compiler::TNode<BoolT>{tmp11}));
97 56 : ca_.Branch(tmp12, &block4, &block5, tmp6, tmp7, tmp9, tmp10);
98 : }
99 :
100 56 : if (block4.is_used()) {
101 56 : compiler::TNode<Context> tmp13;
102 56 : compiler::TNode<Object> tmp14;
103 56 : compiler::TNode<JSArray> tmp15;
104 56 : compiler::TNode<Map> tmp16;
105 56 : ca_.Bind(&block4, &tmp13, &tmp14, &tmp15, &tmp16);
106 56 : ca_.Goto(&block1);
107 : }
108 :
109 56 : if (block5.is_used()) {
110 56 : compiler::TNode<Context> tmp17;
111 56 : compiler::TNode<Object> tmp18;
112 56 : compiler::TNode<JSArray> tmp19;
113 56 : compiler::TNode<Map> tmp20;
114 56 : ca_.Bind(&block5, &tmp17, &tmp18, &tmp19, &tmp20);
115 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 16);
116 56 : compiler::CodeAssemblerLabel label0(&ca_);
117 56 : CodeStubAssembler(state_).EnsureArrayLengthWritable(compiler::TNode<Map>{tmp20}, &label0);
118 56 : ca_.Goto(&block6, tmp17, tmp18, tmp19, tmp20, tmp20);
119 56 : if (label0.is_used()) {
120 56 : ca_.Bind(&label0);
121 56 : ca_.Goto(&block7, tmp17, tmp18, tmp19, tmp20, tmp20);
122 56 : }
123 : }
124 :
125 56 : if (block7.is_used()) {
126 56 : compiler::TNode<Context> tmp21;
127 56 : compiler::TNode<Object> tmp22;
128 56 : compiler::TNode<JSArray> tmp23;
129 56 : compiler::TNode<Map> tmp24;
130 56 : compiler::TNode<Map> tmp25;
131 56 : ca_.Bind(&block7, &tmp21, &tmp22, &tmp23, &tmp24, &tmp25);
132 56 : ca_.Goto(&block1);
133 : }
134 :
135 56 : if (block6.is_used()) {
136 56 : compiler::TNode<Context> tmp26;
137 56 : compiler::TNode<Object> tmp27;
138 56 : compiler::TNode<JSArray> tmp28;
139 56 : compiler::TNode<Map> tmp29;
140 56 : compiler::TNode<Map> tmp30;
141 56 : ca_.Bind(&block6, &tmp26, &tmp27, &tmp28, &tmp29, &tmp30);
142 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 19);
143 56 : compiler::TNode<JSFunction> tmp31;
144 56 : USE(tmp31);
145 56 : tmp31 = ca_.UncheckedCast<JSFunction>(BaseBuiltinsFromDSLAssembler(state_).LoadTargetFromFrame());
146 56 : compiler::TNode<Oddball> tmp32;
147 56 : USE(tmp32);
148 56 : tmp32 = BaseBuiltinsFromDSLAssembler(state_).Undefined();
149 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 20);
150 56 : compiler::TNode<IntPtrT> tmp33;
151 56 : USE(tmp33);
152 56 : tmp33 = ca_.UncheckedCast<IntPtrT>(CodeStubAssembler(state_).GetArgumentsLength(p_arguments));
153 56 : compiler::TNode<Int32T> tmp34;
154 56 : USE(tmp34);
155 56 : tmp34 = ca_.UncheckedCast<Int32T>(BaseBuiltinsFromDSLAssembler(state_).Convert7ATint328ATintptr(compiler::TNode<IntPtrT>{tmp33}));
156 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 18);
157 56 : CodeStubAssembler(state_).TailCallBuiltin(Builtins::kArrayUnshift, tmp26, tmp31, tmp32, tmp34);
158 : }
159 :
160 56 : if (block1.is_used()) {
161 56 : ca_.Bind(&block1);
162 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 8);
163 56 : ca_.Goto(label_Slow);
164 56 : }
165 56 : }
166 :
167 56 : compiler::TNode<Number> ArrayUnshiftBuiltinsFromDSLAssembler::GenericArrayUnshift(compiler::TNode<Context> p_context, compiler::TNode<Object> p_receiver, CodeStubArguments* p_arguments) {
168 56 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
169 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
170 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
171 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
172 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
173 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
174 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
175 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Number> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
176 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Number> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
177 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
178 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Number, Number, Oddball> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
179 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Number, Number, Oddball> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
180 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Number, Number, Oddball> block15(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
181 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
182 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Smi> block18(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
183 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Smi> block16(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
184 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi, Number, Smi> block17(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
185 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, JSReceiver, Number, Smi> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
186 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Number> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
187 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Number> block19(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
188 56 : ca_.Goto(&block0, p_context, p_receiver);
189 :
190 56 : if (block0.is_used()) {
191 56 : compiler::TNode<Context> tmp0;
192 56 : compiler::TNode<Object> tmp1;
193 56 : ca_.Bind(&block0, &tmp0, &tmp1);
194 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 27);
195 56 : compiler::TNode<JSReceiver> tmp2;
196 56 : USE(tmp2);
197 56 : tmp2 = ca_.UncheckedCast<JSReceiver>(CodeStubAssembler(state_).ToObject_Inline(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}));
198 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 30);
199 56 : compiler::TNode<Number> tmp3;
200 56 : USE(tmp3);
201 56 : tmp3 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).GetLengthProperty(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp2}));
202 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 33);
203 56 : compiler::TNode<IntPtrT> tmp4;
204 56 : USE(tmp4);
205 56 : tmp4 = ca_.UncheckedCast<IntPtrT>(CodeStubAssembler(state_).GetArgumentsLength(p_arguments));
206 56 : compiler::TNode<Smi> tmp5;
207 56 : USE(tmp5);
208 56 : tmp5 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).Convert5ATSmi8ATintptr(compiler::TNode<IntPtrT>{tmp4}));
209 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 36);
210 56 : compiler::TNode<Smi> tmp6;
211 56 : USE(tmp6);
212 56 : tmp6 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
213 56 : compiler::TNode<BoolT> tmp7;
214 56 : USE(tmp7);
215 56 : tmp7 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiGreaterThan(compiler::TNode<Smi>{tmp5}, compiler::TNode<Smi>{tmp6}));
216 56 : ca_.Branch(tmp7, &block2, &block3, tmp0, tmp1, tmp2, tmp3, tmp5);
217 : }
218 :
219 56 : if (block2.is_used()) {
220 56 : compiler::TNode<Context> tmp8;
221 56 : compiler::TNode<Object> tmp9;
222 56 : compiler::TNode<JSReceiver> tmp10;
223 56 : compiler::TNode<Number> tmp11;
224 56 : compiler::TNode<Smi> tmp12;
225 56 : ca_.Bind(&block2, &tmp8, &tmp9, &tmp10, &tmp11, &tmp12);
226 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 38);
227 56 : compiler::TNode<Number> tmp13;
228 56 : USE(tmp13);
229 56 : tmp13 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberAdd(compiler::TNode<Number>{tmp11}, compiler::TNode<Number>{tmp12}));
230 56 : compiler::TNode<Number> tmp14;
231 56 : USE(tmp14);
232 56 : tmp14 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi19ATconstexpr_float64(kMaxSafeInteger));
233 56 : compiler::CodeAssemblerLabel label0(&ca_);
234 112 : compiler::CodeAssemblerLabel label1(&ca_);
235 56 : CodeStubAssembler(state_).BranchIfNumberGreaterThan(compiler::TNode<Number>{tmp13}, compiler::TNode<Number>{tmp14}, &label0, &label1);
236 56 : if (label0.is_used()) {
237 56 : ca_.Bind(&label0);
238 56 : ca_.Goto(&block6, tmp8, tmp9, tmp10, tmp11, tmp12, tmp13);
239 : }
240 56 : if (label1.is_used()) {
241 56 : ca_.Bind(&label1);
242 56 : ca_.Goto(&block7, tmp8, tmp9, tmp10, tmp11, tmp12, tmp13);
243 56 : }
244 : }
245 :
246 56 : if (block6.is_used()) {
247 56 : compiler::TNode<Context> tmp15;
248 56 : compiler::TNode<Object> tmp16;
249 56 : compiler::TNode<JSReceiver> tmp17;
250 56 : compiler::TNode<Number> tmp18;
251 56 : compiler::TNode<Smi> tmp19;
252 56 : compiler::TNode<Number> tmp20;
253 56 : ca_.Bind(&block6, &tmp15, &tmp16, &tmp17, &tmp18, &tmp19, &tmp20);
254 56 : ca_.Goto(&block4, tmp15, tmp16, tmp17, tmp18, tmp19);
255 : }
256 :
257 56 : if (block7.is_used()) {
258 56 : compiler::TNode<Context> tmp21;
259 56 : compiler::TNode<Object> tmp22;
260 56 : compiler::TNode<JSReceiver> tmp23;
261 56 : compiler::TNode<Number> tmp24;
262 56 : compiler::TNode<Smi> tmp25;
263 56 : compiler::TNode<Number> tmp26;
264 56 : ca_.Bind(&block7, &tmp21, &tmp22, &tmp23, &tmp24, &tmp25, &tmp26);
265 56 : ca_.Goto(&block5, tmp21, tmp22, tmp23, tmp24, tmp25);
266 : }
267 :
268 56 : if (block4.is_used()) {
269 56 : compiler::TNode<Context> tmp27;
270 56 : compiler::TNode<Object> tmp28;
271 56 : compiler::TNode<JSReceiver> tmp29;
272 56 : compiler::TNode<Number> tmp30;
273 56 : compiler::TNode<Smi> tmp31;
274 56 : ca_.Bind(&block4, &tmp27, &tmp28, &tmp29, &tmp30, &tmp31);
275 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 39);
276 56 : CodeStubAssembler(state_).ThrowTypeError(compiler::TNode<Context>{tmp27}, MessageTemplate::kInvalidArrayLength);
277 : }
278 :
279 56 : if (block5.is_used()) {
280 56 : compiler::TNode<Context> tmp32;
281 56 : compiler::TNode<Object> tmp33;
282 56 : compiler::TNode<JSReceiver> tmp34;
283 56 : compiler::TNode<Number> tmp35;
284 56 : compiler::TNode<Smi> tmp36;
285 56 : ca_.Bind(&block5, &tmp32, &tmp33, &tmp34, &tmp35, &tmp36);
286 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 43);
287 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 46);
288 56 : ca_.Goto(&block10, tmp32, tmp33, tmp34, tmp35, tmp36, tmp35);
289 : }
290 :
291 56 : if (block10.is_used()) {
292 56 : compiler::TNode<Context> tmp37;
293 56 : compiler::TNode<Object> tmp38;
294 56 : compiler::TNode<JSReceiver> tmp39;
295 56 : compiler::TNode<Number> tmp40;
296 56 : compiler::TNode<Smi> tmp41;
297 56 : compiler::TNode<Number> tmp42;
298 56 : ca_.Bind(&block10, &tmp37, &tmp38, &tmp39, &tmp40, &tmp41, &tmp42);
299 56 : compiler::TNode<Number> tmp43;
300 56 : USE(tmp43);
301 56 : tmp43 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(0));
302 56 : compiler::CodeAssemblerLabel label0(&ca_);
303 112 : compiler::CodeAssemblerLabel label1(&ca_);
304 56 : CodeStubAssembler(state_).BranchIfNumberGreaterThan(compiler::TNode<Number>{tmp42}, compiler::TNode<Number>{tmp43}, &label0, &label1);
305 56 : if (label0.is_used()) {
306 56 : ca_.Bind(&label0);
307 56 : ca_.Goto(&block11, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp42);
308 : }
309 56 : if (label1.is_used()) {
310 56 : ca_.Bind(&label1);
311 56 : ca_.Goto(&block12, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp42);
312 56 : }
313 : }
314 :
315 56 : if (block11.is_used()) {
316 56 : compiler::TNode<Context> tmp44;
317 56 : compiler::TNode<Object> tmp45;
318 56 : compiler::TNode<JSReceiver> tmp46;
319 56 : compiler::TNode<Number> tmp47;
320 56 : compiler::TNode<Smi> tmp48;
321 56 : compiler::TNode<Number> tmp49;
322 56 : compiler::TNode<Number> tmp50;
323 56 : ca_.Bind(&block11, &tmp44, &tmp45, &tmp46, &tmp47, &tmp48, &tmp49, &tmp50);
324 56 : ca_.Goto(&block8, tmp44, tmp45, tmp46, tmp47, tmp48, tmp49);
325 : }
326 :
327 56 : if (block12.is_used()) {
328 56 : compiler::TNode<Context> tmp51;
329 56 : compiler::TNode<Object> tmp52;
330 56 : compiler::TNode<JSReceiver> tmp53;
331 56 : compiler::TNode<Number> tmp54;
332 56 : compiler::TNode<Smi> tmp55;
333 56 : compiler::TNode<Number> tmp56;
334 56 : compiler::TNode<Number> tmp57;
335 56 : ca_.Bind(&block12, &tmp51, &tmp52, &tmp53, &tmp54, &tmp55, &tmp56, &tmp57);
336 56 : ca_.Goto(&block9, tmp51, tmp52, tmp53, tmp54, tmp55, tmp56);
337 : }
338 :
339 56 : if (block8.is_used()) {
340 56 : compiler::TNode<Context> tmp58;
341 56 : compiler::TNode<Object> tmp59;
342 56 : compiler::TNode<JSReceiver> tmp60;
343 56 : compiler::TNode<Number> tmp61;
344 56 : compiler::TNode<Smi> tmp62;
345 56 : compiler::TNode<Number> tmp63;
346 56 : ca_.Bind(&block8, &tmp58, &tmp59, &tmp60, &tmp61, &tmp62, &tmp63);
347 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 48);
348 56 : compiler::TNode<Number> tmp64;
349 56 : USE(tmp64);
350 56 : tmp64 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(1));
351 56 : compiler::TNode<Number> tmp65;
352 56 : USE(tmp65);
353 56 : tmp65 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberSub(compiler::TNode<Number>{tmp63}, compiler::TNode<Number>{tmp64}));
354 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 51);
355 56 : compiler::TNode<Number> tmp66;
356 56 : USE(tmp66);
357 56 : tmp66 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberAdd(compiler::TNode<Number>{tmp63}, compiler::TNode<Number>{tmp62}));
358 56 : compiler::TNode<Number> tmp67;
359 56 : USE(tmp67);
360 56 : tmp67 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(1));
361 56 : compiler::TNode<Number> tmp68;
362 56 : USE(tmp68);
363 56 : tmp68 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberSub(compiler::TNode<Number>{tmp66}, compiler::TNode<Number>{tmp67}));
364 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 54);
365 56 : compiler::TNode<Oddball> tmp69;
366 56 : tmp69 = TORQUE_CAST(CodeStubAssembler(state_).CallBuiltin(Builtins::kHasProperty, tmp58, tmp60, tmp65));
367 56 : USE(tmp69);
368 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 57);
369 56 : compiler::TNode<Oddball> tmp70;
370 56 : USE(tmp70);
371 56 : tmp70 = BaseBuiltinsFromDSLAssembler(state_).True();
372 56 : compiler::TNode<BoolT> tmp71;
373 56 : USE(tmp71);
374 56 : tmp71 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).WordEqual(compiler::TNode<HeapObject>{tmp69}, compiler::TNode<HeapObject>{tmp70}));
375 56 : ca_.Branch(tmp71, &block13, &block14, tmp58, tmp59, tmp60, tmp61, tmp62, tmp63, tmp65, tmp68, tmp69);
376 : }
377 :
378 56 : if (block13.is_used()) {
379 56 : compiler::TNode<Context> tmp72;
380 56 : compiler::TNode<Object> tmp73;
381 56 : compiler::TNode<JSReceiver> tmp74;
382 56 : compiler::TNode<Number> tmp75;
383 56 : compiler::TNode<Smi> tmp76;
384 56 : compiler::TNode<Number> tmp77;
385 56 : compiler::TNode<Number> tmp78;
386 56 : compiler::TNode<Number> tmp79;
387 56 : compiler::TNode<Oddball> tmp80;
388 56 : ca_.Bind(&block13, &tmp72, &tmp73, &tmp74, &tmp75, &tmp76, &tmp77, &tmp78, &tmp79, &tmp80);
389 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 59);
390 56 : compiler::TNode<Object> tmp81;
391 56 : USE(tmp81);
392 56 : tmp81 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetProperty(compiler::TNode<Context>{tmp72}, compiler::TNode<Object>{tmp74}, compiler::TNode<Object>{tmp78}));
393 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 62);
394 56 : CodeStubAssembler(state_).CallBuiltin(Builtins::kSetProperty, tmp72, tmp74, tmp79, tmp81);
395 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 57);
396 56 : ca_.Goto(&block15, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77, tmp78, tmp79, tmp80);
397 : }
398 :
399 56 : if (block14.is_used()) {
400 56 : compiler::TNode<Context> tmp83;
401 56 : compiler::TNode<Object> tmp84;
402 56 : compiler::TNode<JSReceiver> tmp85;
403 56 : compiler::TNode<Number> tmp86;
404 56 : compiler::TNode<Smi> tmp87;
405 56 : compiler::TNode<Number> tmp88;
406 56 : compiler::TNode<Number> tmp89;
407 56 : compiler::TNode<Number> tmp90;
408 56 : compiler::TNode<Oddball> tmp91;
409 56 : ca_.Bind(&block14, &tmp83, &tmp84, &tmp85, &tmp86, &tmp87, &tmp88, &tmp89, &tmp90, &tmp91);
410 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 65);
411 56 : compiler::TNode<Smi> tmp92;
412 56 : USE(tmp92);
413 56 : tmp92 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr14ATLanguageMode24ATconstexpr_LanguageMode(LanguageMode::kStrict));
414 56 : CodeStubAssembler(state_).CallBuiltin(Builtins::kDeleteProperty, tmp83, tmp85, tmp90, tmp92);
415 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 57);
416 56 : ca_.Goto(&block15, tmp83, tmp84, tmp85, tmp86, tmp87, tmp88, tmp89, tmp90, tmp91);
417 : }
418 :
419 56 : if (block15.is_used()) {
420 56 : compiler::TNode<Context> tmp94;
421 56 : compiler::TNode<Object> tmp95;
422 56 : compiler::TNode<JSReceiver> tmp96;
423 56 : compiler::TNode<Number> tmp97;
424 56 : compiler::TNode<Smi> tmp98;
425 56 : compiler::TNode<Number> tmp99;
426 56 : compiler::TNode<Number> tmp100;
427 56 : compiler::TNode<Number> tmp101;
428 56 : compiler::TNode<Oddball> tmp102;
429 56 : ca_.Bind(&block15, &tmp94, &tmp95, &tmp96, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102);
430 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 69);
431 56 : compiler::TNode<Number> tmp103;
432 56 : USE(tmp103);
433 56 : tmp103 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(1));
434 56 : compiler::TNode<Number> tmp104;
435 56 : USE(tmp104);
436 56 : tmp104 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberSub(compiler::TNode<Number>{tmp99}, compiler::TNode<Number>{tmp103}));
437 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 46);
438 56 : ca_.Goto(&block10, tmp94, tmp95, tmp96, tmp97, tmp98, tmp104);
439 : }
440 :
441 56 : if (block9.is_used()) {
442 56 : compiler::TNode<Context> tmp105;
443 56 : compiler::TNode<Object> tmp106;
444 56 : compiler::TNode<JSReceiver> tmp107;
445 56 : compiler::TNode<Number> tmp108;
446 56 : compiler::TNode<Smi> tmp109;
447 56 : compiler::TNode<Number> tmp110;
448 56 : ca_.Bind(&block9, &tmp105, &tmp106, &tmp107, &tmp108, &tmp109, &tmp110);
449 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 73);
450 56 : compiler::TNode<Smi> tmp111;
451 56 : USE(tmp111);
452 56 : tmp111 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(0));
453 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 78);
454 56 : ca_.Goto(&block18, tmp105, tmp106, tmp107, tmp108, tmp109, tmp110, tmp111);
455 : }
456 :
457 56 : if (block18.is_used()) {
458 56 : compiler::TNode<Context> tmp112;
459 56 : compiler::TNode<Object> tmp113;
460 56 : compiler::TNode<JSReceiver> tmp114;
461 56 : compiler::TNode<Number> tmp115;
462 56 : compiler::TNode<Smi> tmp116;
463 56 : compiler::TNode<Number> tmp117;
464 56 : compiler::TNode<Smi> tmp118;
465 56 : ca_.Bind(&block18, &tmp112, &tmp113, &tmp114, &tmp115, &tmp116, &tmp117, &tmp118);
466 56 : compiler::TNode<BoolT> tmp119;
467 56 : USE(tmp119);
468 56 : tmp119 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).SmiLessThan(compiler::TNode<Smi>{tmp118}, compiler::TNode<Smi>{tmp116}));
469 56 : ca_.Branch(tmp119, &block16, &block17, tmp112, tmp113, tmp114, tmp115, tmp116, tmp117, tmp118);
470 : }
471 :
472 56 : if (block16.is_used()) {
473 56 : compiler::TNode<Context> tmp120;
474 56 : compiler::TNode<Object> tmp121;
475 56 : compiler::TNode<JSReceiver> tmp122;
476 56 : compiler::TNode<Number> tmp123;
477 56 : compiler::TNode<Smi> tmp124;
478 56 : compiler::TNode<Number> tmp125;
479 56 : compiler::TNode<Smi> tmp126;
480 56 : ca_.Bind(&block16, &tmp120, &tmp121, &tmp122, &tmp123, &tmp124, &tmp125, &tmp126);
481 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 80);
482 56 : compiler::TNode<IntPtrT> tmp127;
483 56 : USE(tmp127);
484 56 : tmp127 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).Convert8ATintptr5ATSmi(compiler::TNode<Smi>{tmp126}));
485 56 : compiler::TNode<Object> tmp128;
486 56 : USE(tmp128);
487 56 : tmp128 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(p_arguments, compiler::TNode<IntPtrT>{tmp127}));
488 56 : CodeStubAssembler(state_).CallBuiltin(Builtins::kSetProperty, tmp120, tmp122, tmp126, tmp128);
489 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 83);
490 56 : compiler::TNode<Smi> tmp130;
491 56 : USE(tmp130);
492 56 : tmp130 = ca_.UncheckedCast<Smi>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr5ATSmi17ATconstexpr_int31(1));
493 56 : compiler::TNode<Smi> tmp131;
494 56 : USE(tmp131);
495 56 : tmp131 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).SmiAdd(compiler::TNode<Smi>{tmp126}, compiler::TNode<Smi>{tmp130}));
496 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 78);
497 56 : ca_.Goto(&block18, tmp120, tmp121, tmp122, tmp123, tmp124, tmp125, tmp131);
498 : }
499 :
500 56 : if (block17.is_used()) {
501 56 : compiler::TNode<Context> tmp132;
502 56 : compiler::TNode<Object> tmp133;
503 56 : compiler::TNode<JSReceiver> tmp134;
504 56 : compiler::TNode<Number> tmp135;
505 56 : compiler::TNode<Smi> tmp136;
506 56 : compiler::TNode<Number> tmp137;
507 56 : compiler::TNode<Smi> tmp138;
508 56 : ca_.Bind(&block17, &tmp132, &tmp133, &tmp134, &tmp135, &tmp136, &tmp137, &tmp138);
509 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 36);
510 56 : ca_.Goto(&block3, tmp132, tmp133, tmp134, tmp135, tmp136);
511 : }
512 :
513 56 : if (block3.is_used()) {
514 56 : compiler::TNode<Context> tmp139;
515 56 : compiler::TNode<Object> tmp140;
516 56 : compiler::TNode<JSReceiver> tmp141;
517 56 : compiler::TNode<Number> tmp142;
518 56 : compiler::TNode<Smi> tmp143;
519 56 : ca_.Bind(&block3, &tmp139, &tmp140, &tmp141, &tmp142, &tmp143);
520 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 88);
521 56 : compiler::TNode<Number> tmp144;
522 56 : USE(tmp144);
523 56 : tmp144 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberAdd(compiler::TNode<Number>{tmp142}, compiler::TNode<Number>{tmp143}));
524 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 89);
525 56 : compiler::TNode<String> tmp145;
526 56 : USE(tmp145);
527 56 : tmp145 = BaseBuiltinsFromDSLAssembler(state_).kLengthString();
528 56 : CodeStubAssembler(state_).CallBuiltin(Builtins::kSetProperty, tmp139, tmp141, tmp145, tmp144);
529 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 92);
530 56 : ca_.Goto(&block1, tmp139, tmp140, tmp144);
531 : }
532 :
533 56 : if (block1.is_used()) {
534 56 : compiler::TNode<Context> tmp147;
535 56 : compiler::TNode<Object> tmp148;
536 56 : compiler::TNode<Number> tmp149;
537 56 : ca_.Bind(&block1, &tmp147, &tmp148, &tmp149);
538 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 23);
539 56 : ca_.Goto(&block19, tmp147, tmp148, tmp149);
540 : }
541 :
542 56 : compiler::TNode<Context> tmp150;
543 56 : compiler::TNode<Object> tmp151;
544 56 : compiler::TNode<Number> tmp152;
545 56 : ca_.Bind(&block19, &tmp150, &tmp151, &tmp152);
546 112 : return compiler::TNode<Number>{tmp152};
547 : }
548 :
549 336 : TF_BUILTIN(ArrayPrototypeUnshift, CodeStubAssembler) {
550 56 : compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state());
551 56 : TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
552 56 : USE(parameter0);
553 56 : Node* argc = Parameter(Descriptor::kJSActualArgumentsCount);
554 56 : CodeStubArguments arguments_impl(this, ChangeInt32ToIntPtr(argc));
555 56 : TNode<Object> parameter1 = arguments_impl.GetReceiver();
556 56 : auto arguments = &arguments_impl;
557 56 : USE(arguments);
558 56 : USE(parameter1);
559 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
560 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Context, Object> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
561 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
562 56 : ca_.Goto(&block0, parameter0, parameter1);
563 :
564 56 : if (block0.is_used()) {
565 56 : compiler::TNode<Context> tmp0;
566 56 : compiler::TNode<Object> tmp1;
567 56 : ca_.Bind(&block0, &tmp0, &tmp1);
568 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 99);
569 56 : compiler::CodeAssemblerLabel label0(&ca_);
570 56 : ArrayUnshiftBuiltinsFromDSLAssembler(state_).TryFastArrayUnshift(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}, arguments, &label0);
571 56 : if (label0.is_used()) {
572 56 : ca_.Bind(&label0);
573 56 : ca_.Goto(&block3, tmp0, tmp1, tmp0, tmp1);
574 56 : }
575 : }
576 :
577 56 : if (block3.is_used()) {
578 56 : compiler::TNode<Context> tmp2;
579 56 : compiler::TNode<Object> tmp3;
580 56 : compiler::TNode<Context> tmp4;
581 56 : compiler::TNode<Object> tmp5;
582 56 : ca_.Bind(&block3, &tmp2, &tmp3, &tmp4, &tmp5);
583 56 : ca_.Goto(&block2, tmp2, tmp3);
584 : }
585 :
586 56 : if (block2.is_used()) {
587 56 : compiler::TNode<Context> tmp6;
588 56 : compiler::TNode<Object> tmp7;
589 56 : ca_.Bind(&block2, &tmp6, &tmp7);
590 56 : ca_.SetSourcePosition("../../src/builtins/array-unshift.tq", 102);
591 56 : compiler::TNode<Number> tmp8;
592 56 : USE(tmp8);
593 56 : tmp8 = ca_.UncheckedCast<Number>(ArrayUnshiftBuiltinsFromDSLAssembler(state_).GenericArrayUnshift(compiler::TNode<Context>{tmp6}, compiler::TNode<Object>{tmp7}, arguments));
594 56 : arguments->PopAndReturn(tmp8);
595 56 : }
596 56 : }
597 :
598 : } // namespace internal
599 86739 : } // namespace v8
600 :
|