Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: src/x64/lithium-codegen-x64.cc

Issue 11818021: Allocation Info Tracking, continued. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 736 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 jump_table_.last().is_lazy_deopt != needs_lazy_deopt) { 747 jump_table_.last().is_lazy_deopt != needs_lazy_deopt) {
748 JumpTableEntry table_entry(entry, !frame_is_built_, needs_lazy_deopt); 748 JumpTableEntry table_entry(entry, !frame_is_built_, needs_lazy_deopt);
749 jump_table_.Add(table_entry, zone()); 749 jump_table_.Add(table_entry, zone());
750 } 750 }
751 if (cc == no_condition) { 751 if (cc == no_condition) {
752 __ jmp(&jump_table_.last().label); 752 __ jmp(&jump_table_.last().label);
753 } else { 753 } else {
754 __ j(cc, &jump_table_.last().label); 754 __ j(cc, &jump_table_.last().label);
755 } 755 }
756 } 756 }
757 __ bind(&done);
757 } 758 }
758 759
759 760
760 void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) { 761 void LCodeGen::PopulateDeoptimizationData(Handle<Code> code) {
761 int length = deoptimizations_.length(); 762 int length = deoptimizations_.length();
762 if (length == 0) return; 763 if (length == 0) return;
763 Handle<DeoptimizationInputData> data = 764 Handle<DeoptimizationInputData> data =
764 factory()->NewDeoptimizationInputData(length, TENURED); 765 factory()->NewDeoptimizationInputData(length, TENURED);
765 766
766 Handle<ByteArray> translations = translations_.CreateByteArray(); 767 Handle<ByteArray> translations = translations_.CreateByteArray();
(...skipping 3074 matching lines...) Expand 10 before | Expand all | Expand 10 after
3841 instr, 3842 instr,
3842 CALL_AS_FUNCTION, 3843 CALL_AS_FUNCTION,
3843 RDI_UNINITIALIZED); 3844 RDI_UNINITIALIZED);
3844 } 3845 }
3845 3846
3846 3847
3847 void LCodeGen::DoCallNew(LCallNew* instr) { 3848 void LCodeGen::DoCallNew(LCallNew* instr) {
3848 ASSERT(ToRegister(instr->constructor()).is(rdi)); 3849 ASSERT(ToRegister(instr->constructor()).is(rdi));
3849 ASSERT(ToRegister(instr->result()).is(rax)); 3850 ASSERT(ToRegister(instr->result()).is(rax));
3850 3851
3852 __ Set(rax, instr->arity());
3853 // No cell in ebx for construct type feedback in optimized code
3854 Handle<Object> undefined_value(isolate()->factory()->undefined_value());
3855 __ Move(rbx, undefined_value);
3851 CallConstructStub stub(NO_CALL_FUNCTION_FLAGS); 3856 CallConstructStub stub(NO_CALL_FUNCTION_FLAGS);
3857 CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr);
3858 }
3859
3860
3861 void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
3862 ASSERT(ToRegister(instr->constructor()).is(rdi));
3863 ASSERT(ToRegister(instr->result()).is(rax));
3864
3852 __ Set(rax, instr->arity()); 3865 __ Set(rax, instr->arity());
3853 CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr); 3866 __ Move(rbx, instr->hydrogen()->property_cell());
3867 Handle<Code> array_construct_code =
3868 isolate()->builtins()->ArrayConstructCode();
3869
3870 CallCode(array_construct_code, RelocInfo::CONSTRUCT_CALL, instr);
3854 } 3871 }
3855 3872
3856 3873
3857 void LCodeGen::DoCallRuntime(LCallRuntime* instr) { 3874 void LCodeGen::DoCallRuntime(LCallRuntime* instr) {
3858 CallRuntime(instr->function(), instr->arity(), instr); 3875 CallRuntime(instr->function(), instr->arity(), instr);
3859 } 3876 }
3860 3877
3861 3878
3862 void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { 3879 void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
3863 Register object = ToRegister(instr->object()); 3880 Register object = ToRegister(instr->object());
(...skipping 1866 matching lines...) Expand 10 before | Expand all | Expand 10 after
5730 FixedArray::kHeaderSize - kPointerSize)); 5747 FixedArray::kHeaderSize - kPointerSize));
5731 __ bind(&done); 5748 __ bind(&done);
5732 } 5749 }
5733 5750
5734 5751
5735 #undef __ 5752 #undef __
5736 5753
5737 } } // namespace v8::internal 5754 } } // namespace v8::internal
5738 5755
5739 #endif // V8_TARGET_ARCH_X64 5756 #endif // V8_TARGET_ARCH_X64
OLDNEW
« src/objects.cc ('K') | « src/x64/code-stubs-x64.cc ('k') | src/x64/lithium-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698