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/base/bits.h" | 5 #include "src/base/bits.h" |
6 #include "src/compiler/instruction-selector-impl.h" | 6 #include "src/compiler/instruction-selector-impl.h" |
7 #include "src/compiler/node-matchers.h" | 7 #include "src/compiler/node-matchers.h" |
8 #include "src/compiler/node-properties.h" | 8 #include "src/compiler/node-properties.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 VisitRRO(this, kMips64Dsar, node); | 298 VisitRRO(this, kMips64Dsar, node); |
299 } | 299 } |
300 | 300 |
301 | 301 |
302 void InstructionSelector::VisitWord32Ror(Node* node) { | 302 void InstructionSelector::VisitWord32Ror(Node* node) { |
303 VisitRRO(this, kMips64Ror, node); | 303 VisitRRO(this, kMips64Ror, node); |
304 } | 304 } |
305 | 305 |
306 | 306 |
307 void InstructionSelector::VisitWord32Clz(Node* node) { | 307 void InstructionSelector::VisitWord32Clz(Node* node) { |
308 Mips64OperandGenerator g(this); | 308 VisitRR(this, kMips64Clz, node); |
309 Emit(kMips64Clz, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | |
310 } | 309 } |
311 | 310 |
312 | 311 |
313 void InstructionSelector::VisitWord64Ror(Node* node) { | 312 void InstructionSelector::VisitWord64Ror(Node* node) { |
314 VisitRRO(this, kMips64Dror, node); | 313 VisitRRO(this, kMips64Dror, node); |
315 } | 314 } |
316 | 315 |
317 | 316 |
318 void InstructionSelector::VisitInt32Add(Node* node) { | 317 void InstructionSelector::VisitInt32Add(Node* node) { |
319 Mips64OperandGenerator g(this); | 318 Mips64OperandGenerator g(this); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 if (base::bits::IsPowerOfTwo32(value + 1)) { | 361 if (base::bits::IsPowerOfTwo32(value + 1)) { |
363 InstructionOperand temp = g.TempRegister(); | 362 InstructionOperand temp = g.TempRegister(); |
364 Emit(kMips64Shl | AddressingModeField::encode(kMode_None), temp, | 363 Emit(kMips64Shl | AddressingModeField::encode(kMode_None), temp, |
365 g.UseRegister(m.left().node()), | 364 g.UseRegister(m.left().node()), |
366 g.TempImmediate(WhichPowerOf2(value + 1))); | 365 g.TempImmediate(WhichPowerOf2(value + 1))); |
367 Emit(kMips64Sub | AddressingModeField::encode(kMode_None), | 366 Emit(kMips64Sub | AddressingModeField::encode(kMode_None), |
368 g.DefineAsRegister(node), temp, g.UseRegister(m.left().node())); | 367 g.DefineAsRegister(node), temp, g.UseRegister(m.left().node())); |
369 return; | 368 return; |
370 } | 369 } |
371 } | 370 } |
372 Emit(kMips64Mul, g.DefineAsRegister(node), g.UseRegister(m.left().node()), | 371 VisitRRR(this, kMips64Mul, node); |
373 g.UseRegister(m.right().node())); | |
374 } | 372 } |
375 | 373 |
376 | 374 |
377 void InstructionSelector::VisitInt32MulHigh(Node* node) { | 375 void InstructionSelector::VisitInt32MulHigh(Node* node) { |
378 Mips64OperandGenerator g(this); | 376 VisitRRR(this, kMips64MulHigh, node); |
379 Emit(kMips64MulHigh, g.DefineAsRegister(node), | |
380 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1))); | |
381 } | 377 } |
382 | 378 |
383 | 379 |
384 void InstructionSelector::VisitUint32MulHigh(Node* node) { | 380 void InstructionSelector::VisitUint32MulHigh(Node* node) { |
385 Mips64OperandGenerator g(this); | 381 Mips64OperandGenerator g(this); |
386 InstructionOperand const dmul_operand = g.TempRegister(); | 382 InstructionOperand const dmul_operand = g.TempRegister(); |
387 Emit(kMips64MulHighU, dmul_operand, g.UseRegister(node->InputAt(0)), | 383 Emit(kMips64MulHighU, dmul_operand, g.UseRegister(node->InputAt(0)), |
388 g.UseRegister(node->InputAt(1))); | 384 g.UseRegister(node->InputAt(1))); |
389 Emit(kMips64Ext, g.DefineAsRegister(node), dmul_operand, g.TempImmediate(0), | 385 Emit(kMips64Ext, g.DefineAsRegister(node), dmul_operand, g.TempImmediate(0), |
390 g.TempImmediate(32)); | 386 g.TempImmediate(32)); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 | 481 |
486 void InstructionSelector::VisitUint64Mod(Node* node) { | 482 void InstructionSelector::VisitUint64Mod(Node* node) { |
487 Mips64OperandGenerator g(this); | 483 Mips64OperandGenerator g(this); |
488 Int64BinopMatcher m(node); | 484 Int64BinopMatcher m(node); |
489 Emit(kMips64DmodU, g.DefineAsRegister(node), g.UseRegister(m.left().node()), | 485 Emit(kMips64DmodU, g.DefineAsRegister(node), g.UseRegister(m.left().node()), |
490 g.UseRegister(m.right().node())); | 486 g.UseRegister(m.right().node())); |
491 } | 487 } |
492 | 488 |
493 | 489 |
494 void InstructionSelector::VisitChangeFloat32ToFloat64(Node* node) { | 490 void InstructionSelector::VisitChangeFloat32ToFloat64(Node* node) { |
495 Mips64OperandGenerator g(this); | 491 VisitRR(this, kMips64CvtDS, node); |
496 Emit(kMips64CvtDS, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | |
497 } | 492 } |
498 | 493 |
499 | 494 |
500 void InstructionSelector::VisitChangeInt32ToFloat64(Node* node) { | 495 void InstructionSelector::VisitChangeInt32ToFloat64(Node* node) { |
501 Mips64OperandGenerator g(this); | 496 VisitRR(this, kMips64CvtDW, node); |
502 Emit(kMips64CvtDW, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | |
503 } | 497 } |
504 | 498 |
505 | 499 |
506 void InstructionSelector::VisitChangeUint32ToFloat64(Node* node) { | 500 void InstructionSelector::VisitChangeUint32ToFloat64(Node* node) { |
507 Mips64OperandGenerator g(this); | 501 VisitRR(this, kMips64CvtDUw, node); |
508 Emit(kMips64CvtDUw, g.DefineAsRegister(node), | |
509 g.UseRegister(node->InputAt(0))); | |
510 } | 502 } |
511 | 503 |
512 | 504 |
513 void InstructionSelector::VisitChangeFloat64ToInt32(Node* node) { | 505 void InstructionSelector::VisitChangeFloat64ToInt32(Node* node) { |
514 Mips64OperandGenerator g(this); | 506 VisitRR(this, kMips64TruncWD, node); |
515 Emit(kMips64TruncWD, g.DefineAsRegister(node), | |
516 g.UseRegister(node->InputAt(0))); | |
517 } | 507 } |
518 | 508 |
519 | 509 |
520 void InstructionSelector::VisitChangeFloat64ToUint32(Node* node) { | 510 void InstructionSelector::VisitChangeFloat64ToUint32(Node* node) { |
521 Mips64OperandGenerator g(this); | 511 VisitRR(this, kMips64TruncUwD, node); |
522 Emit(kMips64TruncUwD, g.DefineAsRegister(node), | |
523 g.UseRegister(node->InputAt(0))); | |
524 } | 512 } |
525 | 513 |
526 | 514 |
527 void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { | 515 void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { |
528 Mips64OperandGenerator g(this); | 516 Mips64OperandGenerator g(this); |
529 Emit(kMips64Shl, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)), | 517 Emit(kMips64Shl, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)), |
530 g.TempImmediate(0)); | 518 g.TempImmediate(0)); |
531 } | 519 } |
532 | 520 |
533 | 521 |
534 void InstructionSelector::VisitChangeUint32ToUint64(Node* node) { | 522 void InstructionSelector::VisitChangeUint32ToUint64(Node* node) { |
535 Mips64OperandGenerator g(this); | 523 Mips64OperandGenerator g(this); |
536 Emit(kMips64Dext, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)), | 524 Emit(kMips64Dext, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)), |
537 g.TempImmediate(0), g.TempImmediate(32)); | 525 g.TempImmediate(0), g.TempImmediate(32)); |
538 } | 526 } |
539 | 527 |
540 | 528 |
541 void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) { | 529 void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) { |
542 Mips64OperandGenerator g(this); | 530 Mips64OperandGenerator g(this); |
543 Emit(kMips64Ext, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)), | 531 Emit(kMips64Ext, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0)), |
544 g.TempImmediate(0), g.TempImmediate(32)); | 532 g.TempImmediate(0), g.TempImmediate(32)); |
545 } | 533 } |
546 | 534 |
547 | 535 |
548 void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) { | 536 void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) { |
549 Mips64OperandGenerator g(this); | 537 VisitRR(this, kMips64CvtSD, node); |
550 Emit(kMips64CvtSD, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | |
551 } | 538 } |
552 | 539 |
553 | 540 |
| 541 void InstructionSelector::VisitFloat32Add(Node* node) { |
| 542 VisitRRR(this, kMips64AddS, node); |
| 543 } |
| 544 |
| 545 |
554 void InstructionSelector::VisitFloat64Add(Node* node) { | 546 void InstructionSelector::VisitFloat64Add(Node* node) { |
555 VisitRRR(this, kMips64AddD, node); | 547 VisitRRR(this, kMips64AddD, node); |
556 } | 548 } |
557 | 549 |
558 | 550 |
| 551 void InstructionSelector::VisitFloat32Sub(Node* node) { |
| 552 VisitRRR(this, kMips64SubS, node); |
| 553 } |
| 554 |
| 555 |
559 void InstructionSelector::VisitFloat64Sub(Node* node) { | 556 void InstructionSelector::VisitFloat64Sub(Node* node) { |
560 Mips64OperandGenerator g(this); | 557 Mips64OperandGenerator g(this); |
561 Float64BinopMatcher m(node); | 558 Float64BinopMatcher m(node); |
562 if (m.left().IsMinusZero() && m.right().IsFloat64RoundDown() && | 559 if (m.left().IsMinusZero() && m.right().IsFloat64RoundDown() && |
563 CanCover(m.node(), m.right().node())) { | 560 CanCover(m.node(), m.right().node())) { |
564 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && | 561 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && |
565 CanCover(m.right().node(), m.right().InputAt(0))) { | 562 CanCover(m.right().node(), m.right().InputAt(0))) { |
566 Float64BinopMatcher mright0(m.right().InputAt(0)); | 563 Float64BinopMatcher mright0(m.right().InputAt(0)); |
567 if (mright0.left().IsMinusZero()) { | 564 if (mright0.left().IsMinusZero()) { |
568 Emit(kMips64Float64RoundUp, g.DefineAsRegister(node), | 565 Emit(kMips64Float64RoundUp, g.DefineAsRegister(node), |
569 g.UseRegister(mright0.right().node())); | 566 g.UseRegister(mright0.right().node())); |
570 return; | 567 return; |
571 } | 568 } |
572 } | 569 } |
573 } | 570 } |
574 VisitRRR(this, kMips64SubD, node); | 571 VisitRRR(this, kMips64SubD, node); |
575 } | 572 } |
576 | 573 |
577 | 574 |
| 575 void InstructionSelector::VisitFloat32Mul(Node* node) { |
| 576 VisitRRR(this, kMips64MulS, node); |
| 577 } |
| 578 |
| 579 |
578 void InstructionSelector::VisitFloat64Mul(Node* node) { | 580 void InstructionSelector::VisitFloat64Mul(Node* node) { |
579 VisitRRR(this, kMips64MulD, node); | 581 VisitRRR(this, kMips64MulD, node); |
580 } | 582 } |
581 | 583 |
582 | 584 |
| 585 void InstructionSelector::VisitFloat32Div(Node* node) { |
| 586 VisitRRR(this, kMips64DivS, node); |
| 587 } |
| 588 |
| 589 |
583 void InstructionSelector::VisitFloat64Div(Node* node) { | 590 void InstructionSelector::VisitFloat64Div(Node* node) { |
584 VisitRRR(this, kMips64DivD, node); | 591 VisitRRR(this, kMips64DivD, node); |
585 } | 592 } |
586 | 593 |
587 | 594 |
588 void InstructionSelector::VisitFloat64Mod(Node* node) { | 595 void InstructionSelector::VisitFloat64Mod(Node* node) { |
589 Mips64OperandGenerator g(this); | 596 Mips64OperandGenerator g(this); |
590 Emit(kMips64ModD, g.DefineAsFixed(node, f0), | 597 Emit(kMips64ModD, g.DefineAsFixed(node, f0), |
591 g.UseFixed(node->InputAt(0), f12), | 598 g.UseFixed(node->InputAt(0), f12), |
592 g.UseFixed(node->InputAt(1), f14))->MarkAsCall(); | 599 g.UseFixed(node->InputAt(1), f14))->MarkAsCall(); |
593 } | 600 } |
594 | 601 |
595 | 602 |
| 603 void InstructionSelector::VisitFloat32Max(Node* node) { UNREACHABLE(); } |
| 604 |
| 605 |
596 void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); } | 606 void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); } |
597 | 607 |
598 | 608 |
| 609 void InstructionSelector::VisitFloat32Min(Node* node) { UNREACHABLE(); } |
| 610 |
| 611 |
599 void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); } | 612 void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); } |
600 | 613 |
601 | 614 |
602 void InstructionSelector::VisitFloat64Sqrt(Node* node) { | 615 void InstructionSelector::VisitFloat32Sqrt(Node* node) { |
603 Mips64OperandGenerator g(this); | 616 VisitRR(this, kMips64SqrtS, node); |
604 Emit(kMips64SqrtD, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); | |
605 } | 617 } |
606 | 618 |
607 | 619 |
| 620 void InstructionSelector::VisitFloat64Sqrt(Node* node) { |
| 621 VisitRR(this, kMips64SqrtD, node); |
| 622 } |
| 623 |
| 624 |
608 void InstructionSelector::VisitFloat64RoundDown(Node* node) { | 625 void InstructionSelector::VisitFloat64RoundDown(Node* node) { |
609 VisitRR(this, kMips64Float64RoundDown, node); | 626 VisitRR(this, kMips64Float64RoundDown, node); |
610 } | 627 } |
611 | 628 |
612 | 629 |
613 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { | 630 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { |
614 VisitRR(this, kMips64Float64RoundTruncate, node); | 631 VisitRR(this, kMips64Float64RoundTruncate, node); |
615 } | 632 } |
616 | 633 |
617 | 634 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 if (cont->IsBranch()) { | 795 if (cont->IsBranch()) { |
779 selector->Emit(opcode, g.NoOutput(), left, right, | 796 selector->Emit(opcode, g.NoOutput(), left, right, |
780 g.Label(cont->true_block()), g.Label(cont->false_block())); | 797 g.Label(cont->true_block()), g.Label(cont->false_block())); |
781 } else { | 798 } else { |
782 DCHECK(cont->IsSet()); | 799 DCHECK(cont->IsSet()); |
783 selector->Emit(opcode, g.DefineAsRegister(cont->result()), left, right); | 800 selector->Emit(opcode, g.DefineAsRegister(cont->result()), left, right); |
784 } | 801 } |
785 } | 802 } |
786 | 803 |
787 | 804 |
788 // Shared routine for multiple float compare operations. | 805 // Shared routine for multiple float32 compare operations. |
| 806 void VisitFloat32Compare(InstructionSelector* selector, Node* node, |
| 807 FlagsContinuation* cont) { |
| 808 Mips64OperandGenerator g(selector); |
| 809 Node* left = node->InputAt(0); |
| 810 Node* right = node->InputAt(1); |
| 811 VisitCompare(selector, kMips64CmpS, g.UseRegister(left), g.UseRegister(right), |
| 812 cont); |
| 813 } |
| 814 |
| 815 |
| 816 // Shared routine for multiple float64 compare operations. |
789 void VisitFloat64Compare(InstructionSelector* selector, Node* node, | 817 void VisitFloat64Compare(InstructionSelector* selector, Node* node, |
790 FlagsContinuation* cont) { | 818 FlagsContinuation* cont) { |
791 Mips64OperandGenerator g(selector); | 819 Mips64OperandGenerator g(selector); |
792 Node* left = node->InputAt(0); | 820 Node* left = node->InputAt(0); |
793 Node* right = node->InputAt(1); | 821 Node* right = node->InputAt(1); |
794 VisitCompare(selector, kMips64CmpD, g.UseRegister(left), g.UseRegister(right), | 822 VisitCompare(selector, kMips64CmpD, g.UseRegister(left), g.UseRegister(right), |
795 cont); | 823 cont); |
796 } | 824 } |
797 | 825 |
798 | 826 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 } | 921 } |
894 case IrOpcode::kInt64LessThan: | 922 case IrOpcode::kInt64LessThan: |
895 cont->OverwriteAndNegateIfEqual(kSignedLessThan); | 923 cont->OverwriteAndNegateIfEqual(kSignedLessThan); |
896 return VisitWord64Compare(selector, value, cont); | 924 return VisitWord64Compare(selector, value, cont); |
897 case IrOpcode::kInt64LessThanOrEqual: | 925 case IrOpcode::kInt64LessThanOrEqual: |
898 cont->OverwriteAndNegateIfEqual(kSignedLessThanOrEqual); | 926 cont->OverwriteAndNegateIfEqual(kSignedLessThanOrEqual); |
899 return VisitWord64Compare(selector, value, cont); | 927 return VisitWord64Compare(selector, value, cont); |
900 case IrOpcode::kUint64LessThan: | 928 case IrOpcode::kUint64LessThan: |
901 cont->OverwriteAndNegateIfEqual(kUnsignedLessThan); | 929 cont->OverwriteAndNegateIfEqual(kUnsignedLessThan); |
902 return VisitWord64Compare(selector, value, cont); | 930 return VisitWord64Compare(selector, value, cont); |
| 931 case IrOpcode::kFloat32Equal: |
| 932 cont->OverwriteAndNegateIfEqual(kEqual); |
| 933 return VisitFloat32Compare(selector, value, cont); |
| 934 case IrOpcode::kFloat32LessThan: |
| 935 cont->OverwriteAndNegateIfEqual(kUnsignedLessThan); |
| 936 return VisitFloat32Compare(selector, value, cont); |
| 937 case IrOpcode::kFloat32LessThanOrEqual: |
| 938 cont->OverwriteAndNegateIfEqual(kUnsignedLessThanOrEqual); |
| 939 return VisitFloat32Compare(selector, value, cont); |
903 case IrOpcode::kFloat64Equal: | 940 case IrOpcode::kFloat64Equal: |
904 cont->OverwriteAndNegateIfEqual(kEqual); | 941 cont->OverwriteAndNegateIfEqual(kEqual); |
905 return VisitFloat64Compare(selector, value, cont); | 942 return VisitFloat64Compare(selector, value, cont); |
906 case IrOpcode::kFloat64LessThan: | 943 case IrOpcode::kFloat64LessThan: |
907 cont->OverwriteAndNegateIfEqual(kUnsignedLessThan); | 944 cont->OverwriteAndNegateIfEqual(kUnsignedLessThan); |
908 return VisitFloat64Compare(selector, value, cont); | 945 return VisitFloat64Compare(selector, value, cont); |
909 case IrOpcode::kFloat64LessThanOrEqual: | 946 case IrOpcode::kFloat64LessThanOrEqual: |
910 cont->OverwriteAndNegateIfEqual(kUnsignedLessThanOrEqual); | 947 cont->OverwriteAndNegateIfEqual(kUnsignedLessThanOrEqual); |
911 return VisitFloat64Compare(selector, value, cont); | 948 return VisitFloat64Compare(selector, value, cont); |
912 case IrOpcode::kProjection: | 949 case IrOpcode::kProjection: |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1060 VisitWord64Compare(this, node, &cont); | 1097 VisitWord64Compare(this, node, &cont); |
1061 } | 1098 } |
1062 | 1099 |
1063 | 1100 |
1064 void InstructionSelector::VisitUint64LessThan(Node* node) { | 1101 void InstructionSelector::VisitUint64LessThan(Node* node) { |
1065 FlagsContinuation cont(kUnsignedLessThan, node); | 1102 FlagsContinuation cont(kUnsignedLessThan, node); |
1066 VisitWord64Compare(this, node, &cont); | 1103 VisitWord64Compare(this, node, &cont); |
1067 } | 1104 } |
1068 | 1105 |
1069 | 1106 |
| 1107 void InstructionSelector::VisitFloat32Equal(Node* node) { |
| 1108 FlagsContinuation cont(kEqual, node); |
| 1109 VisitFloat32Compare(this, node, &cont); |
| 1110 } |
| 1111 |
| 1112 |
| 1113 void InstructionSelector::VisitFloat32LessThan(Node* node) { |
| 1114 FlagsContinuation cont(kUnsignedLessThan, node); |
| 1115 VisitFloat32Compare(this, node, &cont); |
| 1116 } |
| 1117 |
| 1118 |
| 1119 void InstructionSelector::VisitFloat32LessThanOrEqual(Node* node) { |
| 1120 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); |
| 1121 VisitFloat32Compare(this, node, &cont); |
| 1122 } |
| 1123 |
| 1124 |
1070 void InstructionSelector::VisitFloat64Equal(Node* node) { | 1125 void InstructionSelector::VisitFloat64Equal(Node* node) { |
1071 FlagsContinuation cont(kEqual, node); | 1126 FlagsContinuation cont(kEqual, node); |
1072 VisitFloat64Compare(this, node, &cont); | 1127 VisitFloat64Compare(this, node, &cont); |
1073 } | 1128 } |
1074 | 1129 |
1075 | 1130 |
1076 void InstructionSelector::VisitFloat64LessThan(Node* node) { | 1131 void InstructionSelector::VisitFloat64LessThan(Node* node) { |
1077 FlagsContinuation cont(kUnsignedLessThan, node); | 1132 FlagsContinuation cont(kUnsignedLessThan, node); |
1078 VisitFloat64Compare(this, node, &cont); | 1133 VisitFloat64Compare(this, node, &cont); |
1079 } | 1134 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1120 // static | 1175 // static |
1121 MachineOperatorBuilder::Flags | 1176 MachineOperatorBuilder::Flags |
1122 InstructionSelector::SupportedMachineOperatorFlags() { | 1177 InstructionSelector::SupportedMachineOperatorFlags() { |
1123 return MachineOperatorBuilder::kFloat64RoundDown | | 1178 return MachineOperatorBuilder::kFloat64RoundDown | |
1124 MachineOperatorBuilder::kFloat64RoundTruncate; | 1179 MachineOperatorBuilder::kFloat64RoundTruncate; |
1125 } | 1180 } |
1126 | 1181 |
1127 } // namespace compiler | 1182 } // namespace compiler |
1128 } // namespace internal | 1183 } // namespace internal |
1129 } // namespace v8 | 1184 } // namespace v8 |
OLD | NEW |