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 112 : compiler::TNode<Oddball> StringBuiltinsFromDSLAssembler::TryFastStringCompareSequence(compiler::TNode<String> p_string, compiler::TNode<String> p_searchStr, compiler::TNode<Number> p_start, compiler::TNode<Smi> p_searchLength, compiler::CodeAssemblerLabel* label_Slow) {
44 112 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
45 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
46 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
47 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
48 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, String> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
49 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Number> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
50 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Number, Smi> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
51 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Smi, IntPtrT, IntPtrT, IntPtrT> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
52 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Smi, IntPtrT, IntPtrT, IntPtrT> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
53 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Smi, IntPtrT, IntPtrT, IntPtrT> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
54 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Smi, IntPtrT, IntPtrT, IntPtrT> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
55 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, String, String, Smi, IntPtrT, IntPtrT, IntPtrT> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
56 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, Oddball> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
57 224 : compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
58 224 : compiler::CodeAssemblerParameterizedLabel<String, String, Number, Smi, Oddball> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
59 112 : ca_.Goto(&block0, p_string, p_searchStr, p_start, p_searchLength);
60 :
61 112 : if (block0.is_used()) {
62 112 : compiler::TNode<String> tmp0;
63 112 : compiler::TNode<String> tmp1;
64 112 : compiler::TNode<Number> tmp2;
65 112 : compiler::TNode<Smi> tmp3;
66 112 : ca_.Bind(&block0, &tmp0, &tmp1, &tmp2, &tmp3);
67 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 9);
68 112 : compiler::TNode<String> tmp4;
69 112 : USE(tmp4);
70 112 : compiler::CodeAssemblerLabel label0(&ca_);
71 112 : tmp4 = BaseBuiltinsFromDSLAssembler(state_).Cast14ATDirectString(compiler::TNode<HeapObject>{tmp0}, &label0);
72 112 : ca_.Goto(&block3, tmp0, tmp1, tmp2, tmp3, tmp0, tmp4);
73 112 : if (label0.is_used()) {
74 112 : ca_.Bind(&label0);
75 112 : ca_.Goto(&block4, tmp0, tmp1, tmp2, tmp3, tmp0);
76 112 : }
77 : }
78 :
79 112 : if (block4.is_used()) {
80 112 : compiler::TNode<String> tmp5;
81 112 : compiler::TNode<String> tmp6;
82 112 : compiler::TNode<Number> tmp7;
83 112 : compiler::TNode<Smi> tmp8;
84 112 : compiler::TNode<String> tmp9;
85 112 : ca_.Bind(&block4, &tmp5, &tmp6, &tmp7, &tmp8, &tmp9);
86 112 : ca_.Goto(&block1);
87 : }
88 :
89 112 : if (block3.is_used()) {
90 112 : compiler::TNode<String> tmp10;
91 112 : compiler::TNode<String> tmp11;
92 112 : compiler::TNode<Number> tmp12;
93 112 : compiler::TNode<Smi> tmp13;
94 112 : compiler::TNode<String> tmp14;
95 112 : compiler::TNode<String> tmp15;
96 112 : ca_.Bind(&block3, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14, &tmp15);
97 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 10);
98 112 : compiler::TNode<String> tmp16;
99 112 : USE(tmp16);
100 112 : compiler::CodeAssemblerLabel label0(&ca_);
101 112 : tmp16 = BaseBuiltinsFromDSLAssembler(state_).Cast14ATDirectString(compiler::TNode<HeapObject>{tmp11}, &label0);
102 112 : ca_.Goto(&block5, tmp10, tmp11, tmp12, tmp13, tmp15, tmp11, tmp16);
103 112 : if (label0.is_used()) {
104 112 : ca_.Bind(&label0);
105 112 : ca_.Goto(&block6, tmp10, tmp11, tmp12, tmp13, tmp15, tmp11);
106 112 : }
107 : }
108 :
109 112 : if (block6.is_used()) {
110 112 : compiler::TNode<String> tmp17;
111 112 : compiler::TNode<String> tmp18;
112 112 : compiler::TNode<Number> tmp19;
113 112 : compiler::TNode<Smi> tmp20;
114 112 : compiler::TNode<String> tmp21;
115 112 : compiler::TNode<String> tmp22;
116 112 : ca_.Bind(&block6, &tmp17, &tmp18, &tmp19, &tmp20, &tmp21, &tmp22);
117 112 : ca_.Goto(&block1);
118 : }
119 :
120 112 : if (block5.is_used()) {
121 112 : compiler::TNode<String> tmp23;
122 112 : compiler::TNode<String> tmp24;
123 112 : compiler::TNode<Number> tmp25;
124 112 : compiler::TNode<Smi> tmp26;
125 112 : compiler::TNode<String> tmp27;
126 112 : compiler::TNode<String> tmp28;
127 112 : compiler::TNode<String> tmp29;
128 112 : ca_.Bind(&block5, &tmp23, &tmp24, &tmp25, &tmp26, &tmp27, &tmp28, &tmp29);
129 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 11);
130 112 : compiler::TNode<Smi> tmp30;
131 112 : USE(tmp30);
132 112 : compiler::CodeAssemblerLabel label0(&ca_);
133 112 : tmp30 = BaseBuiltinsFromDSLAssembler(state_).Cast5ATSmi(compiler::TNode<Object>{tmp25}, &label0);
134 112 : ca_.Goto(&block7, tmp23, tmp24, tmp25, tmp26, tmp27, tmp29, tmp25, tmp30);
135 112 : if (label0.is_used()) {
136 112 : ca_.Bind(&label0);
137 112 : ca_.Goto(&block8, tmp23, tmp24, tmp25, tmp26, tmp27, tmp29, tmp25);
138 112 : }
139 : }
140 :
141 112 : if (block8.is_used()) {
142 112 : compiler::TNode<String> tmp31;
143 112 : compiler::TNode<String> tmp32;
144 112 : compiler::TNode<Number> tmp33;
145 112 : compiler::TNode<Smi> tmp34;
146 112 : compiler::TNode<String> tmp35;
147 112 : compiler::TNode<String> tmp36;
148 112 : compiler::TNode<Number> tmp37;
149 112 : ca_.Bind(&block8, &tmp31, &tmp32, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37);
150 112 : ca_.Goto(&block1);
151 : }
152 :
153 112 : if (block7.is_used()) {
154 112 : compiler::TNode<String> tmp38;
155 112 : compiler::TNode<String> tmp39;
156 112 : compiler::TNode<Number> tmp40;
157 112 : compiler::TNode<Smi> tmp41;
158 112 : compiler::TNode<String> tmp42;
159 112 : compiler::TNode<String> tmp43;
160 112 : compiler::TNode<Number> tmp44;
161 112 : compiler::TNode<Smi> tmp45;
162 112 : ca_.Bind(&block7, &tmp38, &tmp39, &tmp40, &tmp41, &tmp42, &tmp43, &tmp44, &tmp45);
163 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 13);
164 112 : compiler::TNode<IntPtrT> tmp46;
165 112 : USE(tmp46);
166 112 : tmp46 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(0));
167 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 14);
168 112 : compiler::TNode<IntPtrT> tmp47;
169 112 : USE(tmp47);
170 112 : tmp47 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).Convert8ATintptr5ATSmi(compiler::TNode<Smi>{tmp45}));
171 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 15);
172 112 : compiler::TNode<IntPtrT> tmp48;
173 112 : USE(tmp48);
174 112 : tmp48 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).Convert8ATintptr5ATSmi(compiler::TNode<Smi>{tmp41}));
175 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 17);
176 112 : ca_.Goto(&block11, tmp38, tmp39, tmp40, tmp41, tmp42, tmp43, tmp45, tmp46, tmp47, tmp48);
177 : }
178 :
179 112 : if (block11.is_used()) {
180 112 : compiler::TNode<String> tmp49;
181 112 : compiler::TNode<String> tmp50;
182 112 : compiler::TNode<Number> tmp51;
183 112 : compiler::TNode<Smi> tmp52;
184 112 : compiler::TNode<String> tmp53;
185 112 : compiler::TNode<String> tmp54;
186 112 : compiler::TNode<Smi> tmp55;
187 112 : compiler::TNode<IntPtrT> tmp56;
188 112 : compiler::TNode<IntPtrT> tmp57;
189 112 : compiler::TNode<IntPtrT> tmp58;
190 112 : ca_.Bind(&block11, &tmp49, &tmp50, &tmp51, &tmp52, &tmp53, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58);
191 112 : compiler::TNode<BoolT> tmp59;
192 112 : USE(tmp59);
193 112 : tmp59 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).IntPtrLessThan(compiler::TNode<IntPtrT>{tmp56}, compiler::TNode<IntPtrT>{tmp58}));
194 112 : ca_.Branch(tmp59, &block9, &block10, tmp49, tmp50, tmp51, tmp52, tmp53, tmp54, tmp55, tmp56, tmp57, tmp58);
195 : }
196 :
197 112 : if (block9.is_used()) {
198 112 : compiler::TNode<String> tmp60;
199 112 : compiler::TNode<String> tmp61;
200 112 : compiler::TNode<Number> tmp62;
201 112 : compiler::TNode<Smi> tmp63;
202 112 : compiler::TNode<String> tmp64;
203 112 : compiler::TNode<String> tmp65;
204 112 : compiler::TNode<Smi> tmp66;
205 112 : compiler::TNode<IntPtrT> tmp67;
206 112 : compiler::TNode<IntPtrT> tmp68;
207 112 : compiler::TNode<IntPtrT> tmp69;
208 112 : ca_.Bind(&block9, &tmp60, &tmp61, &tmp62, &tmp63, &tmp64, &tmp65, &tmp66, &tmp67, &tmp68, &tmp69);
209 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 18);
210 112 : compiler::TNode<Int32T> tmp70;
211 112 : USE(tmp70);
212 112 : tmp70 = ca_.UncheckedCast<Int32T>(CodeStubAssembler(state_).StringCharCodeAt(compiler::TNode<String>{tmp65}, compiler::TNode<IntPtrT>{tmp67}));
213 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 19);
214 112 : compiler::TNode<Int32T> tmp71;
215 112 : USE(tmp71);
216 112 : tmp71 = ca_.UncheckedCast<Int32T>(CodeStubAssembler(state_).StringCharCodeAt(compiler::TNode<String>{tmp64}, compiler::TNode<IntPtrT>{tmp68}));
217 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 18);
218 112 : compiler::TNode<BoolT> tmp72;
219 112 : USE(tmp72);
220 112 : tmp72 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).Word32NotEqual(compiler::TNode<Int32T>{tmp70}, compiler::TNode<Int32T>{tmp71}));
221 112 : ca_.Branch(tmp72, &block12, &block13, tmp60, tmp61, tmp62, tmp63, tmp64, tmp65, tmp66, tmp67, tmp68, tmp69);
222 : }
223 :
224 112 : if (block12.is_used()) {
225 112 : compiler::TNode<String> tmp73;
226 112 : compiler::TNode<String> tmp74;
227 112 : compiler::TNode<Number> tmp75;
228 112 : compiler::TNode<Smi> tmp76;
229 112 : compiler::TNode<String> tmp77;
230 112 : compiler::TNode<String> tmp78;
231 112 : compiler::TNode<Smi> tmp79;
232 112 : compiler::TNode<IntPtrT> tmp80;
233 112 : compiler::TNode<IntPtrT> tmp81;
234 112 : compiler::TNode<IntPtrT> tmp82;
235 112 : ca_.Bind(&block12, &tmp73, &tmp74, &tmp75, &tmp76, &tmp77, &tmp78, &tmp79, &tmp80, &tmp81, &tmp82);
236 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 20);
237 112 : compiler::TNode<Oddball> tmp83;
238 112 : USE(tmp83);
239 112 : tmp83 = BaseBuiltinsFromDSLAssembler(state_).False();
240 112 : ca_.Goto(&block2, tmp73, tmp74, tmp75, tmp76, tmp83);
241 : }
242 :
243 112 : if (block13.is_used()) {
244 112 : compiler::TNode<String> tmp84;
245 112 : compiler::TNode<String> tmp85;
246 112 : compiler::TNode<Number> tmp86;
247 112 : compiler::TNode<Smi> tmp87;
248 112 : compiler::TNode<String> tmp88;
249 112 : compiler::TNode<String> tmp89;
250 112 : compiler::TNode<Smi> tmp90;
251 112 : compiler::TNode<IntPtrT> tmp91;
252 112 : compiler::TNode<IntPtrT> tmp92;
253 112 : compiler::TNode<IntPtrT> tmp93;
254 112 : ca_.Bind(&block13, &tmp84, &tmp85, &tmp86, &tmp87, &tmp88, &tmp89, &tmp90, &tmp91, &tmp92, &tmp93);
255 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 23);
256 112 : compiler::TNode<IntPtrT> tmp94;
257 112 : USE(tmp94);
258 112 : tmp94 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(1));
259 112 : compiler::TNode<IntPtrT> tmp95;
260 112 : USE(tmp95);
261 112 : tmp95 = ca_.UncheckedCast<IntPtrT>(CodeStubAssembler(state_).IntPtrAdd(compiler::TNode<IntPtrT>{tmp91}, compiler::TNode<IntPtrT>{tmp94}));
262 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 24);
263 112 : compiler::TNode<IntPtrT> tmp96;
264 112 : USE(tmp96);
265 112 : tmp96 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(1));
266 112 : compiler::TNode<IntPtrT> tmp97;
267 112 : USE(tmp97);
268 112 : tmp97 = ca_.UncheckedCast<IntPtrT>(CodeStubAssembler(state_).IntPtrAdd(compiler::TNode<IntPtrT>{tmp92}, compiler::TNode<IntPtrT>{tmp96}));
269 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 17);
270 112 : ca_.Goto(&block11, tmp84, tmp85, tmp86, tmp87, tmp88, tmp89, tmp90, tmp95, tmp97, tmp93);
271 : }
272 :
273 112 : if (block10.is_used()) {
274 112 : compiler::TNode<String> tmp98;
275 112 : compiler::TNode<String> tmp99;
276 112 : compiler::TNode<Number> tmp100;
277 112 : compiler::TNode<Smi> tmp101;
278 112 : compiler::TNode<String> tmp102;
279 112 : compiler::TNode<String> tmp103;
280 112 : compiler::TNode<Smi> tmp104;
281 112 : compiler::TNode<IntPtrT> tmp105;
282 112 : compiler::TNode<IntPtrT> tmp106;
283 112 : compiler::TNode<IntPtrT> tmp107;
284 112 : ca_.Bind(&block10, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103, &tmp104, &tmp105, &tmp106, &tmp107);
285 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 26);
286 112 : compiler::TNode<Oddball> tmp108;
287 112 : USE(tmp108);
288 112 : tmp108 = BaseBuiltinsFromDSLAssembler(state_).True();
289 112 : ca_.Goto(&block2, tmp98, tmp99, tmp100, tmp101, tmp108);
290 : }
291 :
292 112 : if (block2.is_used()) {
293 112 : compiler::TNode<String> tmp109;
294 112 : compiler::TNode<String> tmp110;
295 112 : compiler::TNode<Number> tmp111;
296 112 : compiler::TNode<Smi> tmp112;
297 112 : compiler::TNode<Oddball> tmp113;
298 112 : ca_.Bind(&block2, &tmp109, &tmp110, &tmp111, &tmp112, &tmp113);
299 112 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 6);
300 112 : ca_.Goto(&block14, tmp109, tmp110, tmp111, tmp112, tmp113);
301 : }
302 :
303 112 : if (block1.is_used()) {
304 112 : ca_.Bind(&block1);
305 112 : ca_.Goto(label_Slow);
306 : }
307 :
308 112 : compiler::TNode<String> tmp114;
309 112 : compiler::TNode<String> tmp115;
310 112 : compiler::TNode<Number> tmp116;
311 112 : compiler::TNode<Smi> tmp117;
312 112 : compiler::TNode<Oddball> tmp118;
313 112 : ca_.Bind(&block14, &tmp114, &tmp115, &tmp116, &tmp117, &tmp118);
314 224 : return compiler::TNode<Oddball>{tmp118};
315 : }
316 :
317 336 : TF_BUILTIN(StringPrototypeEndsWith, CodeStubAssembler) {
318 56 : compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state());
319 56 : TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
320 56 : USE(parameter0);
321 56 : Node* argc = Parameter(Descriptor::kJSActualArgumentsCount);
322 56 : CodeStubArguments arguments_impl(this, ChangeInt32ToIntPtr(argc));
323 56 : TNode<Object> parameter1 = arguments_impl.GetReceiver();
324 56 : auto arguments = &arguments_impl;
325 56 : USE(arguments);
326 56 : USE(parameter1);
327 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
328 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
329 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
330 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
331 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
332 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
333 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
334 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number, Number> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
335 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number, Number> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
336 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
337 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
338 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number, String, String, Number, Smi> block14(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
339 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number, String, String, Number, Smi, Oddball> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
340 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
341 56 : ca_.Goto(&block0, parameter0, parameter1);
342 :
343 56 : if (block0.is_used()) {
344 56 : compiler::TNode<Context> tmp0;
345 56 : compiler::TNode<Object> tmp1;
346 56 : ca_.Bind(&block0, &tmp0, &tmp1);
347 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 32);
348 56 : compiler::TNode<IntPtrT> tmp2;
349 56 : USE(tmp2);
350 56 : tmp2 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(0));
351 56 : compiler::TNode<Object> tmp3;
352 56 : USE(tmp3);
353 56 : tmp3 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(arguments, compiler::TNode<IntPtrT>{tmp2}));
354 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 33);
355 56 : compiler::TNode<IntPtrT> tmp4;
356 56 : USE(tmp4);
357 56 : tmp4 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(1));
358 56 : compiler::TNode<Object> tmp5;
359 56 : USE(tmp5);
360 56 : tmp5 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(arguments, compiler::TNode<IntPtrT>{tmp4}));
361 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 36);
362 56 : compiler::TNode<Object> tmp6;
363 56 : USE(tmp6);
364 56 : tmp6 = ca_.UncheckedCast<Object>(StringBuiltinsFromDSLAssembler(state_).RequireObjectCoercible(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}));
365 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 39);
366 56 : compiler::TNode<String> tmp7;
367 56 : USE(tmp7);
368 56 : tmp7 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp6}));
369 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 43);
370 56 : compiler::TNode<BoolT> tmp8;
371 56 : USE(tmp8);
372 56 : tmp8 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).IsRegExp(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp3}));
373 56 : ca_.Branch(tmp8, &block1, &block2, tmp0, tmp1, tmp3, tmp5, tmp6, tmp7);
374 : }
375 :
376 56 : if (block1.is_used()) {
377 56 : compiler::TNode<Context> tmp9;
378 56 : compiler::TNode<Object> tmp10;
379 56 : compiler::TNode<Object> tmp11;
380 56 : compiler::TNode<Object> tmp12;
381 56 : compiler::TNode<Object> tmp13;
382 56 : compiler::TNode<String> tmp14;
383 56 : ca_.Bind(&block1, &tmp9, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14);
384 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 45);
385 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 44);
386 56 : CodeStubAssembler(state_).ThrowTypeError(compiler::TNode<Context>{tmp9}, MessageTemplate::kFirstArgumentNotRegExp, "String.prototype.endsWith");
387 : }
388 :
389 56 : if (block2.is_used()) {
390 56 : compiler::TNode<Context> tmp15;
391 56 : compiler::TNode<Object> tmp16;
392 56 : compiler::TNode<Object> tmp17;
393 56 : compiler::TNode<Object> tmp18;
394 56 : compiler::TNode<Object> tmp19;
395 56 : compiler::TNode<String> tmp20;
396 56 : ca_.Bind(&block2, &tmp15, &tmp16, &tmp17, &tmp18, &tmp19, &tmp20);
397 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 49);
398 56 : compiler::TNode<String> tmp21;
399 56 : USE(tmp21);
400 56 : tmp21 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp15}, compiler::TNode<Object>{tmp17}));
401 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 52);
402 56 : compiler::TNode<Smi> tmp22;
403 56 : USE(tmp22);
404 56 : tmp22 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp20}));
405 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 56);
406 56 : compiler::TNode<Oddball> tmp23;
407 56 : USE(tmp23);
408 56 : tmp23 = BaseBuiltinsFromDSLAssembler(state_).Undefined();
409 56 : compiler::TNode<BoolT> tmp24;
410 56 : USE(tmp24);
411 56 : tmp24 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).WordEqual(compiler::TNode<Object>{tmp18}, compiler::TNode<HeapObject>{tmp23}));
412 56 : ca_.Branch(tmp24, &block3, &block4, tmp15, tmp16, tmp17, tmp18, tmp19, tmp20, tmp21, tmp22);
413 : }
414 :
415 56 : if (block3.is_used()) {
416 56 : compiler::TNode<Context> tmp25;
417 56 : compiler::TNode<Object> tmp26;
418 56 : compiler::TNode<Object> tmp27;
419 56 : compiler::TNode<Object> tmp28;
420 56 : compiler::TNode<Object> tmp29;
421 56 : compiler::TNode<String> tmp30;
422 56 : compiler::TNode<String> tmp31;
423 56 : compiler::TNode<Number> tmp32;
424 56 : ca_.Bind(&block3, &tmp25, &tmp26, &tmp27, &tmp28, &tmp29, &tmp30, &tmp31, &tmp32);
425 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 57);
426 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 56);
427 56 : ca_.Goto(&block6, tmp25, tmp26, tmp27, tmp28, tmp29, tmp30, tmp31, tmp32, tmp32);
428 : }
429 :
430 56 : if (block4.is_used()) {
431 56 : compiler::TNode<Context> tmp33;
432 56 : compiler::TNode<Object> tmp34;
433 56 : compiler::TNode<Object> tmp35;
434 56 : compiler::TNode<Object> tmp36;
435 56 : compiler::TNode<Object> tmp37;
436 56 : compiler::TNode<String> tmp38;
437 56 : compiler::TNode<String> tmp39;
438 56 : compiler::TNode<Number> tmp40;
439 56 : ca_.Bind(&block4, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37, &tmp38, &tmp39, &tmp40);
440 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 58);
441 56 : compiler::TNode<Number> tmp41;
442 56 : USE(tmp41);
443 56 : tmp41 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).ToInteger_Inline(compiler::TNode<Context>{tmp33}, compiler::TNode<Object>{tmp36}));
444 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 56);
445 56 : ca_.Goto(&block5, tmp33, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39, tmp40, tmp41);
446 : }
447 :
448 56 : if (block6.is_used()) {
449 56 : compiler::TNode<Context> tmp42;
450 56 : compiler::TNode<Object> tmp43;
451 56 : compiler::TNode<Object> tmp44;
452 56 : compiler::TNode<Object> tmp45;
453 56 : compiler::TNode<Object> tmp46;
454 56 : compiler::TNode<String> tmp47;
455 56 : compiler::TNode<String> tmp48;
456 56 : compiler::TNode<Number> tmp49;
457 56 : compiler::TNode<Number> tmp50;
458 56 : ca_.Bind(&block6, &tmp42, &tmp43, &tmp44, &tmp45, &tmp46, &tmp47, &tmp48, &tmp49, &tmp50);
459 56 : ca_.Goto(&block5, tmp42, tmp43, tmp44, tmp45, tmp46, tmp47, tmp48, tmp49, tmp50);
460 : }
461 :
462 56 : if (block5.is_used()) {
463 56 : compiler::TNode<Context> tmp51;
464 56 : compiler::TNode<Object> tmp52;
465 56 : compiler::TNode<Object> tmp53;
466 56 : compiler::TNode<Object> tmp54;
467 56 : compiler::TNode<Object> tmp55;
468 56 : compiler::TNode<String> tmp56;
469 56 : compiler::TNode<String> tmp57;
470 56 : compiler::TNode<Number> tmp58;
471 56 : compiler::TNode<Number> tmp59;
472 56 : ca_.Bind(&block5, &tmp51, &tmp52, &tmp53, &tmp54, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59);
473 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 61);
474 56 : compiler::TNode<Number> tmp60;
475 56 : USE(tmp60);
476 56 : tmp60 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(0));
477 56 : compiler::TNode<Number> tmp61;
478 56 : USE(tmp61);
479 56 : tmp61 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberMax(compiler::TNode<Number>{tmp59}, compiler::TNode<Number>{tmp60}));
480 56 : compiler::TNode<Number> tmp62;
481 56 : USE(tmp62);
482 56 : tmp62 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberMin(compiler::TNode<Number>{tmp61}, compiler::TNode<Number>{tmp58}));
483 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 64);
484 56 : compiler::TNode<Smi> tmp63;
485 56 : USE(tmp63);
486 56 : tmp63 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp57}));
487 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 67);
488 56 : compiler::TNode<Number> tmp64;
489 56 : USE(tmp64);
490 56 : tmp64 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberSub(compiler::TNode<Number>{tmp62}, compiler::TNode<Number>{tmp63}));
491 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 70);
492 56 : compiler::TNode<Number> tmp65;
493 56 : USE(tmp65);
494 56 : tmp65 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(0));
495 56 : compiler::CodeAssemblerLabel label0(&ca_);
496 112 : compiler::CodeAssemblerLabel label1(&ca_);
497 56 : CodeStubAssembler(state_).BranchIfNumberLessThan(compiler::TNode<Number>{tmp64}, compiler::TNode<Number>{tmp65}, &label0, &label1);
498 56 : if (label0.is_used()) {
499 56 : ca_.Bind(&label0);
500 56 : ca_.Goto(&block9, tmp51, tmp52, tmp53, tmp54, tmp55, tmp56, tmp57, tmp58, tmp59, tmp62, tmp63, tmp64, tmp64);
501 : }
502 56 : if (label1.is_used()) {
503 56 : ca_.Bind(&label1);
504 56 : ca_.Goto(&block10, tmp51, tmp52, tmp53, tmp54, tmp55, tmp56, tmp57, tmp58, tmp59, tmp62, tmp63, tmp64, tmp64);
505 56 : }
506 : }
507 :
508 56 : if (block9.is_used()) {
509 56 : compiler::TNode<Context> tmp66;
510 56 : compiler::TNode<Object> tmp67;
511 56 : compiler::TNode<Object> tmp68;
512 56 : compiler::TNode<Object> tmp69;
513 56 : compiler::TNode<Object> tmp70;
514 56 : compiler::TNode<String> tmp71;
515 56 : compiler::TNode<String> tmp72;
516 56 : compiler::TNode<Number> tmp73;
517 56 : compiler::TNode<Number> tmp74;
518 56 : compiler::TNode<Number> tmp75;
519 56 : compiler::TNode<Smi> tmp76;
520 56 : compiler::TNode<Number> tmp77;
521 56 : compiler::TNode<Number> tmp78;
522 56 : ca_.Bind(&block9, &tmp66, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71, &tmp72, &tmp73, &tmp74, &tmp75, &tmp76, &tmp77, &tmp78);
523 56 : ca_.Goto(&block7, tmp66, tmp67, tmp68, tmp69, tmp70, tmp71, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77);
524 : }
525 :
526 56 : if (block10.is_used()) {
527 56 : compiler::TNode<Context> tmp79;
528 56 : compiler::TNode<Object> tmp80;
529 56 : compiler::TNode<Object> tmp81;
530 56 : compiler::TNode<Object> tmp82;
531 56 : compiler::TNode<Object> tmp83;
532 56 : compiler::TNode<String> tmp84;
533 56 : compiler::TNode<String> tmp85;
534 56 : compiler::TNode<Number> tmp86;
535 56 : compiler::TNode<Number> tmp87;
536 56 : compiler::TNode<Number> tmp88;
537 56 : compiler::TNode<Smi> tmp89;
538 56 : compiler::TNode<Number> tmp90;
539 56 : compiler::TNode<Number> tmp91;
540 56 : ca_.Bind(&block10, &tmp79, &tmp80, &tmp81, &tmp82, &tmp83, &tmp84, &tmp85, &tmp86, &tmp87, &tmp88, &tmp89, &tmp90, &tmp91);
541 56 : ca_.Goto(&block8, tmp79, tmp80, tmp81, tmp82, tmp83, tmp84, tmp85, tmp86, tmp87, tmp88, tmp89, tmp90);
542 : }
543 :
544 56 : if (block7.is_used()) {
545 56 : compiler::TNode<Context> tmp92;
546 56 : compiler::TNode<Object> tmp93;
547 56 : compiler::TNode<Object> tmp94;
548 56 : compiler::TNode<Object> tmp95;
549 56 : compiler::TNode<Object> tmp96;
550 56 : compiler::TNode<String> tmp97;
551 56 : compiler::TNode<String> tmp98;
552 56 : compiler::TNode<Number> tmp99;
553 56 : compiler::TNode<Number> tmp100;
554 56 : compiler::TNode<Number> tmp101;
555 56 : compiler::TNode<Smi> tmp102;
556 56 : compiler::TNode<Number> tmp103;
557 56 : ca_.Bind(&block7, &tmp92, &tmp93, &tmp94, &tmp95, &tmp96, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103);
558 56 : compiler::TNode<Oddball> tmp104;
559 56 : USE(tmp104);
560 56 : tmp104 = BaseBuiltinsFromDSLAssembler(state_).False();
561 56 : arguments->PopAndReturn(tmp104);
562 : }
563 :
564 56 : if (block8.is_used()) {
565 56 : compiler::TNode<Context> tmp105;
566 56 : compiler::TNode<Object> tmp106;
567 56 : compiler::TNode<Object> tmp107;
568 56 : compiler::TNode<Object> tmp108;
569 56 : compiler::TNode<Object> tmp109;
570 56 : compiler::TNode<String> tmp110;
571 56 : compiler::TNode<String> tmp111;
572 56 : compiler::TNode<Number> tmp112;
573 56 : compiler::TNode<Number> tmp113;
574 56 : compiler::TNode<Number> tmp114;
575 56 : compiler::TNode<Smi> tmp115;
576 56 : compiler::TNode<Number> tmp116;
577 56 : ca_.Bind(&block8, &tmp105, &tmp106, &tmp107, &tmp108, &tmp109, &tmp110, &tmp111, &tmp112, &tmp113, &tmp114, &tmp115, &tmp116);
578 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 79);
579 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 78);
580 56 : compiler::TNode<Oddball> tmp117;
581 56 : USE(tmp117);
582 56 : compiler::CodeAssemblerLabel label0(&ca_);
583 56 : tmp117 = StringBuiltinsFromDSLAssembler(state_).TryFastStringCompareSequence(compiler::TNode<String>{tmp110}, compiler::TNode<String>{tmp111}, compiler::TNode<Number>{tmp116}, compiler::TNode<Smi>{tmp115}, &label0);
584 56 : ca_.Goto(&block13, tmp105, tmp106, tmp107, tmp108, tmp109, tmp110, tmp111, tmp112, tmp113, tmp114, tmp115, tmp116, tmp110, tmp111, tmp116, tmp115, tmp117);
585 56 : if (label0.is_used()) {
586 56 : ca_.Bind(&label0);
587 56 : ca_.Goto(&block14, tmp105, tmp106, tmp107, tmp108, tmp109, tmp110, tmp111, tmp112, tmp113, tmp114, tmp115, tmp116, tmp110, tmp111, tmp116, tmp115);
588 56 : }
589 : }
590 :
591 56 : if (block14.is_used()) {
592 56 : compiler::TNode<Context> tmp118;
593 56 : compiler::TNode<Object> tmp119;
594 56 : compiler::TNode<Object> tmp120;
595 56 : compiler::TNode<Object> tmp121;
596 56 : compiler::TNode<Object> tmp122;
597 56 : compiler::TNode<String> tmp123;
598 56 : compiler::TNode<String> tmp124;
599 56 : compiler::TNode<Number> tmp125;
600 56 : compiler::TNode<Number> tmp126;
601 56 : compiler::TNode<Number> tmp127;
602 56 : compiler::TNode<Smi> tmp128;
603 56 : compiler::TNode<Number> tmp129;
604 56 : compiler::TNode<String> tmp130;
605 56 : compiler::TNode<String> tmp131;
606 56 : compiler::TNode<Number> tmp132;
607 56 : compiler::TNode<Smi> tmp133;
608 56 : ca_.Bind(&block14, &tmp118, &tmp119, &tmp120, &tmp121, &tmp122, &tmp123, &tmp124, &tmp125, &tmp126, &tmp127, &tmp128, &tmp129, &tmp130, &tmp131, &tmp132, &tmp133);
609 56 : ca_.Goto(&block12, tmp118, tmp119, tmp120, tmp121, tmp122, tmp123, tmp124, tmp125, tmp126, tmp127, tmp128, tmp129);
610 : }
611 :
612 56 : if (block13.is_used()) {
613 56 : compiler::TNode<Context> tmp134;
614 56 : compiler::TNode<Object> tmp135;
615 56 : compiler::TNode<Object> tmp136;
616 56 : compiler::TNode<Object> tmp137;
617 56 : compiler::TNode<Object> tmp138;
618 56 : compiler::TNode<String> tmp139;
619 56 : compiler::TNode<String> tmp140;
620 56 : compiler::TNode<Number> tmp141;
621 56 : compiler::TNode<Number> tmp142;
622 56 : compiler::TNode<Number> tmp143;
623 56 : compiler::TNode<Smi> tmp144;
624 56 : compiler::TNode<Number> tmp145;
625 56 : compiler::TNode<String> tmp146;
626 56 : compiler::TNode<String> tmp147;
627 56 : compiler::TNode<Number> tmp148;
628 56 : compiler::TNode<Smi> tmp149;
629 56 : compiler::TNode<Oddball> tmp150;
630 56 : ca_.Bind(&block13, &tmp134, &tmp135, &tmp136, &tmp137, &tmp138, &tmp139, &tmp140, &tmp141, &tmp142, &tmp143, &tmp144, &tmp145, &tmp146, &tmp147, &tmp148, &tmp149, &tmp150);
631 56 : arguments->PopAndReturn(tmp150);
632 : }
633 :
634 56 : if (block12.is_used()) {
635 56 : compiler::TNode<Context> tmp151;
636 56 : compiler::TNode<Object> tmp152;
637 56 : compiler::TNode<Object> tmp153;
638 56 : compiler::TNode<Object> tmp154;
639 56 : compiler::TNode<Object> tmp155;
640 56 : compiler::TNode<String> tmp156;
641 56 : compiler::TNode<String> tmp157;
642 56 : compiler::TNode<Number> tmp158;
643 56 : compiler::TNode<Number> tmp159;
644 56 : compiler::TNode<Number> tmp160;
645 56 : compiler::TNode<Smi> tmp161;
646 56 : compiler::TNode<Number> tmp162;
647 56 : ca_.Bind(&block12, &tmp151, &tmp152, &tmp153, &tmp154, &tmp155, &tmp156, &tmp157, &tmp158, &tmp159, &tmp160, &tmp161, &tmp162);
648 56 : ca_.SetSourcePosition("../../src/builtins/string-endswith.tq", 83);
649 56 : compiler::TNode<Oddball> tmp163;
650 56 : tmp163 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kStringCompareSequence, tmp151, tmp156, tmp157, tmp162));
651 56 : USE(tmp163);
652 56 : arguments->PopAndReturn(tmp163);
653 56 : }
654 56 : }
655 :
656 112 : compiler::TNode<Object> StringBuiltinsFromDSLAssembler::RequireObjectCoercible(compiler::TNode<Context> p_context, compiler::TNode<Object> p_argument) {
657 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
658 224 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
659 224 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
660 224 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
661 224 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
662 112 : ca_.Goto(&block0, p_context, p_argument);
663 :
664 112 : if (block0.is_used()) {
665 112 : compiler::TNode<Context> tmp0;
666 112 : compiler::TNode<Object> tmp1;
667 112 : ca_.Bind(&block0, &tmp0, &tmp1);
668 112 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 14);
669 112 : compiler::TNode<BoolT> tmp2;
670 112 : USE(tmp2);
671 112 : tmp2 = ca_.UncheckedCast<BoolT>(CodeStubAssembler(state_).IsNullOrUndefined(compiler::TNode<Object>{tmp1}));
672 112 : ca_.Branch(tmp2, &block2, &block3, tmp0, tmp1);
673 : }
674 :
675 112 : if (block2.is_used()) {
676 112 : compiler::TNode<Context> tmp3;
677 112 : compiler::TNode<Object> tmp4;
678 112 : ca_.Bind(&block2, &tmp3, &tmp4);
679 112 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 16);
680 112 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 15);
681 112 : CodeStubAssembler(state_).ThrowTypeError(compiler::TNode<Context>{tmp3}, MessageTemplate::kCalledOnNullOrUndefined, "String.prototype.startsWith");
682 : }
683 :
684 112 : if (block3.is_used()) {
685 112 : compiler::TNode<Context> tmp5;
686 112 : compiler::TNode<Object> tmp6;
687 112 : ca_.Bind(&block3, &tmp5, &tmp6);
688 112 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 18);
689 112 : ca_.Goto(&block1, tmp5, tmp6, tmp6);
690 : }
691 :
692 112 : if (block1.is_used()) {
693 112 : compiler::TNode<Context> tmp7;
694 112 : compiler::TNode<Object> tmp8;
695 112 : compiler::TNode<Object> tmp9;
696 112 : ca_.Bind(&block1, &tmp7, &tmp8, &tmp9);
697 112 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 12);
698 112 : ca_.Goto(&block4, tmp7, tmp8, tmp9);
699 : }
700 :
701 112 : compiler::TNode<Context> tmp10;
702 112 : compiler::TNode<Object> tmp11;
703 112 : compiler::TNode<Object> tmp12;
704 112 : ca_.Bind(&block4, &tmp10, &tmp11, &tmp12);
705 224 : return compiler::TNode<Object>{tmp12};
706 : }
707 :
708 336 : TF_BUILTIN(StringPrototypeStartsWith, CodeStubAssembler) {
709 56 : compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state());
710 56 : TNode<Context> parameter0 = UncheckedCast<Context>(Parameter(Descriptor::kContext));
711 56 : USE(parameter0);
712 56 : Node* argc = Parameter(Descriptor::kJSActualArgumentsCount);
713 56 : CodeStubArguments arguments_impl(this, ChangeInt32ToIntPtr(argc));
714 56 : TNode<Object> parameter1 = arguments_impl.GetReceiver();
715 56 : auto arguments = &arguments_impl;
716 56 : USE(arguments);
717 56 : USE(parameter1);
718 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
719 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
720 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
721 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number, Number> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
722 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, Number, Number> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
723 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi> block3(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
724 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi> block4(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
725 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, String, String, Number, Smi> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
726 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi, String, String, Number, Smi, Oddball> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
727 112 : compiler::CodeAssemblerParameterizedLabel<Context, Object, Object, Object, Object, String, String, Number, Number, Number, Smi> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred);
728 56 : ca_.Goto(&block0, parameter0, parameter1);
729 :
730 56 : if (block0.is_used()) {
731 56 : compiler::TNode<Context> tmp0;
732 56 : compiler::TNode<Object> tmp1;
733 56 : ca_.Bind(&block0, &tmp0, &tmp1);
734 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 24);
735 56 : compiler::TNode<IntPtrT> tmp2;
736 56 : USE(tmp2);
737 56 : tmp2 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(0));
738 56 : compiler::TNode<Object> tmp3;
739 56 : USE(tmp3);
740 56 : tmp3 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(arguments, compiler::TNode<IntPtrT>{tmp2}));
741 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 25);
742 56 : compiler::TNode<IntPtrT> tmp4;
743 56 : USE(tmp4);
744 56 : tmp4 = ca_.UncheckedCast<IntPtrT>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr8ATintptr17ATconstexpr_int31(1));
745 56 : compiler::TNode<Object> tmp5;
746 56 : USE(tmp5);
747 56 : tmp5 = ca_.UncheckedCast<Object>(CodeStubAssembler(state_).GetArgumentValue(arguments, compiler::TNode<IntPtrT>{tmp4}));
748 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 28);
749 56 : compiler::TNode<Object> tmp6;
750 56 : USE(tmp6);
751 56 : tmp6 = ca_.UncheckedCast<Object>(StringBuiltinsFromDSLAssembler(state_).RequireObjectCoercible(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp1}));
752 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 31);
753 56 : compiler::TNode<String> tmp7;
754 56 : USE(tmp7);
755 56 : tmp7 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp6}));
756 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 35);
757 56 : compiler::TNode<BoolT> tmp8;
758 56 : USE(tmp8);
759 56 : tmp8 = ca_.UncheckedCast<BoolT>(RegExpBuiltinsAssembler(state_).IsRegExp(compiler::TNode<Context>{tmp0}, compiler::TNode<Object>{tmp3}));
760 56 : ca_.Branch(tmp8, &block1, &block2, tmp0, tmp1, tmp3, tmp5, tmp6, tmp7);
761 : }
762 :
763 56 : if (block1.is_used()) {
764 56 : compiler::TNode<Context> tmp9;
765 56 : compiler::TNode<Object> tmp10;
766 56 : compiler::TNode<Object> tmp11;
767 56 : compiler::TNode<Object> tmp12;
768 56 : compiler::TNode<Object> tmp13;
769 56 : compiler::TNode<String> tmp14;
770 56 : ca_.Bind(&block1, &tmp9, &tmp10, &tmp11, &tmp12, &tmp13, &tmp14);
771 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 37);
772 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 36);
773 56 : CodeStubAssembler(state_).ThrowTypeError(compiler::TNode<Context>{tmp9}, MessageTemplate::kFirstArgumentNotRegExp, "String.prototype.startsWith");
774 : }
775 :
776 56 : if (block2.is_used()) {
777 56 : compiler::TNode<Context> tmp15;
778 56 : compiler::TNode<Object> tmp16;
779 56 : compiler::TNode<Object> tmp17;
780 56 : compiler::TNode<Object> tmp18;
781 56 : compiler::TNode<Object> tmp19;
782 56 : compiler::TNode<String> tmp20;
783 56 : ca_.Bind(&block2, &tmp15, &tmp16, &tmp17, &tmp18, &tmp19, &tmp20);
784 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 41);
785 56 : compiler::TNode<String> tmp21;
786 56 : USE(tmp21);
787 56 : tmp21 = ca_.UncheckedCast<String>(CodeStubAssembler(state_).ToString_Inline(compiler::TNode<Context>{tmp15}, compiler::TNode<Object>{tmp17}));
788 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 44);
789 56 : compiler::TNode<Number> tmp22;
790 56 : USE(tmp22);
791 56 : tmp22 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).ToInteger_Inline(compiler::TNode<Context>{tmp15}, compiler::TNode<Object>{tmp18}));
792 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 48);
793 56 : compiler::TNode<Smi> tmp23;
794 56 : USE(tmp23);
795 56 : tmp23 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp20}));
796 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 51);
797 56 : compiler::TNode<Number> tmp24;
798 56 : USE(tmp24);
799 56 : tmp24 = ca_.UncheckedCast<Number>(BaseBuiltinsFromDSLAssembler(state_).FromConstexpr22UT12ATHeapNumber5ATSmi17ATconstexpr_int31(0));
800 56 : compiler::TNode<Number> tmp25;
801 56 : USE(tmp25);
802 56 : tmp25 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberMax(compiler::TNode<Number>{tmp22}, compiler::TNode<Number>{tmp24}));
803 56 : compiler::TNode<Number> tmp26;
804 56 : USE(tmp26);
805 56 : tmp26 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberMin(compiler::TNode<Number>{tmp25}, compiler::TNode<Number>{tmp23}));
806 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 54);
807 56 : compiler::TNode<Smi> tmp27;
808 56 : USE(tmp27);
809 56 : tmp27 = ca_.UncheckedCast<Smi>(CodeStubAssembler(state_).LoadStringLengthAsSmi(compiler::TNode<String>{tmp21}));
810 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 57);
811 56 : compiler::TNode<Number> tmp28;
812 56 : USE(tmp28);
813 56 : tmp28 = ca_.UncheckedCast<Number>(CodeStubAssembler(state_).NumberAdd(compiler::TNode<Number>{tmp27}, compiler::TNode<Number>{tmp26}));
814 56 : compiler::CodeAssemblerLabel label0(&ca_);
815 112 : compiler::CodeAssemblerLabel label1(&ca_);
816 56 : CodeStubAssembler(state_).BranchIfNumberGreaterThan(compiler::TNode<Number>{tmp28}, compiler::TNode<Number>{tmp23}, &label0, &label1);
817 56 : if (label0.is_used()) {
818 56 : ca_.Bind(&label0);
819 56 : ca_.Goto(&block5, tmp15, tmp16, tmp17, tmp18, tmp19, tmp20, tmp21, tmp22, tmp23, tmp26, tmp27, tmp28, tmp23);
820 : }
821 56 : if (label1.is_used()) {
822 56 : ca_.Bind(&label1);
823 56 : ca_.Goto(&block6, tmp15, tmp16, tmp17, tmp18, tmp19, tmp20, tmp21, tmp22, tmp23, tmp26, tmp27, tmp28, tmp23);
824 56 : }
825 : }
826 :
827 56 : if (block5.is_used()) {
828 56 : compiler::TNode<Context> tmp29;
829 56 : compiler::TNode<Object> tmp30;
830 56 : compiler::TNode<Object> tmp31;
831 56 : compiler::TNode<Object> tmp32;
832 56 : compiler::TNode<Object> tmp33;
833 56 : compiler::TNode<String> tmp34;
834 56 : compiler::TNode<String> tmp35;
835 56 : compiler::TNode<Number> tmp36;
836 56 : compiler::TNode<Number> tmp37;
837 56 : compiler::TNode<Number> tmp38;
838 56 : compiler::TNode<Smi> tmp39;
839 56 : compiler::TNode<Number> tmp40;
840 56 : compiler::TNode<Number> tmp41;
841 56 : ca_.Bind(&block5, &tmp29, &tmp30, &tmp31, &tmp32, &tmp33, &tmp34, &tmp35, &tmp36, &tmp37, &tmp38, &tmp39, &tmp40, &tmp41);
842 56 : ca_.Goto(&block3, tmp29, tmp30, tmp31, tmp32, tmp33, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39);
843 : }
844 :
845 56 : if (block6.is_used()) {
846 56 : compiler::TNode<Context> tmp42;
847 56 : compiler::TNode<Object> tmp43;
848 56 : compiler::TNode<Object> tmp44;
849 56 : compiler::TNode<Object> tmp45;
850 56 : compiler::TNode<Object> tmp46;
851 56 : compiler::TNode<String> tmp47;
852 56 : compiler::TNode<String> tmp48;
853 56 : compiler::TNode<Number> tmp49;
854 56 : compiler::TNode<Number> tmp50;
855 56 : compiler::TNode<Number> tmp51;
856 56 : compiler::TNode<Smi> tmp52;
857 56 : compiler::TNode<Number> tmp53;
858 56 : compiler::TNode<Number> tmp54;
859 56 : ca_.Bind(&block6, &tmp42, &tmp43, &tmp44, &tmp45, &tmp46, &tmp47, &tmp48, &tmp49, &tmp50, &tmp51, &tmp52, &tmp53, &tmp54);
860 56 : ca_.Goto(&block4, tmp42, tmp43, tmp44, tmp45, tmp46, tmp47, tmp48, tmp49, tmp50, tmp51, tmp52);
861 : }
862 :
863 56 : if (block3.is_used()) {
864 56 : compiler::TNode<Context> tmp55;
865 56 : compiler::TNode<Object> tmp56;
866 56 : compiler::TNode<Object> tmp57;
867 56 : compiler::TNode<Object> tmp58;
868 56 : compiler::TNode<Object> tmp59;
869 56 : compiler::TNode<String> tmp60;
870 56 : compiler::TNode<String> tmp61;
871 56 : compiler::TNode<Number> tmp62;
872 56 : compiler::TNode<Number> tmp63;
873 56 : compiler::TNode<Number> tmp64;
874 56 : compiler::TNode<Smi> tmp65;
875 56 : ca_.Bind(&block3, &tmp55, &tmp56, &tmp57, &tmp58, &tmp59, &tmp60, &tmp61, &tmp62, &tmp63, &tmp64, &tmp65);
876 56 : compiler::TNode<Oddball> tmp66;
877 56 : USE(tmp66);
878 56 : tmp66 = BaseBuiltinsFromDSLAssembler(state_).False();
879 56 : arguments->PopAndReturn(tmp66);
880 : }
881 :
882 56 : if (block4.is_used()) {
883 56 : compiler::TNode<Context> tmp67;
884 56 : compiler::TNode<Object> tmp68;
885 56 : compiler::TNode<Object> tmp69;
886 56 : compiler::TNode<Object> tmp70;
887 56 : compiler::TNode<Object> tmp71;
888 56 : compiler::TNode<String> tmp72;
889 56 : compiler::TNode<String> tmp73;
890 56 : compiler::TNode<Number> tmp74;
891 56 : compiler::TNode<Number> tmp75;
892 56 : compiler::TNode<Number> tmp76;
893 56 : compiler::TNode<Smi> tmp77;
894 56 : ca_.Bind(&block4, &tmp67, &tmp68, &tmp69, &tmp70, &tmp71, &tmp72, &tmp73, &tmp74, &tmp75, &tmp76, &tmp77);
895 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 66);
896 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 65);
897 56 : compiler::TNode<Oddball> tmp78;
898 56 : USE(tmp78);
899 56 : compiler::CodeAssemblerLabel label0(&ca_);
900 56 : tmp78 = StringBuiltinsFromDSLAssembler(state_).TryFastStringCompareSequence(compiler::TNode<String>{tmp72}, compiler::TNode<String>{tmp73}, compiler::TNode<Number>{tmp76}, compiler::TNode<Smi>{tmp77}, &label0);
901 56 : ca_.Goto(&block9, tmp67, tmp68, tmp69, tmp70, tmp71, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77, tmp72, tmp73, tmp76, tmp77, tmp78);
902 56 : if (label0.is_used()) {
903 56 : ca_.Bind(&label0);
904 56 : ca_.Goto(&block10, tmp67, tmp68, tmp69, tmp70, tmp71, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77, tmp72, tmp73, tmp76, tmp77);
905 56 : }
906 : }
907 :
908 56 : if (block10.is_used()) {
909 56 : compiler::TNode<Context> tmp79;
910 56 : compiler::TNode<Object> tmp80;
911 56 : compiler::TNode<Object> tmp81;
912 56 : compiler::TNode<Object> tmp82;
913 56 : compiler::TNode<Object> tmp83;
914 56 : compiler::TNode<String> tmp84;
915 56 : compiler::TNode<String> tmp85;
916 56 : compiler::TNode<Number> tmp86;
917 56 : compiler::TNode<Number> tmp87;
918 56 : compiler::TNode<Number> tmp88;
919 56 : compiler::TNode<Smi> tmp89;
920 56 : compiler::TNode<String> tmp90;
921 56 : compiler::TNode<String> tmp91;
922 56 : compiler::TNode<Number> tmp92;
923 56 : compiler::TNode<Smi> tmp93;
924 56 : ca_.Bind(&block10, &tmp79, &tmp80, &tmp81, &tmp82, &tmp83, &tmp84, &tmp85, &tmp86, &tmp87, &tmp88, &tmp89, &tmp90, &tmp91, &tmp92, &tmp93);
925 56 : ca_.Goto(&block8, tmp79, tmp80, tmp81, tmp82, tmp83, tmp84, tmp85, tmp86, tmp87, tmp88, tmp89);
926 : }
927 :
928 56 : if (block9.is_used()) {
929 56 : compiler::TNode<Context> tmp94;
930 56 : compiler::TNode<Object> tmp95;
931 56 : compiler::TNode<Object> tmp96;
932 56 : compiler::TNode<Object> tmp97;
933 56 : compiler::TNode<Object> tmp98;
934 56 : compiler::TNode<String> tmp99;
935 56 : compiler::TNode<String> tmp100;
936 56 : compiler::TNode<Number> tmp101;
937 56 : compiler::TNode<Number> tmp102;
938 56 : compiler::TNode<Number> tmp103;
939 56 : compiler::TNode<Smi> tmp104;
940 56 : compiler::TNode<String> tmp105;
941 56 : compiler::TNode<String> tmp106;
942 56 : compiler::TNode<Number> tmp107;
943 56 : compiler::TNode<Smi> tmp108;
944 56 : compiler::TNode<Oddball> tmp109;
945 56 : ca_.Bind(&block9, &tmp94, &tmp95, &tmp96, &tmp97, &tmp98, &tmp99, &tmp100, &tmp101, &tmp102, &tmp103, &tmp104, &tmp105, &tmp106, &tmp107, &tmp108, &tmp109);
946 56 : arguments->PopAndReturn(tmp109);
947 : }
948 :
949 56 : if (block8.is_used()) {
950 56 : compiler::TNode<Context> tmp110;
951 56 : compiler::TNode<Object> tmp111;
952 56 : compiler::TNode<Object> tmp112;
953 56 : compiler::TNode<Object> tmp113;
954 56 : compiler::TNode<Object> tmp114;
955 56 : compiler::TNode<String> tmp115;
956 56 : compiler::TNode<String> tmp116;
957 56 : compiler::TNode<Number> tmp117;
958 56 : compiler::TNode<Number> tmp118;
959 56 : compiler::TNode<Number> tmp119;
960 56 : compiler::TNode<Smi> tmp120;
961 56 : ca_.Bind(&block8, &tmp110, &tmp111, &tmp112, &tmp113, &tmp114, &tmp115, &tmp116, &tmp117, &tmp118, &tmp119, &tmp120);
962 56 : ca_.SetSourcePosition("../../src/builtins/string-startswith.tq", 70);
963 56 : compiler::TNode<Oddball> tmp121;
964 56 : tmp121 = TORQUE_CAST(CodeStubAssembler(state_).CallRuntime(Runtime::kStringCompareSequence, tmp110, tmp115, tmp116, tmp119));
965 56 : USE(tmp121);
966 56 : arguments->PopAndReturn(tmp121);
967 56 : }
968 56 : }
969 :
970 : } // namespace internal
971 86739 : } // namespace v8
972 :
|