| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 2689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2700 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) { | 2700 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) { |
| 2701 // FunctionLiteral instruction is marked as call, we can trash any register. | 2701 // FunctionLiteral instruction is marked as call, we can trash any register. |
| 2702 ASSERT(instr->IsMarkedAsCall()); | 2702 ASSERT(instr->IsMarkedAsCall()); |
| 2703 | 2703 |
| 2704 // Use the fast case closure allocation code that allocates in new | 2704 // Use the fast case closure allocation code that allocates in new |
| 2705 // space for nested functions that don't need literals cloning. | 2705 // space for nested functions that don't need literals cloning. |
| 2706 bool pretenure = instr->hydrogen()->pretenure(); | 2706 bool pretenure = instr->hydrogen()->pretenure(); |
| 2707 if (!pretenure && instr->hydrogen()->has_no_literals()) { | 2707 if (!pretenure && instr->hydrogen()->has_no_literals()) { |
| 2708 FastNewClosureStub stub(instr->hydrogen()->language_mode(), | 2708 FastNewClosureStub stub(instr->hydrogen()->language_mode(), |
| 2709 instr->hydrogen()->is_generator()); | 2709 instr->hydrogen()->is_generator()); |
| 2710 __ Mov(x1, Operand(instr->hydrogen()->shared_info())); | 2710 __ Mov(x2, Operand(instr->hydrogen()->shared_info())); |
| 2711 __ Push(x1); | |
| 2712 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); | 2711 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); |
| 2713 } else { | 2712 } else { |
| 2714 __ Mov(x2, Operand(instr->hydrogen()->shared_info())); | 2713 __ Mov(x2, Operand(instr->hydrogen()->shared_info())); |
| 2715 __ Mov(x1, Operand(pretenure ? factory()->true_value() | 2714 __ Mov(x1, Operand(pretenure ? factory()->true_value() |
| 2716 : factory()->false_value())); | 2715 : factory()->false_value())); |
| 2717 __ Push(cp, x2, x1); | 2716 __ Push(cp, x2, x1); |
| 2718 CallRuntime(Runtime::kNewClosure, 3, instr); | 2717 CallRuntime(Runtime::kNewClosure, 3, instr); |
| 2719 } | 2718 } |
| 2720 } | 2719 } |
| 2721 | 2720 |
| (...skipping 1989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4711 __ Bind(instr->done_label()); | 4710 __ Bind(instr->done_label()); |
| 4712 deferred_stack_check->SetExit(instr->done_label()); | 4711 deferred_stack_check->SetExit(instr->done_label()); |
| 4713 RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); | 4712 RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |
| 4714 // Don't record a deoptimization index for the safepoint here. | 4713 // Don't record a deoptimization index for the safepoint here. |
| 4715 // This will be done explicitly when emitting call and the safepoint in | 4714 // This will be done explicitly when emitting call and the safepoint in |
| 4716 // the deferred code. | 4715 // the deferred code. |
| 4717 } | 4716 } |
| 4718 } | 4717 } |
| 4719 | 4718 |
| 4720 | 4719 |
| 4720 void LCodeGen::DoStoreCodeEntry(LStoreCodeEntry* instr) { |
| 4721 Register function = ToRegister(instr->function()); |
| 4722 Register code_object = ToRegister(instr->code_object()); |
| 4723 Register temp = ToRegister(instr->temp()); |
| 4724 __ Add(temp, code_object, Code::kHeaderSize - kHeapObjectTag); |
| 4725 __ Str(temp, FieldMemOperand(function, JSFunction::kCodeEntryOffset)); |
| 4726 } |
| 4727 |
| 4728 |
| 4721 void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) { | 4729 void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) { |
| 4722 Register context = ToRegister(instr->context()); | 4730 Register context = ToRegister(instr->context()); |
| 4723 Register value = ToRegister(instr->value()); | 4731 Register value = ToRegister(instr->value()); |
| 4724 Register scratch = ToRegister(instr->temp()); | 4732 Register scratch = ToRegister(instr->temp()); |
| 4725 MemOperand target = ContextMemOperand(context, instr->slot_index()); | 4733 MemOperand target = ContextMemOperand(context, instr->slot_index()); |
| 4726 | 4734 |
| 4727 Label skip_assignment; | 4735 Label skip_assignment; |
| 4728 | 4736 |
| 4729 if (instr->hydrogen()->RequiresHoleCheck()) { | 4737 if (instr->hydrogen()->RequiresHoleCheck()) { |
| 4730 __ Ldr(scratch, target); | 4738 __ Ldr(scratch, target); |
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5578 __ Bind(&out_of_object); | 5586 __ Bind(&out_of_object); |
| 5579 __ Ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset)); | 5587 __ Ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset)); |
| 5580 // Index is equal to negated out of object property index plus 1. | 5588 // Index is equal to negated out of object property index plus 1. |
| 5581 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 5589 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2)); |
| 5582 __ Ldr(result, FieldMemOperand(result, | 5590 __ Ldr(result, FieldMemOperand(result, |
| 5583 FixedArray::kHeaderSize - kPointerSize)); | 5591 FixedArray::kHeaderSize - kPointerSize)); |
| 5584 __ Bind(&done); | 5592 __ Bind(&done); |
| 5585 } | 5593 } |
| 5586 | 5594 |
| 5587 } } // namespace v8::internal | 5595 } } // namespace v8::internal |
| OLD | NEW |