| 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 |