| OLD | NEW |
| 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 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
| 6 | 6 |
| 7 #include "src/compiler/code-generator-impl.h" | 7 #include "src/compiler/code-generator-impl.h" |
| 8 #include "src/compiler/gap-resolver.h" | 8 #include "src/compiler/gap-resolver.h" |
| 9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
| 10 #include "src/ppc/macro-assembler-ppc.h" | 10 #include "src/ppc/macro-assembler-ppc.h" |
| 11 #include "src/scopes.h" | 11 #include "src/scopes.h" |
| 12 | 12 |
| 13 namespace v8 { | 13 namespace v8 { |
| 14 namespace internal { | 14 namespace internal { |
| 15 namespace compiler { | 15 namespace compiler { |
| 16 | 16 |
| 17 #define __ masm()-> | 17 #define __ masm()-> |
| 18 | 18 |
| 19 | 19 |
| 20 #define kScratchReg r11 | 20 #define kScratchReg r11 |
| 21 | 21 |
| 22 | 22 |
| 23 // Adds PPC-specific methods to convert InstructionOperands. | 23 // Adds PPC-specific methods to convert InstructionOperands. |
| 24 class PPCOperandConverter FINAL : public InstructionOperandConverter { | 24 class PPCOperandConverter final : public InstructionOperandConverter { |
| 25 public: | 25 public: |
| 26 PPCOperandConverter(CodeGenerator* gen, Instruction* instr) | 26 PPCOperandConverter(CodeGenerator* gen, Instruction* instr) |
| 27 : InstructionOperandConverter(gen, instr) {} | 27 : InstructionOperandConverter(gen, instr) {} |
| 28 | 28 |
| 29 RCBit OutputRCBit() const { | 29 RCBit OutputRCBit() const { |
| 30 switch (instr_->flags_mode()) { | 30 switch (instr_->flags_mode()) { |
| 31 case kFlags_branch: | 31 case kFlags_branch: |
| 32 case kFlags_set: | 32 case kFlags_set: |
| 33 return SetRC; | 33 return SetRC; |
| 34 case kFlags_none: | 34 case kFlags_none: |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 }; | 110 }; |
| 111 | 111 |
| 112 | 112 |
| 113 static inline bool HasRegisterInput(Instruction* instr, size_t index) { | 113 static inline bool HasRegisterInput(Instruction* instr, size_t index) { |
| 114 return instr->InputAt(index)->IsRegister(); | 114 return instr->InputAt(index)->IsRegister(); |
| 115 } | 115 } |
| 116 | 116 |
| 117 | 117 |
| 118 namespace { | 118 namespace { |
| 119 | 119 |
| 120 class OutOfLineLoadNAN32 FINAL : public OutOfLineCode { | 120 class OutOfLineLoadNAN32 final : public OutOfLineCode { |
| 121 public: | 121 public: |
| 122 OutOfLineLoadNAN32(CodeGenerator* gen, DoubleRegister result) | 122 OutOfLineLoadNAN32(CodeGenerator* gen, DoubleRegister result) |
| 123 : OutOfLineCode(gen), result_(result) {} | 123 : OutOfLineCode(gen), result_(result) {} |
| 124 | 124 |
| 125 void Generate() FINAL { | 125 void Generate() final { |
| 126 __ LoadDoubleLiteral(result_, std::numeric_limits<float>::quiet_NaN(), | 126 __ LoadDoubleLiteral(result_, std::numeric_limits<float>::quiet_NaN(), |
| 127 kScratchReg); | 127 kScratchReg); |
| 128 } | 128 } |
| 129 | 129 |
| 130 private: | 130 private: |
| 131 DoubleRegister const result_; | 131 DoubleRegister const result_; |
| 132 }; | 132 }; |
| 133 | 133 |
| 134 | 134 |
| 135 class OutOfLineLoadNAN64 FINAL : public OutOfLineCode { | 135 class OutOfLineLoadNAN64 final : public OutOfLineCode { |
| 136 public: | 136 public: |
| 137 OutOfLineLoadNAN64(CodeGenerator* gen, DoubleRegister result) | 137 OutOfLineLoadNAN64(CodeGenerator* gen, DoubleRegister result) |
| 138 : OutOfLineCode(gen), result_(result) {} | 138 : OutOfLineCode(gen), result_(result) {} |
| 139 | 139 |
| 140 void Generate() FINAL { | 140 void Generate() final { |
| 141 __ LoadDoubleLiteral(result_, std::numeric_limits<double>::quiet_NaN(), | 141 __ LoadDoubleLiteral(result_, std::numeric_limits<double>::quiet_NaN(), |
| 142 kScratchReg); | 142 kScratchReg); |
| 143 } | 143 } |
| 144 | 144 |
| 145 private: | 145 private: |
| 146 DoubleRegister const result_; | 146 DoubleRegister const result_; |
| 147 }; | 147 }; |
| 148 | 148 |
| 149 | 149 |
| 150 class OutOfLineLoadZero FINAL : public OutOfLineCode { | 150 class OutOfLineLoadZero final : public OutOfLineCode { |
| 151 public: | 151 public: |
| 152 OutOfLineLoadZero(CodeGenerator* gen, Register result) | 152 OutOfLineLoadZero(CodeGenerator* gen, Register result) |
| 153 : OutOfLineCode(gen), result_(result) {} | 153 : OutOfLineCode(gen), result_(result) {} |
| 154 | 154 |
| 155 void Generate() FINAL { __ li(result_, Operand::Zero()); } | 155 void Generate() final { __ li(result_, Operand::Zero()); } |
| 156 | 156 |
| 157 private: | 157 private: |
| 158 Register const result_; | 158 Register const result_; |
| 159 }; | 159 }; |
| 160 | 160 |
| 161 | 161 |
| 162 Condition FlagsConditionToCondition(FlagsCondition condition) { | 162 Condition FlagsConditionToCondition(FlagsCondition condition) { |
| 163 switch (condition) { | 163 switch (condition) { |
| 164 case kEqual: | 164 case kEqual: |
| 165 return eq; | 165 return eq; |
| (...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1501 } | 1501 } |
| 1502 } | 1502 } |
| 1503 MarkLazyDeoptSite(); | 1503 MarkLazyDeoptSite(); |
| 1504 } | 1504 } |
| 1505 | 1505 |
| 1506 #undef __ | 1506 #undef __ |
| 1507 | 1507 |
| 1508 } // namespace compiler | 1508 } // namespace compiler |
| 1509 } // namespace internal | 1509 } // namespace internal |
| 1510 } // namespace v8 | 1510 } // namespace v8 |
| OLD | NEW |