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 #include "src/ia32/codegen-ia32.h" | 5 #include "src/ia32/codegen-ia32.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
8 | 8 |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/heap/heap.h" | 10 #include "src/heap/heap.h" |
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 if (mode == TRACK_ALLOCATION_SITE) { | 697 if (mode == TRACK_ALLOCATION_SITE) { |
698 __ JumpIfJSArrayHasAllocationMemento(edx, edi, fail); | 698 __ JumpIfJSArrayHasAllocationMemento(edx, edi, fail); |
699 } | 699 } |
700 | 700 |
701 // Check for empty arrays, which only require a map transition and no changes | 701 // Check for empty arrays, which only require a map transition and no changes |
702 // to the backing store. | 702 // to the backing store. |
703 __ mov(edi, FieldOperand(edx, JSObject::kElementsOffset)); | 703 __ mov(edi, FieldOperand(edx, JSObject::kElementsOffset)); |
704 __ cmp(edi, Immediate(masm->isolate()->factory()->empty_fixed_array())); | 704 __ cmp(edi, Immediate(masm->isolate()->factory()->empty_fixed_array())); |
705 __ j(equal, &only_change_map); | 705 __ j(equal, &only_change_map); |
706 | 706 |
| 707 __ push(esi); |
707 __ push(eax); | 708 __ push(eax); |
708 __ push(edx); | 709 __ push(edx); |
709 __ push(ebx); | 710 __ push(ebx); |
710 | 711 |
711 __ mov(ebx, FieldOperand(edi, FixedDoubleArray::kLengthOffset)); | 712 __ mov(ebx, FieldOperand(edi, FixedDoubleArray::kLengthOffset)); |
712 | 713 |
713 // Allocate new FixedArray. | 714 // Allocate new FixedArray. |
714 // ebx: length of source FixedDoubleArray (smi-tagged) | 715 // ebx: length of source FixedDoubleArray (smi-tagged) |
715 __ lea(edi, Operand(ebx, times_2, FixedArray::kHeaderSize)); | 716 __ lea(edi, Operand(ebx, times_2, FixedArray::kHeaderSize)); |
716 __ Allocate(edi, eax, esi, no_reg, &gc_required, TAG_OBJECT); | 717 __ Allocate(edi, eax, esi, no_reg, &gc_required, TAG_OBJECT); |
(...skipping 29 matching lines...) Expand all Loading... |
746 HeapObject::kMapOffset, | 747 HeapObject::kMapOffset, |
747 ebx, | 748 ebx, |
748 edi, | 749 edi, |
749 kDontSaveFPRegs, | 750 kDontSaveFPRegs, |
750 OMIT_REMEMBERED_SET, | 751 OMIT_REMEMBERED_SET, |
751 OMIT_SMI_CHECK); | 752 OMIT_SMI_CHECK); |
752 __ jmp(&success); | 753 __ jmp(&success); |
753 | 754 |
754 // Call into runtime if GC is required. | 755 // Call into runtime if GC is required. |
755 __ bind(&gc_required); | 756 __ bind(&gc_required); |
756 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); | |
757 __ pop(ebx); | 757 __ pop(ebx); |
758 __ pop(edx); | 758 __ pop(edx); |
759 __ pop(eax); | 759 __ pop(eax); |
| 760 __ pop(esi); |
760 __ jmp(fail); | 761 __ jmp(fail); |
761 | 762 |
762 // Box doubles into heap numbers. | 763 // Box doubles into heap numbers. |
763 // edi: source FixedDoubleArray | 764 // edi: source FixedDoubleArray |
764 // eax: destination FixedArray | 765 // eax: destination FixedArray |
765 __ bind(&loop); | 766 __ bind(&loop); |
766 // ebx: index of current element (smi-tagged) | 767 // ebx: index of current element (smi-tagged) |
767 uint32_t offset = FixedDoubleArray::kHeaderSize + sizeof(kHoleNanLower32); | 768 uint32_t offset = FixedDoubleArray::kHeaderSize + sizeof(kHoleNanLower32); |
768 __ cmp(FieldOperand(edi, ebx, times_4, offset), Immediate(kHoleNanUpper32)); | 769 __ cmp(FieldOperand(edi, ebx, times_4, offset), Immediate(kHoleNanUpper32)); |
769 __ j(equal, &convert_hole); | 770 __ j(equal, &convert_hole); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 __ RecordWriteField(edx, | 812 __ RecordWriteField(edx, |
812 JSObject::kElementsOffset, | 813 JSObject::kElementsOffset, |
813 eax, | 814 eax, |
814 edi, | 815 edi, |
815 kDontSaveFPRegs, | 816 kDontSaveFPRegs, |
816 EMIT_REMEMBERED_SET, | 817 EMIT_REMEMBERED_SET, |
817 OMIT_SMI_CHECK); | 818 OMIT_SMI_CHECK); |
818 | 819 |
819 // Restore registers. | 820 // Restore registers. |
820 __ pop(eax); | 821 __ pop(eax); |
821 __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); | 822 __ pop(esi); |
822 | 823 |
823 __ bind(&success); | 824 __ bind(&success); |
824 } | 825 } |
825 | 826 |
826 | 827 |
827 void StringCharLoadGenerator::Generate(MacroAssembler* masm, | 828 void StringCharLoadGenerator::Generate(MacroAssembler* masm, |
828 Factory* factory, | 829 Factory* factory, |
829 Register string, | 830 Register string, |
830 Register index, | 831 Register index, |
831 Register result, | 832 Register result, |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1042 CodePatcher patcher(isolate, sequence, young_length); | 1043 CodePatcher patcher(isolate, sequence, young_length); |
1043 patcher.masm()->call(stub->instruction_start(), RelocInfo::NONE32); | 1044 patcher.masm()->call(stub->instruction_start(), RelocInfo::NONE32); |
1044 } | 1045 } |
1045 } | 1046 } |
1046 | 1047 |
1047 | 1048 |
1048 } // namespace internal | 1049 } // namespace internal |
1049 } // namespace v8 | 1050 } // namespace v8 |
1050 | 1051 |
1051 #endif // V8_TARGET_ARCH_IA32 | 1052 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |