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

Side by Side Diff: src/arm64/lithium-codegen-arm64.h

Issue 400223002: ARM64: never record safepoint with doubles (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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
« no previous file with comments | « src/arm64/code-stubs-arm64.cc ('k') | src/arm64/lithium-codegen-arm64.cc » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 #ifndef V8_ARM64_LITHIUM_CODEGEN_ARM64_H_ 5 #ifndef V8_ARM64_LITHIUM_CODEGEN_ARM64_H_
6 #define V8_ARM64_LITHIUM_CODEGEN_ARM64_H_ 6 #define V8_ARM64_LITHIUM_CODEGEN_ARM64_H_
7 7
8 #include "src/arm64/lithium-arm64.h" 8 #include "src/arm64/lithium-arm64.h"
9 9
10 #include "src/arm64/lithium-gap-resolver-arm64.h" 10 #include "src/arm64/lithium-gap-resolver-arm64.h"
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 void RecordAndWritePosition(int position) V8_OVERRIDE; 341 void RecordAndWritePosition(int position) V8_OVERRIDE;
342 void RecordSafepoint(LPointerMap* pointers, 342 void RecordSafepoint(LPointerMap* pointers,
343 Safepoint::Kind kind, 343 Safepoint::Kind kind,
344 int arguments, 344 int arguments,
345 Safepoint::DeoptMode mode); 345 Safepoint::DeoptMode mode);
346 void RecordSafepoint(LPointerMap* pointers, Safepoint::DeoptMode mode); 346 void RecordSafepoint(LPointerMap* pointers, Safepoint::DeoptMode mode);
347 void RecordSafepoint(Safepoint::DeoptMode mode); 347 void RecordSafepoint(Safepoint::DeoptMode mode);
348 void RecordSafepointWithRegisters(LPointerMap* pointers, 348 void RecordSafepointWithRegisters(LPointerMap* pointers,
349 int arguments, 349 int arguments,
350 Safepoint::DeoptMode mode); 350 Safepoint::DeoptMode mode);
351 void RecordSafepointWithRegistersAndDoubles(LPointerMap* pointers,
352 int arguments,
353 Safepoint::DeoptMode mode);
354 void RecordSafepointWithLazyDeopt(LInstruction* instr, 351 void RecordSafepointWithLazyDeopt(LInstruction* instr,
355 SafepointMode safepoint_mode); 352 SafepointMode safepoint_mode);
356 353
357 void EnsureSpaceForLazyDeopt(int space_needed) V8_OVERRIDE; 354 void EnsureSpaceForLazyDeopt(int space_needed) V8_OVERRIDE;
358 355
359 ZoneList<LEnvironment*> deoptimizations_; 356 ZoneList<LEnvironment*> deoptimizations_;
360 ZoneList<Deoptimizer::JumpTableEntry*> deopt_jump_table_; 357 ZoneList<Deoptimizer::JumpTableEntry*> deopt_jump_table_;
361 ZoneList<Handle<Object> > deoptimization_literals_; 358 ZoneList<Handle<Object> > deoptimization_literals_;
362 int inlined_function_count_; 359 int inlined_function_count_;
363 Scope* const scope_; 360 Scope* const scope_;
(...skipping 17 matching lines...) Expand all
381 bool after_push_argument_; 378 bool after_push_argument_;
382 // If we have inlined arguments, we are no longer able to use jssp because 379 // If we have inlined arguments, we are no longer able to use jssp because
383 // jssp is modified and we never know if we are in a block after or before 380 // jssp is modified and we never know if we are in a block after or before
384 // the pop of the arguments (which restores jssp). 381 // the pop of the arguments (which restores jssp).
385 bool inlined_arguments_; 382 bool inlined_arguments_;
386 383
387 int old_position_; 384 int old_position_;
388 385
389 class PushSafepointRegistersScope BASE_EMBEDDED { 386 class PushSafepointRegistersScope BASE_EMBEDDED {
390 public: 387 public:
391 PushSafepointRegistersScope(LCodeGen* codegen, 388 explicit PushSafepointRegistersScope(LCodeGen* codegen)
392 Safepoint::Kind kind)
393 : codegen_(codegen) { 389 : codegen_(codegen) {
394 ASSERT(codegen_->info()->is_calling()); 390 ASSERT(codegen_->info()->is_calling());
395 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kSimple); 391 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kSimple);
396 codegen_->expected_safepoint_kind_ = kind; 392 codegen_->expected_safepoint_kind_ = Safepoint::kWithRegisters;
397 393
398 UseScratchRegisterScope temps(codegen_->masm_); 394 UseScratchRegisterScope temps(codegen_->masm_);
399 // Preserve the value of lr which must be saved on the stack (the call to 395 // Preserve the value of lr which must be saved on the stack (the call to
400 // the stub will clobber it). 396 // the stub will clobber it).
401 Register to_be_pushed_lr = 397 Register to_be_pushed_lr =
402 temps.UnsafeAcquire(StoreRegistersStateStub::to_be_pushed_lr()); 398 temps.UnsafeAcquire(StoreRegistersStateStub::to_be_pushed_lr());
403 codegen_->masm_->Mov(to_be_pushed_lr, lr); 399 codegen_->masm_->Mov(to_be_pushed_lr, lr);
404 switch (codegen_->expected_safepoint_kind_) { 400 StoreRegistersStateStub stub(codegen_->isolate());
405 case Safepoint::kWithRegisters: { 401 codegen_->masm_->CallStub(&stub);
406 StoreRegistersStateStub stub(codegen_->isolate(), kDontSaveFPRegs);
407 codegen_->masm_->CallStub(&stub);
408 break;
409 }
410 case Safepoint::kWithRegistersAndDoubles: {
411 StoreRegistersStateStub stub(codegen_->isolate(), kSaveFPRegs);
412 codegen_->masm_->CallStub(&stub);
413 break;
414 }
415 default:
416 UNREACHABLE();
417 }
418 } 402 }
419 403
420 ~PushSafepointRegistersScope() { 404 ~PushSafepointRegistersScope() {
421 Safepoint::Kind kind = codegen_->expected_safepoint_kind_; 405 ASSERT(codegen_->expected_safepoint_kind_ == Safepoint::kWithRegisters);
422 ASSERT((kind & Safepoint::kWithRegisters) != 0); 406 RestoreRegistersStateStub stub(codegen_->isolate());
423 switch (kind) { 407 codegen_->masm_->CallStub(&stub);
424 case Safepoint::kWithRegisters: {
425 RestoreRegistersStateStub stub(codegen_->isolate(), kDontSaveFPRegs);
426 codegen_->masm_->CallStub(&stub);
427 break;
428 }
429 case Safepoint::kWithRegistersAndDoubles: {
430 RestoreRegistersStateStub stub(codegen_->isolate(), kSaveFPRegs);
431 codegen_->masm_->CallStub(&stub);
432 break;
433 }
434 default:
435 UNREACHABLE();
436 }
437 codegen_->expected_safepoint_kind_ = Safepoint::kSimple; 408 codegen_->expected_safepoint_kind_ = Safepoint::kSimple;
438 } 409 }
439 410
440 private: 411 private:
441 LCodeGen* codegen_; 412 LCodeGen* codegen_;
442 }; 413 };
443 414
444 friend class LDeferredCode; 415 friend class LDeferredCode;
445 friend class SafepointGenerator; 416 friend class SafepointGenerator;
446 DISALLOW_COPY_AND_ASSIGN(LCodeGen); 417 DISALLOW_COPY_AND_ASSIGN(LCodeGen);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 468
498 protected: 469 protected:
499 MacroAssembler* masm() const { return codegen_->masm(); } 470 MacroAssembler* masm() const { return codegen_->masm(); }
500 471
501 LCodeGen* codegen_; 472 LCodeGen* codegen_;
502 }; 473 };
503 474
504 } } // namespace v8::internal 475 } } // namespace v8::internal
505 476
506 #endif // V8_ARM64_LITHIUM_CODEGEN_ARM64_H_ 477 #endif // V8_ARM64_LITHIUM_CODEGEN_ARM64_H_
OLDNEW
« no previous file with comments | « src/arm64/code-stubs-arm64.cc ('k') | src/arm64/lithium-codegen-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698