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

Side by Side Diff: src/compiler/instruction-selector-impl.h

Issue 1360603003: [arm64] Implement Float(32|64)(Min|Max) using fcsel. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 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
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_SELECTOR_IMPL_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_
6 #define V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_ 6 #define V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_
7 7
8 #include "src/compiler/instruction.h" 8 #include "src/compiler/instruction.h"
9 #include "src/compiler/instruction-selector.h" 9 #include "src/compiler/instruction-selector.h"
10 #include "src/compiler/linkage.h" 10 #include "src/compiler/linkage.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 BasicBlock* false_block) 252 BasicBlock* false_block)
253 : mode_(kFlags_branch), 253 : mode_(kFlags_branch),
254 condition_(condition), 254 condition_(condition),
255 true_block_(true_block), 255 true_block_(true_block),
256 false_block_(false_block) { 256 false_block_(false_block) {
257 DCHECK_NOT_NULL(true_block); 257 DCHECK_NOT_NULL(true_block);
258 DCHECK_NOT_NULL(false_block); 258 DCHECK_NOT_NULL(false_block);
259 } 259 }
260 260
261 // Creates a new flags continuation from the given condition and result node. 261 // Creates a new flags continuation from the given condition and result node.
262 FlagsContinuation(FlagsCondition condition, Node* result) 262 FlagsContinuation(FlagsCondition condition, Node* result,
263 : mode_(kFlags_set), condition_(condition), result_(result) { 263 FlagsMode mode = kFlags_set)
264 : mode_(mode), condition_(condition), result_(result) {
264 DCHECK_NOT_NULL(result); 265 DCHECK_NOT_NULL(result);
265 } 266 }
266 267
267 bool IsNone() const { return mode_ == kFlags_none; } 268 bool IsNone() const { return mode_ == kFlags_none; }
268 bool IsBranch() const { return mode_ == kFlags_branch; } 269 bool IsBranch() const { return mode_ == kFlags_branch; }
269 bool IsSet() const { return mode_ == kFlags_set; } 270 bool IsSet() const { return mode_ == kFlags_set; }
271 bool IsSelect() const { return mode_ == kFlags_select; }
270 FlagsCondition condition() const { 272 FlagsCondition condition() const {
271 DCHECK(!IsNone()); 273 DCHECK(!IsNone());
272 return condition_; 274 return condition_;
273 } 275 }
274 Node* result() const { 276 Node* result() const {
275 DCHECK(IsSet()); 277 DCHECK(IsSet() || IsSelect());
276 return result_; 278 return result_;
277 } 279 }
278 BasicBlock* true_block() const { 280 BasicBlock* true_block() const {
279 DCHECK(IsBranch()); 281 DCHECK(IsBranch());
280 return true_block_; 282 return true_block_;
281 } 283 }
282 BasicBlock* false_block() const { 284 BasicBlock* false_block() const {
283 DCHECK(IsBranch()); 285 DCHECK(IsBranch());
284 return false_block_; 286 return false_block_;
285 } 287 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 opcode |= FlagsModeField::encode(mode_); 341 opcode |= FlagsModeField::encode(mode_);
340 if (mode_ != kFlags_none) { 342 if (mode_ != kFlags_none) {
341 opcode |= FlagsConditionField::encode(condition_); 343 opcode |= FlagsConditionField::encode(condition_);
342 } 344 }
343 return opcode; 345 return opcode;
344 } 346 }
345 347
346 private: 348 private:
347 FlagsMode mode_; 349 FlagsMode mode_;
348 FlagsCondition condition_; 350 FlagsCondition condition_;
349 Node* result_; // Only valid if mode_ == kFlags_set. 351 Node* result_; // Valid if mode_ == kFlags_set or kFlags_select.
350 BasicBlock* true_block_; // Only valid if mode_ == kFlags_branch. 352 BasicBlock* true_block_; // Valid if mode_ == kFlags_branch.
351 BasicBlock* false_block_; // Only valid if mode_ == kFlags_branch. 353 BasicBlock* false_block_; // Valid if mode_ == kFlags_branch.
352 }; 354 };
353 355
354 356
355 // An internal helper class for generating the operands to calls. 357 // An internal helper class for generating the operands to calls.
356 // TODO(bmeurer): Get rid of the CallBuffer business and make 358 // TODO(bmeurer): Get rid of the CallBuffer business and make
357 // InstructionSelector::VisitCall platform independent instead. 359 // InstructionSelector::VisitCall platform independent instead.
358 struct CallBuffer { 360 struct CallBuffer {
359 CallBuffer(Zone* zone, const CallDescriptor* descriptor, 361 CallBuffer(Zone* zone, const CallDescriptor* descriptor,
360 FrameStateDescriptor* frame_state); 362 FrameStateDescriptor* frame_state);
361 363
(...skipping 14 matching lines...) Expand all
376 : (frame_state_descriptor->GetTotalSize() + 378 : (frame_state_descriptor->GetTotalSize() +
377 1); // Include deopt id. 379 1); // Include deopt id.
378 } 380 }
379 }; 381 };
380 382
381 } // namespace compiler 383 } // namespace compiler
382 } // namespace internal 384 } // namespace internal
383 } // namespace v8 385 } // namespace v8
384 386
385 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_ 387 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698