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

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

Issue 14253015: Skip samples where top function's stack frame is not setup properly (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: mips->mipsel Created 7 years, 7 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 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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 // The following three instructions must remain together and unmodified 172 // The following three instructions must remain together and unmodified
173 // for code aging to work properly. 173 // for code aging to work properly.
174 __ Push(ra, fp, cp, a1); 174 __ Push(ra, fp, cp, a1);
175 // Add unused load of ip to ensure prologue sequence is identical for 175 // Add unused load of ip to ensure prologue sequence is identical for
176 // full-codegen and lithium-codegen. 176 // full-codegen and lithium-codegen.
177 __ LoadRoot(at, Heap::kUndefinedValueRootIndex); 177 __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
178 // Adj. FP to point to saved FP. 178 // Adj. FP to point to saved FP.
179 __ Addu(fp, sp, Operand(2 * kPointerSize)); 179 __ Addu(fp, sp, Operand(2 * kPointerSize));
180 } 180 }
181 frame_is_built_ = true; 181 frame_is_built_ = true;
182 info_->AddNoFrameRange(0, masm_->pc_offset());
182 } 183 }
183 184
184 // Reserve space for the stack slots needed by the code. 185 // Reserve space for the stack slots needed by the code.
185 int slots = GetStackSlotCount(); 186 int slots = GetStackSlotCount();
186 if (slots > 0) { 187 if (slots > 0) {
187 if (FLAG_debug_code) { 188 if (FLAG_debug_code) {
188 __ Subu(sp, sp, Operand(slots * kPointerSize)); 189 __ Subu(sp, sp, Operand(slots * kPointerSize));
189 __ push(a0); 190 __ push(a0);
190 __ push(a1); 191 __ push(a1);
191 __ Addu(a0, sp, Operand(slots * kPointerSize)); 192 __ Addu(a0, sp, Operand(slots * kPointerSize));
(...skipping 2312 matching lines...) Expand 10 before | Expand all | Expand 10 after
2504 BitVector* doubles = chunk()->allocated_double_registers(); 2505 BitVector* doubles = chunk()->allocated_double_registers();
2505 BitVector::Iterator save_iterator(doubles); 2506 BitVector::Iterator save_iterator(doubles);
2506 int count = 0; 2507 int count = 0;
2507 while (!save_iterator.Done()) { 2508 while (!save_iterator.Done()) {
2508 __ ldc1(DoubleRegister::FromAllocationIndex(save_iterator.Current()), 2509 __ ldc1(DoubleRegister::FromAllocationIndex(save_iterator.Current()),
2509 MemOperand(sp, count * kDoubleSize)); 2510 MemOperand(sp, count * kDoubleSize));
2510 save_iterator.Advance(); 2511 save_iterator.Advance();
2511 count++; 2512 count++;
2512 } 2513 }
2513 } 2514 }
2515 int no_frame_start = -1;
2514 if (NeedsEagerFrame()) { 2516 if (NeedsEagerFrame()) {
2515 __ mov(sp, fp); 2517 __ mov(sp, fp);
2516 __ Pop(ra, fp); 2518 __ Pop(ra, fp);
2519 no_frame_start = masm_->pc_offset();
2517 } 2520 }
2518 if (instr->has_constant_parameter_count()) { 2521 if (instr->has_constant_parameter_count()) {
2519 int parameter_count = ToInteger32(instr->constant_parameter_count()); 2522 int parameter_count = ToInteger32(instr->constant_parameter_count());
2520 int32_t sp_delta = (parameter_count + 1) * kPointerSize; 2523 int32_t sp_delta = (parameter_count + 1) * kPointerSize;
2521 if (sp_delta != 0) { 2524 if (sp_delta != 0) {
2522 __ Addu(sp, sp, Operand(sp_delta)); 2525 __ Addu(sp, sp, Operand(sp_delta));
2523 } 2526 }
2524 } else { 2527 } else {
2525 Register reg = ToRegister(instr->parameter_count()); 2528 Register reg = ToRegister(instr->parameter_count());
2526 // The argument count parameter is a smi 2529 // The argument count parameter is a smi
2527 __ SmiUntag(reg); 2530 __ SmiUntag(reg);
2528 __ sll(at, reg, kPointerSizeLog2); 2531 __ sll(at, reg, kPointerSizeLog2);
2529 __ Addu(sp, sp, at); 2532 __ Addu(sp, sp, at);
2530 } 2533 }
2531 2534
2532 __ Jump(ra); 2535 __ Jump(ra);
2536
2537 if (no_frame_start != -1) {
2538 info_->AddNoFrameRange(no_frame_start, masm_->pc_offset());
2539 }
2533 } 2540 }
2534 2541
2535 2542
2536 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) { 2543 void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
2537 Register result = ToRegister(instr->result()); 2544 Register result = ToRegister(instr->result());
2538 __ li(at, Operand(Handle<Object>(instr->hydrogen()->cell()))); 2545 __ li(at, Operand(Handle<Object>(instr->hydrogen()->cell())));
2539 __ lw(result, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset)); 2546 __ lw(result, FieldMemOperand(at, JSGlobalPropertyCell::kValueOffset));
2540 if (instr->hydrogen()->RequiresHoleCheck()) { 2547 if (instr->hydrogen()->RequiresHoleCheck()) {
2541 __ LoadRoot(at, Heap::kTheHoleValueRootIndex); 2548 __ LoadRoot(at, Heap::kTheHoleValueRootIndex);
2542 DeoptimizeIf(eq, instr->environment(), result, Operand(at)); 2549 DeoptimizeIf(eq, instr->environment(), result, Operand(at));
(...skipping 3081 matching lines...) Expand 10 before | Expand all | Expand 10 after
5624 __ Subu(scratch, result, scratch); 5631 __ Subu(scratch, result, scratch);
5625 __ lw(result, FieldMemOperand(scratch, 5632 __ lw(result, FieldMemOperand(scratch,
5626 FixedArray::kHeaderSize - kPointerSize)); 5633 FixedArray::kHeaderSize - kPointerSize));
5627 __ bind(&done); 5634 __ bind(&done);
5628 } 5635 }
5629 5636
5630 5637
5631 #undef __ 5638 #undef __
5632 5639
5633 } } // namespace v8::internal 5640 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698