OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 stack_parameter_count = graph()->GetConstantMinus1(); | 140 stack_parameter_count = graph()->GetConstantMinus1(); |
141 arguments_length_ = graph()->GetConstant0(); | 141 arguments_length_ = graph()->GetConstant0(); |
142 } | 142 } |
143 | 143 |
144 context_ = new(zone) HContext(); | 144 context_ = new(zone) HContext(); |
145 AddInstruction(context_); | 145 AddInstruction(context_); |
146 start_environment->BindContext(context_); | 146 start_environment->BindContext(context_); |
147 | 147 |
148 AddSimulate(BailoutId::StubEntry()); | 148 AddSimulate(BailoutId::StubEntry()); |
149 | 149 |
| 150 NoObservableSideEffectsScope no_effects(this); |
| 151 |
150 HValue* return_value = BuildCodeStub(); | 152 HValue* return_value = BuildCodeStub(); |
151 | 153 |
152 // We might have extra expressions to pop from the stack in addition to the | 154 // We might have extra expressions to pop from the stack in addition to the |
153 // arguments above | 155 // arguments above |
154 HInstruction* stack_pop_count = stack_parameter_count; | 156 HInstruction* stack_pop_count = stack_parameter_count; |
155 if (descriptor_->function_mode_ == JS_FUNCTION_STUB_MODE) { | 157 if (descriptor_->function_mode_ == JS_FUNCTION_STUB_MODE) { |
156 HInstruction* amount = graph()->GetConstant1(); | 158 HInstruction* amount = graph()->GetConstant1(); |
157 stack_pop_count = AddInstruction( | 159 stack_pop_count = AddInstruction( |
158 HAdd::New(zone, context_, stack_parameter_count, amount)); | 160 HAdd::New(zone, context_, stack_parameter_count, amount)); |
159 stack_pop_count->ChangeRepresentation(Representation::Integer32()); | 161 stack_pop_count->ChangeRepresentation(Representation::Integer32()); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 HType::JSObject(), | 293 HType::JSObject(), |
292 flags)); | 294 flags)); |
293 | 295 |
294 for (int i = 0; i < size; i += kPointerSize) { | 296 for (int i = 0; i < size; i += kPointerSize) { |
295 HInstruction* value = | 297 HInstruction* value = |
296 AddInstruction(new(zone) HLoadNamedField(boilerplate, true, i)); | 298 AddInstruction(new(zone) HLoadNamedField(boilerplate, true, i)); |
297 AddInstruction(new(zone) HStoreNamedField(object, | 299 AddInstruction(new(zone) HStoreNamedField(object, |
298 factory->empty_string(), | 300 factory->empty_string(), |
299 value, | 301 value, |
300 true, i)); | 302 true, i)); |
301 AddSimulate(BailoutId::StubEntry()); | |
302 } | 303 } |
303 | 304 |
304 builder.End(); | 305 builder.End(); |
305 return object; | 306 return object; |
306 } | 307 } |
307 | 308 |
308 | 309 |
309 Handle<Code> FastCloneShallowObjectStub::GenerateCode() { | 310 Handle<Code> FastCloneShallowObjectStub::GenerateCode() { |
310 return DoGenerateCode(this); | 311 return DoGenerateCode(this); |
311 } | 312 } |
(...skipping 13 matching lines...) Expand all Loading... |
325 return DoGenerateCode(this); | 326 return DoGenerateCode(this); |
326 } | 327 } |
327 | 328 |
328 | 329 |
329 template <> | 330 template <> |
330 HValue* CodeStubGraphBuilder<KeyedStoreFastElementStub>::BuildCodeStub() { | 331 HValue* CodeStubGraphBuilder<KeyedStoreFastElementStub>::BuildCodeStub() { |
331 BuildUncheckedMonomorphicElementAccess( | 332 BuildUncheckedMonomorphicElementAccess( |
332 GetParameter(0), GetParameter(1), GetParameter(2), NULL, | 333 GetParameter(0), GetParameter(1), GetParameter(2), NULL, |
333 casted_stub()->is_js_array(), casted_stub()->elements_kind(), | 334 casted_stub()->is_js_array(), casted_stub()->elements_kind(), |
334 true, casted_stub()->store_mode(), Representation::Tagged()); | 335 true, casted_stub()->store_mode(), Representation::Tagged()); |
335 AddSimulate(BailoutId::StubEntry(), REMOVABLE_SIMULATE); | |
336 | 336 |
337 return GetParameter(2); | 337 return GetParameter(2); |
338 } | 338 } |
339 | 339 |
340 | 340 |
341 Handle<Code> KeyedStoreFastElementStub::GenerateCode() { | 341 Handle<Code> KeyedStoreFastElementStub::GenerateCode() { |
342 return DoGenerateCode(this); | 342 return DoGenerateCode(this); |
343 } | 343 } |
344 | 344 |
345 | 345 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 BuildCopyElements(context(), elements, | 381 BuildCopyElements(context(), elements, |
382 casted_stub()->from_kind(), new_elements, | 382 casted_stub()->from_kind(), new_elements, |
383 to_kind, array_length, elements_length); | 383 to_kind, array_length, elements_length); |
384 | 384 |
385 Factory* factory = isolate()->factory(); | 385 Factory* factory = isolate()->factory(); |
386 | 386 |
387 AddInstruction(new(zone) HStoreNamedField(js_array, | 387 AddInstruction(new(zone) HStoreNamedField(js_array, |
388 factory->elements_field_string(), | 388 factory->elements_field_string(), |
389 new_elements, true, | 389 new_elements, true, |
390 JSArray::kElementsOffset)); | 390 JSArray::kElementsOffset)); |
391 AddSimulate(BailoutId::StubEntry()); | |
392 | 391 |
393 if_builder.End(); | 392 if_builder.End(); |
394 | 393 |
395 AddInstruction(new(zone) HStoreNamedField(js_array, factory->length_string(), | 394 AddInstruction(new(zone) HStoreNamedField(js_array, factory->length_string(), |
396 map, true, JSArray::kMapOffset)); | 395 map, true, JSArray::kMapOffset)); |
397 AddSimulate(BailoutId::StubEntry()); | |
398 return js_array; | 396 return js_array; |
399 } | 397 } |
400 | 398 |
401 | 399 |
402 Handle<Code> TransitionElementsKindStub::GenerateCode() { | 400 Handle<Code> TransitionElementsKindStub::GenerateCode() { |
403 return DoGenerateCode(this); | 401 return DoGenerateCode(this); |
404 } | 402 } |
405 | 403 |
406 | 404 |
407 template <> | 405 template <> |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 current_block()->MarkAsDeoptimizing(); | 438 current_block()->MarkAsDeoptimizing(); |
441 return GetParameter(0); | 439 return GetParameter(0); |
442 } | 440 } |
443 | 441 |
444 | 442 |
445 Handle<Code> ArrayNArgumentsConstructorStub::GenerateCode() { | 443 Handle<Code> ArrayNArgumentsConstructorStub::GenerateCode() { |
446 return DoGenerateCode(this); | 444 return DoGenerateCode(this); |
447 } | 445 } |
448 | 446 |
449 } } // namespace v8::internal | 447 } } // namespace v8::internal |
OLD | NEW |