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

Side by Side Diff: src/x64/deoptimizer-x64.cc

Issue 11498006: Revert 13157, 13145 and 13140: Crankshaft code stubs. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years 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
« no previous file with comments | « src/x64/codegen-x64.h ('k') | src/x64/lithium-codegen-x64.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 if (value == 1) return i; 192 if (value == 1) return i;
193 } 193 }
194 } 194 }
195 UNREACHABLE(); 195 UNREACHABLE();
196 return -1; 196 return -1;
197 } 197 }
198 198
199 199
200 void Deoptimizer::DoComputeOsrOutputFrame() { 200 void Deoptimizer::DoComputeOsrOutputFrame() {
201 DeoptimizationInputData* data = DeoptimizationInputData::cast( 201 DeoptimizationInputData* data = DeoptimizationInputData::cast(
202 compiled_code_->deoptimization_data()); 202 optimized_code_->deoptimization_data());
203 unsigned ast_id = data->OsrAstId()->value(); 203 unsigned ast_id = data->OsrAstId()->value();
204 // TODO(kasperl): This should not be the bailout_id_. It should be 204 // TODO(kasperl): This should not be the bailout_id_. It should be
205 // the ast id. Confusing. 205 // the ast id. Confusing.
206 ASSERT(bailout_id_ == ast_id); 206 ASSERT(bailout_id_ == ast_id);
207 207
208 int bailout_id = LookupBailoutId(data, BailoutId(ast_id)); 208 int bailout_id = LookupBailoutId(data, BailoutId(ast_id));
209 unsigned translation_index = data->TranslationIndex(bailout_id)->value(); 209 unsigned translation_index = data->TranslationIndex(bailout_id)->value();
210 ByteArray* translations = data->TranslationByteArray(); 210 ByteArray* translations = data->TranslationByteArray();
211 211
212 TranslationIterator iterator(translations, translation_index); 212 TranslationIterator iterator(translations, translation_index);
(...skipping 16 matching lines...) Expand all
229 USE(closure_id); 229 USE(closure_id);
230 ASSERT_EQ(Translation::kSelfLiteralId, closure_id); 230 ASSERT_EQ(Translation::kSelfLiteralId, closure_id);
231 unsigned height = iterator.Next(); 231 unsigned height = iterator.Next();
232 unsigned height_in_bytes = height * kPointerSize; 232 unsigned height_in_bytes = height * kPointerSize;
233 USE(height_in_bytes); 233 USE(height_in_bytes);
234 234
235 unsigned fixed_size = ComputeFixedSize(function_); 235 unsigned fixed_size = ComputeFixedSize(function_);
236 unsigned input_frame_size = input_->GetFrameSize(); 236 unsigned input_frame_size = input_->GetFrameSize();
237 ASSERT(fixed_size + height_in_bytes == input_frame_size); 237 ASSERT(fixed_size + height_in_bytes == input_frame_size);
238 238
239 unsigned stack_slot_size = compiled_code_->stack_slots() * kPointerSize; 239 unsigned stack_slot_size = optimized_code_->stack_slots() * kPointerSize;
240 unsigned outgoing_height = data->ArgumentsStackHeight(bailout_id)->value(); 240 unsigned outgoing_height = data->ArgumentsStackHeight(bailout_id)->value();
241 unsigned outgoing_size = outgoing_height * kPointerSize; 241 unsigned outgoing_size = outgoing_height * kPointerSize;
242 unsigned output_frame_size = fixed_size + stack_slot_size + outgoing_size; 242 unsigned output_frame_size = fixed_size + stack_slot_size + outgoing_size;
243 ASSERT(outgoing_size == 0); // OSR does not happen in the middle of a call. 243 ASSERT(outgoing_size == 0); // OSR does not happen in the middle of a call.
244 244
245 if (FLAG_trace_osr) { 245 if (FLAG_trace_osr) {
246 PrintF("[on-stack replacement: begin 0x%08" V8PRIxPTR " ", 246 PrintF("[on-stack replacement: begin 0x%08" V8PRIxPTR " ",
247 reinterpret_cast<intptr_t>(function_)); 247 reinterpret_cast<intptr_t>(function_));
248 function_->PrintName(); 248 function_->PrintName();
249 PrintF(" => node=%u, frame=%d->%d]\n", 249 PrintF(" => node=%u, frame=%d->%d]\n",
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 delete output_[0]; 321 delete output_[0];
322 output_[0] = input_; 322 output_[0] = input_;
323 output_[0]->SetPc(reinterpret_cast<intptr_t>(from_)); 323 output_[0]->SetPc(reinterpret_cast<intptr_t>(from_));
324 } else { 324 } else {
325 // Set up the frame pointer and the context pointer. 325 // Set up the frame pointer and the context pointer.
326 output_[0]->SetRegister(rbp.code(), input_->GetRegister(rbp.code())); 326 output_[0]->SetRegister(rbp.code(), input_->GetRegister(rbp.code()));
327 output_[0]->SetRegister(rsi.code(), input_->GetRegister(rsi.code())); 327 output_[0]->SetRegister(rsi.code(), input_->GetRegister(rsi.code()));
328 328
329 unsigned pc_offset = data->OsrPcOffset()->value(); 329 unsigned pc_offset = data->OsrPcOffset()->value();
330 intptr_t pc = reinterpret_cast<intptr_t>( 330 intptr_t pc = reinterpret_cast<intptr_t>(
331 compiled_code_->entry() + pc_offset); 331 optimized_code_->entry() + pc_offset);
332 output_[0]->SetPc(pc); 332 output_[0]->SetPc(pc);
333 } 333 }
334 Code* continuation = 334 Code* continuation =
335 function_->GetIsolate()->builtins()->builtin(Builtins::kNotifyOSR); 335 function_->GetIsolate()->builtins()->builtin(Builtins::kNotifyOSR);
336 output_[0]->SetContinuation( 336 output_[0]->SetContinuation(
337 reinterpret_cast<intptr_t>(continuation->entry())); 337 reinterpret_cast<intptr_t>(continuation->entry()));
338 338
339 if (FLAG_trace_osr) { 339 if (FLAG_trace_osr) {
340 PrintF("[on-stack replacement translation %s: 0x%08" V8PRIxPTR " ", 340 PrintF("[on-stack replacement translation %s: 0x%08" V8PRIxPTR " ",
341 ok ? "finished" : "aborted", 341 ok ? "finished" : "aborted",
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 Builtins* builtins = isolate_->builtins(); 440 Builtins* builtins = isolate_->builtins();
441 Code* adaptor_trampoline = 441 Code* adaptor_trampoline =
442 builtins->builtin(Builtins::kArgumentsAdaptorTrampoline); 442 builtins->builtin(Builtins::kArgumentsAdaptorTrampoline);
443 intptr_t pc_value = reinterpret_cast<intptr_t>( 443 intptr_t pc_value = reinterpret_cast<intptr_t>(
444 adaptor_trampoline->instruction_start() + 444 adaptor_trampoline->instruction_start() +
445 isolate_->heap()->arguments_adaptor_deopt_pc_offset()->value()); 445 isolate_->heap()->arguments_adaptor_deopt_pc_offset()->value());
446 output_frame->SetPc(pc_value); 446 output_frame->SetPc(pc_value);
447 } 447 }
448 448
449 449
450 void Deoptimizer::DoCompiledStubFrame(TranslationIterator* iterator,
451 int frame_index) {
452 //
453 // FROM TO <-rbp
454 // | .... | | .... |
455 // +-------------------------+ +-------------------------+
456 // | JSFunction continuation | | JSFunction continuation |
457 // +-------------------------+ +-------------------------+<-rsp
458 // | | saved frame (rbp) |
459 // | +=========================+<-rbp
460 // | | JSFunction context |
461 // v +-------------------------+
462 // | COMPILED_STUB marker | rbp = saved frame
463 // +-------------------------+ rsi = JSFunction context
464 // | |
465 // | ... |
466 // | |
467 // +-------------------------+<-rsp
468 //
469 //
470 int output_frame_size = 1 * kPointerSize;
471 FrameDescription* output_frame =
472 new(output_frame_size) FrameDescription(output_frame_size, 0);
473 Code* notify_miss =
474 isolate_->builtins()->builtin(Builtins::kNotifyICMiss);
475 output_frame->SetState(Smi::FromInt(FullCodeGenerator::NO_REGISTERS));
476 output_frame->SetContinuation(
477 reinterpret_cast<intptr_t>(notify_miss->entry()));
478
479 ASSERT(compiled_code_->kind() == Code::COMPILED_STUB);
480 int major_key = compiled_code_->major_key();
481 CodeStubInterfaceDescriptor* descriptor =
482 isolate_->code_stub_interface_descriptor(major_key);
483 Handle<Code> miss_ic(descriptor->deoptimization_handler_);
484 output_frame->SetPc(reinterpret_cast<intptr_t>(miss_ic->instruction_start()));
485 unsigned input_frame_size = input_->GetFrameSize();
486 intptr_t value = input_->GetFrameSlot(input_frame_size - kPointerSize);
487 output_frame->SetFrameSlot(0, value);
488 value = input_->GetFrameSlot(input_frame_size - 2 * kPointerSize);
489 output_frame->SetRegister(rbp.code(), value);
490 output_frame->SetFp(value);
491 value = input_->GetFrameSlot(input_frame_size - 3 * kPointerSize);
492 output_frame->SetRegister(rsi.code(), value);
493
494 Translation::Opcode opcode =
495 static_cast<Translation::Opcode>(iterator->Next());
496 ASSERT(opcode == Translation::REGISTER);
497 USE(opcode);
498 int input_reg = iterator->Next();
499 intptr_t input_value = input_->GetRegister(input_reg);
500 output_frame->SetRegister(rdx.code(), input_value);
501
502 int32_t next = iterator->Next();
503 opcode = static_cast<Translation::Opcode>(next);
504 ASSERT(opcode == Translation::REGISTER);
505 input_reg = iterator->Next();
506 input_value = input_->GetRegister(input_reg);
507 output_frame->SetRegister(rax.code(), input_value);
508
509 ASSERT(frame_index == 0);
510 output_[frame_index] = output_frame;
511 }
512
513
514 void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator, 450 void Deoptimizer::DoComputeConstructStubFrame(TranslationIterator* iterator,
515 int frame_index) { 451 int frame_index) {
516 Builtins* builtins = isolate_->builtins(); 452 Builtins* builtins = isolate_->builtins();
517 Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric); 453 Code* construct_stub = builtins->builtin(Builtins::kJSConstructStubGeneric);
518 JSFunction* function = JSFunction::cast(ComputeLiteral(iterator->Next())); 454 JSFunction* function = JSFunction::cast(ComputeLiteral(iterator->Next()));
519 unsigned height = iterator->Next(); 455 unsigned height = iterator->Next();
520 unsigned height_in_bytes = height * kPointerSize; 456 unsigned height_in_bytes = height * kPointerSize;
521 if (FLAG_trace_deopt) { 457 if (FLAG_trace_deopt) {
522 PrintF(" translating construct stub => height=%d\n", height_in_bytes); 458 PrintF(" translating construct stub => height=%d\n", height_in_bytes);
523 } 459 }
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 859
924 void Deoptimizer::FillInputFrame(Address tos, JavaScriptFrame* frame) { 860 void Deoptimizer::FillInputFrame(Address tos, JavaScriptFrame* frame) {
925 // Set the register values. The values are not important as there are no 861 // Set the register values. The values are not important as there are no
926 // callee saved registers in JavaScript frames, so all registers are 862 // callee saved registers in JavaScript frames, so all registers are
927 // spilled. Registers rbp and rsp are set to the correct values though. 863 // spilled. Registers rbp and rsp are set to the correct values though.
928 for (int i = 0; i < Register::kNumRegisters; i++) { 864 for (int i = 0; i < Register::kNumRegisters; i++) {
929 input_->SetRegister(i, i * 4); 865 input_->SetRegister(i, i * 4);
930 } 866 }
931 input_->SetRegister(rsp.code(), reinterpret_cast<intptr_t>(frame->sp())); 867 input_->SetRegister(rsp.code(), reinterpret_cast<intptr_t>(frame->sp()));
932 input_->SetRegister(rbp.code(), reinterpret_cast<intptr_t>(frame->fp())); 868 input_->SetRegister(rbp.code(), reinterpret_cast<intptr_t>(frame->fp()));
933 for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); i++) { 869 for (int i = 0; i < DoubleRegister::kNumAllocatableRegisters; i++) {
934 input_->SetDoubleRegister(i, 0.0); 870 input_->SetDoubleRegister(i, 0.0);
935 } 871 }
936 872
937 // Fill the frame content from the actual data on the frame. 873 // Fill the frame content from the actual data on the frame.
938 for (unsigned i = 0; i < input_->GetFrameSize(); i += kPointerSize) { 874 for (unsigned i = 0; i < input_->GetFrameSize(); i += kPointerSize) {
939 input_->SetFrameSlot(i, Memory::uint64_at(tos + i)); 875 input_->SetFrameSlot(i, Memory::uint64_at(tos + i));
940 } 876 }
941 } 877 }
942 878
943 879
944 #define __ masm()-> 880 #define __ masm()->
945 881
946 void Deoptimizer::EntryGenerator::Generate() { 882 void Deoptimizer::EntryGenerator::Generate() {
947 GeneratePrologue(); 883 GeneratePrologue();
948 884
949 // Save all general purpose registers before messing with them. 885 // Save all general purpose registers before messing with them.
950 const int kNumberOfRegisters = Register::kNumRegisters; 886 const int kNumberOfRegisters = Register::kNumRegisters;
951 887
952 const int kDoubleRegsSize = kDoubleSize * 888 const int kDoubleRegsSize = kDoubleSize *
953 XMMRegister::NumAllocatableRegisters(); 889 XMMRegister::kNumAllocatableRegisters;
954 __ subq(rsp, Immediate(kDoubleRegsSize)); 890 __ subq(rsp, Immediate(kDoubleRegsSize));
955 891
956 for (int i = 0; i < XMMRegister::NumAllocatableRegisters(); ++i) { 892 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) {
957 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i); 893 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i);
958 int offset = i * kDoubleSize; 894 int offset = i * kDoubleSize;
959 __ movsd(Operand(rsp, offset), xmm_reg); 895 __ movsd(Operand(rsp, offset), xmm_reg);
960 } 896 }
961 897
962 // We push all registers onto the stack, even though we do not need 898 // We push all registers onto the stack, even though we do not need
963 // to restore all later. 899 // to restore all later.
964 for (int i = 0; i < kNumberOfRegisters; i++) { 900 for (int i = 0; i < kNumberOfRegisters; i++) {
965 Register r = Register::from_code(i); 901 Register r = Register::from_code(i);
966 __ push(r); 902 __ push(r);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 __ movq(rbx, Operand(rax, Deoptimizer::input_offset())); 971 __ movq(rbx, Operand(rax, Deoptimizer::input_offset()));
1036 972
1037 // Fill in the input registers. 973 // Fill in the input registers.
1038 for (int i = kNumberOfRegisters -1; i >= 0; i--) { 974 for (int i = kNumberOfRegisters -1; i >= 0; i--) {
1039 int offset = (i * kPointerSize) + FrameDescription::registers_offset(); 975 int offset = (i * kPointerSize) + FrameDescription::registers_offset();
1040 __ pop(Operand(rbx, offset)); 976 __ pop(Operand(rbx, offset));
1041 } 977 }
1042 978
1043 // Fill in the double input registers. 979 // Fill in the double input registers.
1044 int double_regs_offset = FrameDescription::double_registers_offset(); 980 int double_regs_offset = FrameDescription::double_registers_offset();
1045 for (int i = 0; i < XMMRegister::NumAllocatableRegisters(); i++) { 981 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; i++) {
1046 int dst_offset = i * kDoubleSize + double_regs_offset; 982 int dst_offset = i * kDoubleSize + double_regs_offset;
1047 __ pop(Operand(rbx, dst_offset)); 983 __ pop(Operand(rbx, dst_offset));
1048 } 984 }
1049 985
1050 // Remove the bailout id from the stack. 986 // Remove the bailout id from the stack.
1051 if (type() == EAGER) { 987 if (type() == EAGER) {
1052 __ addq(rsp, Immediate(kPointerSize)); 988 __ addq(rsp, Immediate(kPointerSize));
1053 } else { 989 } else {
1054 __ addq(rsp, Immediate(2 * kPointerSize)); 990 __ addq(rsp, Immediate(2 * kPointerSize));
1055 } 991 }
1056 992
1057 // Compute a pointer to the unwinding limit in register rcx; that is 993 // Compute a pointer to the unwinding limit in register rcx; that is
1058 // the first stack slot not part of the input frame. 994 // the first stack slot not part of the input frame.
1059 __ movq(rcx, Operand(rbx, FrameDescription::frame_size_offset())); 995 __ movq(rcx, Operand(rbx, FrameDescription::frame_size_offset()));
1060 __ addq(rcx, rsp); 996 __ addq(rcx, rsp);
1061 997
1062 // Unwind the stack down to - but not including - the unwinding 998 // Unwind the stack down to - but not including - the unwinding
1063 // limit and copy the contents of the activation frame to the input 999 // limit and copy the contents of the activation frame to the input
1064 // frame description. 1000 // frame description.
1065 __ lea(rdx, Operand(rbx, FrameDescription::frame_content_offset())); 1001 __ lea(rdx, Operand(rbx, FrameDescription::frame_content_offset()));
1066 Label pop_loop_header;
1067 __ jmp(&pop_loop_header);
1068 Label pop_loop; 1002 Label pop_loop;
1069 __ bind(&pop_loop); 1003 __ bind(&pop_loop);
1070 __ pop(Operand(rdx, 0)); 1004 __ pop(Operand(rdx, 0));
1071 __ addq(rdx, Immediate(sizeof(intptr_t))); 1005 __ addq(rdx, Immediate(sizeof(intptr_t)));
1072 __ bind(&pop_loop_header);
1073 __ cmpq(rcx, rsp); 1006 __ cmpq(rcx, rsp);
1074 __ j(not_equal, &pop_loop); 1007 __ j(not_equal, &pop_loop);
1075 1008
1076 // Compute the output frame in the deoptimizer. 1009 // Compute the output frame in the deoptimizer.
1077 __ push(rax); 1010 __ push(rax);
1078 __ PrepareCallCFunction(2); 1011 __ PrepareCallCFunction(2);
1079 __ movq(arg1, rax); 1012 __ movq(arg1, rax);
1080 __ LoadAddress(arg2, ExternalReference::isolate_address()); 1013 __ LoadAddress(arg2, ExternalReference::isolate_address());
1081 { 1014 {
1082 AllowExternalCallThatCantCauseGC scope(masm()); 1015 AllowExternalCallThatCantCauseGC scope(masm());
1083 __ CallCFunction( 1016 __ CallCFunction(
1084 ExternalReference::compute_output_frames_function(isolate), 2); 1017 ExternalReference::compute_output_frames_function(isolate), 2);
1085 } 1018 }
1086 __ pop(rax); 1019 __ pop(rax);
1087 1020
1088 // Replace the current frame with the output frames. 1021 // Replace the current frame with the output frames.
1089 Label outer_push_loop, inner_push_loop, 1022 Label outer_push_loop, inner_push_loop;
1090 outer_loop_header, inner_loop_header;
1091 // Outer loop state: rax = current FrameDescription**, rdx = one past the 1023 // Outer loop state: rax = current FrameDescription**, rdx = one past the
1092 // last FrameDescription**. 1024 // last FrameDescription**.
1093 __ movl(rdx, Operand(rax, Deoptimizer::output_count_offset())); 1025 __ movl(rdx, Operand(rax, Deoptimizer::output_count_offset()));
1094 __ movq(rax, Operand(rax, Deoptimizer::output_offset())); 1026 __ movq(rax, Operand(rax, Deoptimizer::output_offset()));
1095 __ lea(rdx, Operand(rax, rdx, times_8, 0)); 1027 __ lea(rdx, Operand(rax, rdx, times_8, 0));
1096 __ jmp(&outer_loop_header);
1097 __ bind(&outer_push_loop); 1028 __ bind(&outer_push_loop);
1098 // Inner loop state: rbx = current FrameDescription*, rcx = loop index. 1029 // Inner loop state: rbx = current FrameDescription*, rcx = loop index.
1099 __ movq(rbx, Operand(rax, 0)); 1030 __ movq(rbx, Operand(rax, 0));
1100 __ movq(rcx, Operand(rbx, FrameDescription::frame_size_offset())); 1031 __ movq(rcx, Operand(rbx, FrameDescription::frame_size_offset()));
1101 __ jmp(&inner_loop_header);
1102 __ bind(&inner_push_loop); 1032 __ bind(&inner_push_loop);
1103 __ subq(rcx, Immediate(sizeof(intptr_t))); 1033 __ subq(rcx, Immediate(sizeof(intptr_t)));
1104 __ push(Operand(rbx, rcx, times_1, FrameDescription::frame_content_offset())); 1034 __ push(Operand(rbx, rcx, times_1, FrameDescription::frame_content_offset()));
1105 __ bind(&inner_loop_header);
1106 __ testq(rcx, rcx); 1035 __ testq(rcx, rcx);
1107 __ j(not_zero, &inner_push_loop); 1036 __ j(not_zero, &inner_push_loop);
1108 __ addq(rax, Immediate(kPointerSize)); 1037 __ addq(rax, Immediate(kPointerSize));
1109 __ bind(&outer_loop_header);
1110 __ cmpq(rax, rdx); 1038 __ cmpq(rax, rdx);
1111 __ j(below, &outer_push_loop); 1039 __ j(below, &outer_push_loop);
1112 1040
1113 // In case of OSR, we have to restore the XMM registers. 1041 // In case of OSR, we have to restore the XMM registers.
1114 if (type() == OSR) { 1042 if (type() == OSR) {
1115 for (int i = 0; i < XMMRegister::NumAllocatableRegisters(); ++i) { 1043 for (int i = 0; i < XMMRegister::kNumAllocatableRegisters; ++i) {
1116 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i); 1044 XMMRegister xmm_reg = XMMRegister::FromAllocationIndex(i);
1117 int src_offset = i * kDoubleSize + double_regs_offset; 1045 int src_offset = i * kDoubleSize + double_regs_offset;
1118 __ movsd(xmm_reg, Operand(rbx, src_offset)); 1046 __ movsd(xmm_reg, Operand(rbx, src_offset));
1119 } 1047 }
1120 } 1048 }
1121 1049
1122 // Push state, pc, and continuation from the last output frame. 1050 // Push state, pc, and continuation from the last output frame.
1123 if (type() != OSR) { 1051 if (type() != OSR) {
1124 __ push(Operand(rbx, FrameDescription::state_offset())); 1052 __ push(Operand(rbx, FrameDescription::state_offset()));
1125 } 1053 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 } 1093 }
1166 __ bind(&done); 1094 __ bind(&done);
1167 } 1095 }
1168 1096
1169 #undef __ 1097 #undef __
1170 1098
1171 1099
1172 } } // namespace v8::internal 1100 } } // namespace v8::internal
1173 1101
1174 #endif // V8_TARGET_ARCH_X64 1102 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/codegen-x64.h ('k') | src/x64/lithium-codegen-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698