OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
6 | 6 |
7 #include "src/crankshaft/ia32/lithium-codegen-ia32.h" | 7 #include "src/crankshaft/ia32/lithium-codegen-ia32.h" |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 2785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2796 .code(); | 2796 .code(); |
2797 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 2797 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
2798 } | 2798 } |
2799 | 2799 |
2800 | 2800 |
2801 void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { | 2801 void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) { |
2802 Register result = ToRegister(instr->result()); | 2802 Register result = ToRegister(instr->result()); |
2803 | 2803 |
2804 if (instr->hydrogen()->from_inlined()) { | 2804 if (instr->hydrogen()->from_inlined()) { |
2805 __ lea(result, Operand(esp, -2 * kPointerSize)); | 2805 __ lea(result, Operand(esp, -2 * kPointerSize)); |
2806 } else { | 2806 } else if (instr->hydrogen()->arguments_adaptor()) { |
2807 // Check for arguments adapter frame. | 2807 // Check for arguments adapter frame. |
2808 Label done, adapted; | 2808 Label done, adapted; |
2809 __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); | 2809 __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); |
2810 __ mov(result, | 2810 __ mov(result, |
2811 Operand(result, CommonFrameConstants::kContextOrFrameTypeOffset)); | 2811 Operand(result, CommonFrameConstants::kContextOrFrameTypeOffset)); |
2812 __ cmp(Operand(result), | 2812 __ cmp(Operand(result), |
2813 Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); | 2813 Immediate(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); |
2814 __ j(equal, &adapted, Label::kNear); | 2814 __ j(equal, &adapted, Label::kNear); |
2815 | 2815 |
2816 // No arguments adaptor frame. | 2816 // No arguments adaptor frame. |
2817 __ mov(result, Operand(ebp)); | 2817 __ mov(result, Operand(ebp)); |
2818 __ jmp(&done, Label::kNear); | 2818 __ jmp(&done, Label::kNear); |
2819 | 2819 |
2820 // Arguments adaptor frame present. | 2820 // Arguments adaptor frame present. |
2821 __ bind(&adapted); | 2821 __ bind(&adapted); |
2822 __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); | 2822 __ mov(result, Operand(ebp, StandardFrameConstants::kCallerFPOffset)); |
2823 | 2823 |
2824 // Result is the frame pointer for the frame if not adapted and for the real | 2824 // Result is the frame pointer for the frame if not adapted and for the real |
2825 // frame below the adaptor frame if adapted. | 2825 // frame below the adaptor frame if adapted. |
2826 __ bind(&done); | 2826 __ bind(&done); |
| 2827 } else { |
| 2828 __ mov(result, Operand(ebp)); |
2827 } | 2829 } |
2828 } | 2830 } |
2829 | 2831 |
2830 | 2832 |
2831 void LCodeGen::DoArgumentsLength(LArgumentsLength* instr) { | 2833 void LCodeGen::DoArgumentsLength(LArgumentsLength* instr) { |
2832 Operand elem = ToOperand(instr->elements()); | 2834 Operand elem = ToOperand(instr->elements()); |
2833 Register result = ToRegister(instr->result()); | 2835 Register result = ToRegister(instr->result()); |
2834 | 2836 |
2835 Label done; | 2837 Label done; |
2836 | 2838 |
(...skipping 2427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5264 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), context); | 5266 __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), context); |
5265 } | 5267 } |
5266 | 5268 |
5267 | 5269 |
5268 #undef __ | 5270 #undef __ |
5269 | 5271 |
5270 } // namespace internal | 5272 } // namespace internal |
5271 } // namespace v8 | 5273 } // namespace v8 |
5272 | 5274 |
5273 #endif // V8_TARGET_ARCH_IA32 | 5275 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |