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

Side by Side Diff: src/compiler/instruction.h

Issue 1959763002: [turbofan] Rename floating point register / slot methods. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Unfix arm64. Created 4 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
« no previous file with comments | « src/compiler/ia32/code-generator-ia32.cc ('k') | src/compiler/instruction.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_COMPILER_INSTRUCTION_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_H_
6 #define V8_COMPILER_INSTRUCTION_H_ 6 #define V8_COMPILER_INSTRUCTION_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <iosfwd> 9 #include <iosfwd>
10 #include <map> 10 #include <map>
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // stack slots, completely bypassing the register allocator. They are never 59 // stack slots, completely bypassing the register allocator. They are never
60 // associated with a virtual register 60 // associated with a virtual register
61 INSTRUCTION_OPERAND_PREDICATE(Explicit, EXPLICIT) 61 INSTRUCTION_OPERAND_PREDICATE(Explicit, EXPLICIT)
62 // AllocatedOperands are registers or stack slots that are assigned by the 62 // AllocatedOperands are registers or stack slots that are assigned by the
63 // register allocator and are always associated with a virtual register. 63 // register allocator and are always associated with a virtual register.
64 INSTRUCTION_OPERAND_PREDICATE(Allocated, ALLOCATED) 64 INSTRUCTION_OPERAND_PREDICATE(Allocated, ALLOCATED)
65 #undef INSTRUCTION_OPERAND_PREDICATE 65 #undef INSTRUCTION_OPERAND_PREDICATE
66 66
67 inline bool IsAnyRegister() const; 67 inline bool IsAnyRegister() const;
68 inline bool IsRegister() const; 68 inline bool IsRegister() const;
69 inline bool IsFPRegister() const;
70 inline bool IsFloatRegister() const;
69 inline bool IsDoubleRegister() const; 71 inline bool IsDoubleRegister() const;
70 inline bool IsSimd128Register() const; 72 inline bool IsSimd128Register() const;
71 inline bool IsStackSlot() const; 73 inline bool IsStackSlot() const;
74 inline bool IsFPStackSlot() const;
75 inline bool IsFloatStackSlot() const;
72 inline bool IsDoubleStackSlot() const; 76 inline bool IsDoubleStackSlot() const;
73 inline bool IsSimd128StackSlot() const; 77 inline bool IsSimd128StackSlot() const;
74 78
75 template <typename SubKindOperand> 79 template <typename SubKindOperand>
76 static SubKindOperand* New(Zone* zone, const SubKindOperand& op) { 80 static SubKindOperand* New(Zone* zone, const SubKindOperand& op) {
77 void* buffer = zone->New(sizeof(op)); 81 void* buffer = zone->New(sizeof(op));
78 return new (buffer) SubKindOperand(op); 82 return new (buffer) SubKindOperand(op);
79 } 83 }
80 84
81 static void ReplaceWith(InstructionOperand* dest, 85 static void ReplaceWith(InstructionOperand* dest,
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 MachineRepresentation rep, int index) 410 MachineRepresentation rep, int index)
407 : InstructionOperand(operand_kind) { 411 : InstructionOperand(operand_kind) {
408 DCHECK_IMPLIES(location_kind == REGISTER, index >= 0); 412 DCHECK_IMPLIES(location_kind == REGISTER, index >= 0);
409 DCHECK(IsSupportedRepresentation(rep)); 413 DCHECK(IsSupportedRepresentation(rep));
410 value_ |= LocationKindField::encode(location_kind); 414 value_ |= LocationKindField::encode(location_kind);
411 value_ |= RepresentationField::encode(rep); 415 value_ |= RepresentationField::encode(rep);
412 value_ |= static_cast<int64_t>(index) << IndexField::kShift; 416 value_ |= static_cast<int64_t>(index) << IndexField::kShift;
413 } 417 }
414 418
415 int index() const { 419 int index() const {
416 DCHECK(IsStackSlot() || IsDoubleStackSlot() || IsSimd128StackSlot()); 420 DCHECK(IsStackSlot() || IsFPStackSlot());
417 return static_cast<int64_t>(value_) >> IndexField::kShift; 421 return static_cast<int64_t>(value_) >> IndexField::kShift;
418 } 422 }
419 423
420 Register GetRegister() const { 424 Register GetRegister() const {
421 DCHECK(IsRegister()); 425 DCHECK(IsRegister());
422 return Register::from_code(static_cast<int64_t>(value_) >> 426 return Register::from_code(static_cast<int64_t>(value_) >>
423 IndexField::kShift); 427 IndexField::kShift);
424 } 428 }
425 429
430 FloatRegister GetFloatRegister() const {
431 DCHECK(IsFloatRegister());
432 return FloatRegister::from_code(static_cast<int64_t>(value_) >>
433 IndexField::kShift);
434 }
435
426 DoubleRegister GetDoubleRegister() const { 436 DoubleRegister GetDoubleRegister() const {
427 DCHECK(IsDoubleRegister()); 437 // TODO(bbudge) Tighten this test to IsDoubleRegister when all code
438 // generators are changed to use the correct Get*Register method.
439 DCHECK(IsFPRegister());
428 return DoubleRegister::from_code(static_cast<int64_t>(value_) >> 440 return DoubleRegister::from_code(static_cast<int64_t>(value_) >>
429 IndexField::kShift); 441 IndexField::kShift);
430 } 442 }
431 443
432 Simd128Register GetSimd128Register() const { 444 Simd128Register GetSimd128Register() const {
433 DCHECK(IsSimd128Register()); 445 DCHECK(IsSimd128Register());
434 return Simd128Register::from_code(static_cast<int64_t>(value_) >> 446 return Simd128Register::from_code(static_cast<int64_t>(value_) >>
435 IndexField::kShift); 447 IndexField::kShift);
436 } 448 }
437 449
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 LocationOperand::cast(this)->location_kind() == 531 LocationOperand::cast(this)->location_kind() ==
520 LocationOperand::REGISTER; 532 LocationOperand::REGISTER;
521 } 533 }
522 534
523 535
524 bool InstructionOperand::IsRegister() const { 536 bool InstructionOperand::IsRegister() const {
525 return IsAnyRegister() && 537 return IsAnyRegister() &&
526 !IsFloatingPoint(LocationOperand::cast(this)->representation()); 538 !IsFloatingPoint(LocationOperand::cast(this)->representation());
527 } 539 }
528 540
541 bool InstructionOperand::IsFPRegister() const {
542 return IsAnyRegister() &&
543 IsFloatingPoint(LocationOperand::cast(this)->representation());
544 }
545
546 bool InstructionOperand::IsFloatRegister() const {
547 return IsAnyRegister() &&
548 LocationOperand::cast(this)->representation() ==
549 MachineRepresentation::kFloat32;
550 }
551
529 bool InstructionOperand::IsDoubleRegister() const { 552 bool InstructionOperand::IsDoubleRegister() const {
530 return IsAnyRegister() && 553 return IsAnyRegister() &&
531 IsFloatingPoint(LocationOperand::cast(this)->representation()); 554 LocationOperand::cast(this)->representation() ==
555 MachineRepresentation::kFloat64;
532 } 556 }
533 557
534 bool InstructionOperand::IsSimd128Register() const { 558 bool InstructionOperand::IsSimd128Register() const {
535 return IsAnyRegister() && 559 return IsAnyRegister() &&
536 LocationOperand::cast(this)->representation() == 560 LocationOperand::cast(this)->representation() ==
537 MachineRepresentation::kSimd128; 561 MachineRepresentation::kSimd128;
538 } 562 }
539 563
540 bool InstructionOperand::IsStackSlot() const { 564 bool InstructionOperand::IsStackSlot() const {
541 return (IsAllocated() || IsExplicit()) && 565 return (IsAllocated() || IsExplicit()) &&
542 LocationOperand::cast(this)->location_kind() == 566 LocationOperand::cast(this)->location_kind() ==
543 LocationOperand::STACK_SLOT && 567 LocationOperand::STACK_SLOT &&
544 !IsFloatingPoint(LocationOperand::cast(this)->representation()); 568 !IsFloatingPoint(LocationOperand::cast(this)->representation());
545 } 569 }
546 570
571 bool InstructionOperand::IsFPStackSlot() const {
572 return (IsAllocated() || IsExplicit()) &&
573 LocationOperand::cast(this)->location_kind() ==
574 LocationOperand::STACK_SLOT &&
575 IsFloatingPoint(LocationOperand::cast(this)->representation());
576 }
577
578 bool InstructionOperand::IsFloatStackSlot() const {
579 return (IsAllocated() || IsExplicit()) &&
580 LocationOperand::cast(this)->location_kind() ==
581 LocationOperand::STACK_SLOT &&
582 LocationOperand::cast(this)->representation() ==
583 MachineRepresentation::kFloat32;
584 }
585
547 bool InstructionOperand::IsDoubleStackSlot() const { 586 bool InstructionOperand::IsDoubleStackSlot() const {
548 return (IsAllocated() || IsExplicit()) && 587 return (IsAllocated() || IsExplicit()) &&
549 LocationOperand::cast(this)->location_kind() == 588 LocationOperand::cast(this)->location_kind() ==
550 LocationOperand::STACK_SLOT && 589 LocationOperand::STACK_SLOT &&
551 IsFloatingPoint(LocationOperand::cast(this)->representation()); 590 LocationOperand::cast(this)->representation() ==
591 MachineRepresentation::kFloat64;
552 } 592 }
553 593
554 bool InstructionOperand::IsSimd128StackSlot() const { 594 bool InstructionOperand::IsSimd128StackSlot() const {
555 return (IsAllocated() || IsExplicit()) && 595 return (IsAllocated() || IsExplicit()) &&
556 LocationOperand::cast(this)->location_kind() == 596 LocationOperand::cast(this)->location_kind() ==
557 LocationOperand::STACK_SLOT && 597 LocationOperand::STACK_SLOT &&
558 LocationOperand::cast(this)->representation() == 598 LocationOperand::cast(this)->representation() ==
559 MachineRepresentation::kSimd128; 599 MachineRepresentation::kSimd128;
560 } 600 }
561 601
(...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 1467
1428 1468
1429 std::ostream& operator<<(std::ostream& os, 1469 std::ostream& operator<<(std::ostream& os,
1430 const PrintableInstructionSequence& code); 1470 const PrintableInstructionSequence& code);
1431 1471
1432 } // namespace compiler 1472 } // namespace compiler
1433 } // namespace internal 1473 } // namespace internal
1434 } // namespace v8 1474 } // namespace v8
1435 1475
1436 #endif // V8_COMPILER_INSTRUCTION_H_ 1476 #endif // V8_COMPILER_INSTRUCTION_H_
OLDNEW
« no previous file with comments | « src/compiler/ia32/code-generator-ia32.cc ('k') | src/compiler/instruction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698