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 <functional> | 5 #include <functional> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "test/cctest/cctest.h" | 8 #include "test/cctest/cctest.h" |
9 #include "test/cctest/compiler/codegen-tester.h" | 9 #include "test/cctest/compiler/codegen-tester.h" |
10 #include "test/cctest/compiler/value-helper.h" | 10 #include "test/cctest/compiler/value-helper.h" |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 | 566 |
567 | 567 |
568 TEST(RunInt32AddAndWord32SarP) { | 568 TEST(RunInt32AddAndWord32SarP) { |
569 { | 569 { |
570 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 570 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
571 kMachineWord32); | 571 kMachineWord32); |
572 m.Return(m.Int32Add(m.Parameter(0), | 572 m.Return(m.Int32Add(m.Parameter(0), |
573 m.Word32Sar(m.Parameter(1), m.Parameter(2)))); | 573 m.Word32Sar(m.Parameter(1), m.Parameter(2)))); |
574 FOR_UINT32_INPUTS(i) { | 574 FOR_UINT32_INPUTS(i) { |
575 FOR_INT32_INPUTS(j) { | 575 FOR_INT32_INPUTS(j) { |
576 FOR_UINT32_INPUTS(k) { | 576 FOR_UINT32_SHIFTS(shift) { |
577 uint32_t shift = *k & 0x1F; | |
578 // Use uint32_t because signed overflow is UB in C. | 577 // Use uint32_t because signed overflow is UB in C. |
579 int32_t expected = *i + (*j >> shift); | 578 int32_t expected = *i + (*j >> shift); |
580 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 579 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
581 } | 580 } |
582 } | 581 } |
583 } | 582 } |
584 } | 583 } |
585 { | 584 { |
586 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 585 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
587 kMachineWord32); | 586 kMachineWord32); |
588 m.Return(m.Int32Add(m.Word32Sar(m.Parameter(0), m.Parameter(1)), | 587 m.Return(m.Int32Add(m.Word32Sar(m.Parameter(0), m.Parameter(1)), |
589 m.Parameter(2))); | 588 m.Parameter(2))); |
590 FOR_INT32_INPUTS(i) { | 589 FOR_INT32_INPUTS(i) { |
591 FOR_UINT32_INPUTS(j) { | 590 FOR_UINT32_SHIFTS(shift) { |
592 FOR_UINT32_INPUTS(k) { | 591 FOR_UINT32_INPUTS(k) { |
593 uint32_t shift = *j & 0x1F; | |
594 // Use uint32_t because signed overflow is UB in C. | 592 // Use uint32_t because signed overflow is UB in C. |
595 int32_t expected = (*i >> shift) + *k; | 593 int32_t expected = (*i >> shift) + *k; |
596 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 594 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
597 } | 595 } |
598 } | 596 } |
599 } | 597 } |
600 } | 598 } |
601 } | 599 } |
602 | 600 |
603 | 601 |
604 TEST(RunInt32AddAndWord32ShlP) { | 602 TEST(RunInt32AddAndWord32ShlP) { |
605 { | 603 { |
606 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 604 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
607 kMachineWord32); | 605 kMachineWord32); |
608 m.Return(m.Int32Add(m.Parameter(0), | 606 m.Return(m.Int32Add(m.Parameter(0), |
609 m.Word32Shl(m.Parameter(1), m.Parameter(2)))); | 607 m.Word32Shl(m.Parameter(1), m.Parameter(2)))); |
610 FOR_UINT32_INPUTS(i) { | 608 FOR_UINT32_INPUTS(i) { |
611 FOR_INT32_INPUTS(j) { | 609 FOR_INT32_INPUTS(j) { |
612 FOR_UINT32_INPUTS(k) { | 610 FOR_UINT32_SHIFTS(shift) { |
613 uint32_t shift = *k & 0x1F; | |
614 // Use uint32_t because signed overflow is UB in C. | 611 // Use uint32_t because signed overflow is UB in C. |
615 int32_t expected = *i + (*j << shift); | 612 int32_t expected = *i + (*j << shift); |
616 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 613 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
617 } | 614 } |
618 } | 615 } |
619 } | 616 } |
620 } | 617 } |
621 { | 618 { |
622 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 619 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
623 kMachineWord32); | 620 kMachineWord32); |
624 m.Return(m.Int32Add(m.Word32Shl(m.Parameter(0), m.Parameter(1)), | 621 m.Return(m.Int32Add(m.Word32Shl(m.Parameter(0), m.Parameter(1)), |
625 m.Parameter(2))); | 622 m.Parameter(2))); |
626 FOR_INT32_INPUTS(i) { | 623 FOR_INT32_INPUTS(i) { |
627 FOR_UINT32_INPUTS(j) { | 624 FOR_UINT32_SHIFTS(shift) { |
628 FOR_UINT32_INPUTS(k) { | 625 FOR_UINT32_INPUTS(k) { |
629 uint32_t shift = *j & 0x1F; | |
630 // Use uint32_t because signed overflow is UB in C. | 626 // Use uint32_t because signed overflow is UB in C. |
631 int32_t expected = (*i << shift) + *k; | 627 int32_t expected = (*i << shift) + *k; |
632 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 628 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
633 } | 629 } |
634 } | 630 } |
635 } | 631 } |
636 } | 632 } |
637 } | 633 } |
638 | 634 |
639 | 635 |
640 TEST(RunInt32AddAndWord32ShrP) { | 636 TEST(RunInt32AddAndWord32ShrP) { |
641 { | 637 { |
642 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 638 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
643 kMachineWord32); | 639 kMachineWord32); |
644 m.Return(m.Int32Add(m.Parameter(0), | 640 m.Return(m.Int32Add(m.Parameter(0), |
645 m.Word32Shr(m.Parameter(1), m.Parameter(2)))); | 641 m.Word32Shr(m.Parameter(1), m.Parameter(2)))); |
646 FOR_UINT32_INPUTS(i) { | 642 FOR_UINT32_INPUTS(i) { |
647 FOR_UINT32_INPUTS(j) { | 643 FOR_UINT32_INPUTS(j) { |
648 FOR_UINT32_INPUTS(k) { | 644 FOR_UINT32_SHIFTS(shift) { |
649 uint32_t shift = *k & 0x1F; | |
650 // Use uint32_t because signed overflow is UB in C. | 645 // Use uint32_t because signed overflow is UB in C. |
651 int32_t expected = *i + (*j >> shift); | 646 int32_t expected = *i + (*j >> shift); |
652 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 647 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
653 } | 648 } |
654 } | 649 } |
655 } | 650 } |
656 } | 651 } |
657 { | 652 { |
658 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 653 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
659 kMachineWord32); | 654 kMachineWord32); |
660 m.Return(m.Int32Add(m.Word32Shr(m.Parameter(0), m.Parameter(1)), | 655 m.Return(m.Int32Add(m.Word32Shr(m.Parameter(0), m.Parameter(1)), |
661 m.Parameter(2))); | 656 m.Parameter(2))); |
662 FOR_UINT32_INPUTS(i) { | 657 FOR_UINT32_INPUTS(i) { |
663 FOR_UINT32_INPUTS(j) { | 658 FOR_UINT32_SHIFTS(shift) { |
664 FOR_UINT32_INPUTS(k) { | 659 FOR_UINT32_INPUTS(k) { |
665 uint32_t shift = *j & 0x1F; | |
666 // Use uint32_t because signed overflow is UB in C. | 660 // Use uint32_t because signed overflow is UB in C. |
667 int32_t expected = (*i >> shift) + *k; | 661 int32_t expected = (*i >> shift) + *k; |
668 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 662 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
669 } | 663 } |
670 } | 664 } |
671 } | 665 } |
672 } | 666 } |
673 } | 667 } |
674 | 668 |
675 | 669 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 m.NewNode(shops[n], m.Parameter(1), | 751 m.NewNode(shops[n], m.Parameter(1), |
758 m.Parameter(2))), | 752 m.Parameter(2))), |
759 m.Int32Constant(0)), | 753 m.Int32Constant(0)), |
760 &blocka, &blockb); | 754 &blocka, &blockb); |
761 m.Bind(&blocka); | 755 m.Bind(&blocka); |
762 m.Return(m.Int32Constant(constant)); | 756 m.Return(m.Int32Constant(constant)); |
763 m.Bind(&blockb); | 757 m.Bind(&blockb); |
764 m.Return(m.Int32Constant(0 - constant)); | 758 m.Return(m.Int32Constant(0 - constant)); |
765 FOR_UINT32_INPUTS(i) { | 759 FOR_UINT32_INPUTS(i) { |
766 FOR_INT32_INPUTS(j) { | 760 FOR_INT32_INPUTS(j) { |
767 FOR_UINT32_INPUTS(k) { | 761 FOR_UINT32_SHIFTS(shift) { |
768 uint32_t shift = *k & 0x1F; | |
769 int32_t right; | 762 int32_t right; |
770 switch (shops[n]->opcode()) { | 763 switch (shops[n]->opcode()) { |
771 default: | 764 default: |
772 UNREACHABLE(); | 765 UNREACHABLE(); |
773 case IrOpcode::kWord32Sar: | 766 case IrOpcode::kWord32Sar: |
774 right = *j >> shift; | 767 right = *j >> shift; |
775 break; | 768 break; |
776 case IrOpcode::kWord32Shl: | 769 case IrOpcode::kWord32Shl: |
777 right = *j << shift; | 770 right = *j << shift; |
778 break; | 771 break; |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 m.machine()->Word32Shr()}; | 836 m.machine()->Word32Shr()}; |
844 for (size_t n = 0; n < ARRAY_SIZE(shops); n++) { | 837 for (size_t n = 0; n < ARRAY_SIZE(shops); n++) { |
845 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 838 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
846 kMachineWord32); | 839 kMachineWord32); |
847 m.Return(m.Word32Equal( | 840 m.Return(m.Word32Equal( |
848 m.Int32Add(m.Parameter(0), | 841 m.Int32Add(m.Parameter(0), |
849 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), | 842 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), |
850 m.Int32Constant(0))); | 843 m.Int32Constant(0))); |
851 FOR_UINT32_INPUTS(i) { | 844 FOR_UINT32_INPUTS(i) { |
852 FOR_INT32_INPUTS(j) { | 845 FOR_INT32_INPUTS(j) { |
853 FOR_UINT32_INPUTS(k) { | 846 FOR_UINT32_SHIFTS(shift) { |
854 uint32_t shift = *k & 0x1F; | |
855 int32_t right; | 847 int32_t right; |
856 switch (shops[n]->opcode()) { | 848 switch (shops[n]->opcode()) { |
857 default: | 849 default: |
858 UNREACHABLE(); | 850 UNREACHABLE(); |
859 case IrOpcode::kWord32Sar: | 851 case IrOpcode::kWord32Sar: |
860 right = *j >> shift; | 852 right = *j >> shift; |
861 break; | 853 break; |
862 case IrOpcode::kWord32Shl: | 854 case IrOpcode::kWord32Shl: |
863 right = *j << shift; | 855 right = *j << shift; |
864 break; | 856 break; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
919 | 911 |
920 | 912 |
921 TEST(RunInt32SubAndWord32SarP) { | 913 TEST(RunInt32SubAndWord32SarP) { |
922 { | 914 { |
923 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 915 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
924 kMachineWord32); | 916 kMachineWord32); |
925 m.Return(m.Int32Sub(m.Parameter(0), | 917 m.Return(m.Int32Sub(m.Parameter(0), |
926 m.Word32Sar(m.Parameter(1), m.Parameter(2)))); | 918 m.Word32Sar(m.Parameter(1), m.Parameter(2)))); |
927 FOR_UINT32_INPUTS(i) { | 919 FOR_UINT32_INPUTS(i) { |
928 FOR_INT32_INPUTS(j) { | 920 FOR_INT32_INPUTS(j) { |
929 FOR_UINT32_INPUTS(k) { | 921 FOR_UINT32_SHIFTS(shift) { |
930 uint32_t shift = *k & 0x1F; | |
931 // Use uint32_t because signed overflow is UB in C. | 922 // Use uint32_t because signed overflow is UB in C. |
932 int32_t expected = *i - (*j >> shift); | 923 int32_t expected = *i - (*j >> shift); |
933 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 924 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
934 } | 925 } |
935 } | 926 } |
936 } | 927 } |
937 } | 928 } |
938 { | 929 { |
939 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 930 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
940 kMachineWord32); | 931 kMachineWord32); |
941 m.Return(m.Int32Sub(m.Word32Sar(m.Parameter(0), m.Parameter(1)), | 932 m.Return(m.Int32Sub(m.Word32Sar(m.Parameter(0), m.Parameter(1)), |
942 m.Parameter(2))); | 933 m.Parameter(2))); |
943 FOR_INT32_INPUTS(i) { | 934 FOR_INT32_INPUTS(i) { |
944 FOR_UINT32_INPUTS(j) { | 935 FOR_UINT32_SHIFTS(shift) { |
945 FOR_UINT32_INPUTS(k) { | 936 FOR_UINT32_INPUTS(k) { |
946 uint32_t shift = *j & 0x1F; | |
947 // Use uint32_t because signed overflow is UB in C. | 937 // Use uint32_t because signed overflow is UB in C. |
948 int32_t expected = (*i >> shift) - *k; | 938 int32_t expected = (*i >> shift) - *k; |
949 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 939 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
950 } | 940 } |
951 } | 941 } |
952 } | 942 } |
953 } | 943 } |
954 } | 944 } |
955 | 945 |
956 | 946 |
957 TEST(RunInt32SubAndWord32ShlP) { | 947 TEST(RunInt32SubAndWord32ShlP) { |
958 { | 948 { |
959 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 949 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
960 kMachineWord32); | 950 kMachineWord32); |
961 m.Return(m.Int32Sub(m.Parameter(0), | 951 m.Return(m.Int32Sub(m.Parameter(0), |
962 m.Word32Shl(m.Parameter(1), m.Parameter(2)))); | 952 m.Word32Shl(m.Parameter(1), m.Parameter(2)))); |
963 FOR_UINT32_INPUTS(i) { | 953 FOR_UINT32_INPUTS(i) { |
964 FOR_INT32_INPUTS(j) { | 954 FOR_INT32_INPUTS(j) { |
965 FOR_UINT32_INPUTS(k) { | 955 FOR_UINT32_SHIFTS(shift) { |
966 uint32_t shift = *k & 0x1F; | |
967 // Use uint32_t because signed overflow is UB in C. | 956 // Use uint32_t because signed overflow is UB in C. |
968 int32_t expected = *i - (*j << shift); | 957 int32_t expected = *i - (*j << shift); |
969 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 958 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
970 } | 959 } |
971 } | 960 } |
972 } | 961 } |
973 } | 962 } |
974 { | 963 { |
975 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 964 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
976 kMachineWord32); | 965 kMachineWord32); |
977 m.Return(m.Int32Sub(m.Word32Shl(m.Parameter(0), m.Parameter(1)), | 966 m.Return(m.Int32Sub(m.Word32Shl(m.Parameter(0), m.Parameter(1)), |
978 m.Parameter(2))); | 967 m.Parameter(2))); |
979 FOR_INT32_INPUTS(i) { | 968 FOR_INT32_INPUTS(i) { |
980 FOR_UINT32_INPUTS(j) { | 969 FOR_UINT32_SHIFTS(shift) { |
981 FOR_UINT32_INPUTS(k) { | 970 FOR_UINT32_INPUTS(k) { |
982 uint32_t shift = *j & 0x1F; | |
983 // Use uint32_t because signed overflow is UB in C. | 971 // Use uint32_t because signed overflow is UB in C. |
984 int32_t expected = (*i << shift) - *k; | 972 int32_t expected = (*i << shift) - *k; |
985 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 973 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
986 } | 974 } |
987 } | 975 } |
988 } | 976 } |
989 } | 977 } |
990 } | 978 } |
991 | 979 |
992 | 980 |
993 TEST(RunInt32SubAndWord32ShrP) { | 981 TEST(RunInt32SubAndWord32ShrP) { |
994 { | 982 { |
995 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 983 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
996 kMachineWord32); | 984 kMachineWord32); |
997 m.Return(m.Int32Sub(m.Parameter(0), | 985 m.Return(m.Int32Sub(m.Parameter(0), |
998 m.Word32Shr(m.Parameter(1), m.Parameter(2)))); | 986 m.Word32Shr(m.Parameter(1), m.Parameter(2)))); |
999 FOR_UINT32_INPUTS(i) { | 987 FOR_UINT32_INPUTS(i) { |
1000 FOR_UINT32_INPUTS(j) { | 988 FOR_UINT32_INPUTS(j) { |
1001 FOR_UINT32_INPUTS(k) { | 989 FOR_UINT32_SHIFTS(shift) { |
1002 uint32_t shift = *k & 0x1F; | |
1003 // Use uint32_t because signed overflow is UB in C. | 990 // Use uint32_t because signed overflow is UB in C. |
1004 int32_t expected = *i - (*j >> shift); | 991 int32_t expected = *i - (*j >> shift); |
1005 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 992 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
1006 } | 993 } |
1007 } | 994 } |
1008 } | 995 } |
1009 } | 996 } |
1010 { | 997 { |
1011 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 998 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
1012 kMachineWord32); | 999 kMachineWord32); |
1013 m.Return(m.Int32Sub(m.Word32Shr(m.Parameter(0), m.Parameter(1)), | 1000 m.Return(m.Int32Sub(m.Word32Shr(m.Parameter(0), m.Parameter(1)), |
1014 m.Parameter(2))); | 1001 m.Parameter(2))); |
1015 FOR_UINT32_INPUTS(i) { | 1002 FOR_UINT32_INPUTS(i) { |
1016 FOR_UINT32_INPUTS(j) { | 1003 FOR_UINT32_SHIFTS(shift) { |
1017 FOR_UINT32_INPUTS(k) { | 1004 FOR_UINT32_INPUTS(k) { |
1018 uint32_t shift = *j & 0x1F; | |
1019 // Use uint32_t because signed overflow is UB in C. | 1005 // Use uint32_t because signed overflow is UB in C. |
1020 int32_t expected = (*i >> shift) - *k; | 1006 int32_t expected = (*i >> shift) - *k; |
1021 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 1007 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
1022 } | 1008 } |
1023 } | 1009 } |
1024 } | 1010 } |
1025 } | 1011 } |
1026 } | 1012 } |
1027 | 1013 |
1028 | 1014 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 m.NewNode(shops[n], m.Parameter(1), | 1096 m.NewNode(shops[n], m.Parameter(1), |
1111 m.Parameter(2))), | 1097 m.Parameter(2))), |
1112 m.Int32Constant(0)), | 1098 m.Int32Constant(0)), |
1113 &blocka, &blockb); | 1099 &blocka, &blockb); |
1114 m.Bind(&blocka); | 1100 m.Bind(&blocka); |
1115 m.Return(m.Int32Constant(constant)); | 1101 m.Return(m.Int32Constant(constant)); |
1116 m.Bind(&blockb); | 1102 m.Bind(&blockb); |
1117 m.Return(m.Int32Constant(0 - constant)); | 1103 m.Return(m.Int32Constant(0 - constant)); |
1118 FOR_UINT32_INPUTS(i) { | 1104 FOR_UINT32_INPUTS(i) { |
1119 FOR_INT32_INPUTS(j) { | 1105 FOR_INT32_INPUTS(j) { |
1120 FOR_UINT32_INPUTS(k) { | 1106 FOR_UINT32_SHIFTS(shift) { |
1121 uint32_t shift = *k & 0x1F; | |
1122 int32_t right; | 1107 int32_t right; |
1123 switch (shops[n]->opcode()) { | 1108 switch (shops[n]->opcode()) { |
1124 default: | 1109 default: |
1125 UNREACHABLE(); | 1110 UNREACHABLE(); |
1126 case IrOpcode::kWord32Sar: | 1111 case IrOpcode::kWord32Sar: |
1127 right = *j >> shift; | 1112 right = *j >> shift; |
1128 break; | 1113 break; |
1129 case IrOpcode::kWord32Shl: | 1114 case IrOpcode::kWord32Shl: |
1130 right = *j << shift; | 1115 right = *j << shift; |
1131 break; | 1116 break; |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1196 m.machine()->Word32Shr()}; | 1181 m.machine()->Word32Shr()}; |
1197 for (size_t n = 0; n < ARRAY_SIZE(shops); n++) { | 1182 for (size_t n = 0; n < ARRAY_SIZE(shops); n++) { |
1198 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 1183 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
1199 kMachineWord32); | 1184 kMachineWord32); |
1200 m.Return(m.Word32Equal( | 1185 m.Return(m.Word32Equal( |
1201 m.Int32Sub(m.Parameter(0), | 1186 m.Int32Sub(m.Parameter(0), |
1202 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), | 1187 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), |
1203 m.Int32Constant(0))); | 1188 m.Int32Constant(0))); |
1204 FOR_UINT32_INPUTS(i) { | 1189 FOR_UINT32_INPUTS(i) { |
1205 FOR_INT32_INPUTS(j) { | 1190 FOR_INT32_INPUTS(j) { |
1206 FOR_UINT32_INPUTS(k) { | 1191 FOR_UINT32_SHIFTS(shift) { |
1207 uint32_t shift = *k & 0x1F; | |
1208 int32_t right; | 1192 int32_t right; |
1209 switch (shops[n]->opcode()) { | 1193 switch (shops[n]->opcode()) { |
1210 default: | 1194 default: |
1211 UNREACHABLE(); | 1195 UNREACHABLE(); |
1212 case IrOpcode::kWord32Sar: | 1196 case IrOpcode::kWord32Sar: |
1213 right = *j >> shift; | 1197 right = *j >> shift; |
1214 break; | 1198 break; |
1215 case IrOpcode::kWord32Shl: | 1199 case IrOpcode::kWord32Shl: |
1216 right = *j << shift; | 1200 right = *j << shift; |
1217 break; | 1201 break; |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1738 m.NewNode(shops[n], m.Parameter(1), | 1722 m.NewNode(shops[n], m.Parameter(1), |
1739 m.Parameter(2))), | 1723 m.Parameter(2))), |
1740 m.Int32Constant(0)), | 1724 m.Int32Constant(0)), |
1741 &blocka, &blockb); | 1725 &blocka, &blockb); |
1742 m.Bind(&blocka); | 1726 m.Bind(&blocka); |
1743 m.Return(m.Int32Constant(constant)); | 1727 m.Return(m.Int32Constant(constant)); |
1744 m.Bind(&blockb); | 1728 m.Bind(&blockb); |
1745 m.Return(m.Int32Constant(0 - constant)); | 1729 m.Return(m.Int32Constant(0 - constant)); |
1746 FOR_UINT32_INPUTS(i) { | 1730 FOR_UINT32_INPUTS(i) { |
1747 FOR_INT32_INPUTS(j) { | 1731 FOR_INT32_INPUTS(j) { |
1748 FOR_UINT32_INPUTS(k) { | 1732 FOR_UINT32_SHIFTS(shift) { |
1749 uint32_t shift = *k & 0x1F; | |
1750 int32_t right; | 1733 int32_t right; |
1751 switch (shops[n]->opcode()) { | 1734 switch (shops[n]->opcode()) { |
1752 default: | 1735 default: |
1753 UNREACHABLE(); | 1736 UNREACHABLE(); |
1754 case IrOpcode::kWord32Sar: | 1737 case IrOpcode::kWord32Sar: |
1755 right = *j >> shift; | 1738 right = *j >> shift; |
1756 break; | 1739 break; |
1757 case IrOpcode::kWord32Shl: | 1740 case IrOpcode::kWord32Shl: |
1758 right = *j << shift; | 1741 right = *j << shift; |
1759 break; | 1742 break; |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1966 m.NewNode(shops[n], m.Parameter(1), | 1949 m.NewNode(shops[n], m.Parameter(1), |
1967 m.Parameter(2))), | 1950 m.Parameter(2))), |
1968 m.Int32Constant(0)), | 1951 m.Int32Constant(0)), |
1969 &blocka, &blockb); | 1952 &blocka, &blockb); |
1970 m.Bind(&blocka); | 1953 m.Bind(&blocka); |
1971 m.Return(m.Int32Constant(constant)); | 1954 m.Return(m.Int32Constant(constant)); |
1972 m.Bind(&blockb); | 1955 m.Bind(&blockb); |
1973 m.Return(m.Int32Constant(0 - constant)); | 1956 m.Return(m.Int32Constant(0 - constant)); |
1974 FOR_UINT32_INPUTS(i) { | 1957 FOR_UINT32_INPUTS(i) { |
1975 FOR_INT32_INPUTS(j) { | 1958 FOR_INT32_INPUTS(j) { |
1976 FOR_UINT32_INPUTS(k) { | 1959 FOR_UINT32_SHIFTS(shift) { |
1977 uint32_t shift = *k & 0x1F; | |
1978 int32_t right; | 1960 int32_t right; |
1979 switch (shops[n]->opcode()) { | 1961 switch (shops[n]->opcode()) { |
1980 default: | 1962 default: |
1981 UNREACHABLE(); | 1963 UNREACHABLE(); |
1982 case IrOpcode::kWord32Sar: | 1964 case IrOpcode::kWord32Sar: |
1983 right = *j >> shift; | 1965 right = *j >> shift; |
1984 break; | 1966 break; |
1985 case IrOpcode::kWord32Shl: | 1967 case IrOpcode::kWord32Shl: |
1986 right = *j << shift; | 1968 right = *j << shift; |
1987 break; | 1969 break; |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2191 m.NewNode(shops[n], m.Parameter(1), | 2173 m.NewNode(shops[n], m.Parameter(1), |
2192 m.Parameter(2))), | 2174 m.Parameter(2))), |
2193 m.Int32Constant(0)), | 2175 m.Int32Constant(0)), |
2194 &blocka, &blockb); | 2176 &blocka, &blockb); |
2195 m.Bind(&blocka); | 2177 m.Bind(&blocka); |
2196 m.Return(m.Int32Constant(constant)); | 2178 m.Return(m.Int32Constant(constant)); |
2197 m.Bind(&blockb); | 2179 m.Bind(&blockb); |
2198 m.Return(m.Int32Constant(0 - constant)); | 2180 m.Return(m.Int32Constant(0 - constant)); |
2199 FOR_UINT32_INPUTS(i) { | 2181 FOR_UINT32_INPUTS(i) { |
2200 FOR_INT32_INPUTS(j) { | 2182 FOR_INT32_INPUTS(j) { |
2201 FOR_UINT32_INPUTS(k) { | 2183 FOR_UINT32_SHIFTS(shift) { |
2202 uint32_t shift = *k & 0x1F; | |
2203 int32_t right; | 2184 int32_t right; |
2204 switch (shops[n]->opcode()) { | 2185 switch (shops[n]->opcode()) { |
2205 default: | 2186 default: |
2206 UNREACHABLE(); | 2187 UNREACHABLE(); |
2207 case IrOpcode::kWord32Sar: | 2188 case IrOpcode::kWord32Sar: |
2208 right = *j >> shift; | 2189 right = *j >> shift; |
2209 break; | 2190 break; |
2210 case IrOpcode::kWord32Shl: | 2191 case IrOpcode::kWord32Shl: |
2211 right = *j << shift; | 2192 right = *j << shift; |
2212 break; | 2193 break; |
2213 case IrOpcode::kWord32Shr: | 2194 case IrOpcode::kWord32Shr: |
2214 right = static_cast<uint32_t>(*j) >> shift; | 2195 right = static_cast<uint32_t>(*j) >> shift; |
2215 break; | 2196 break; |
2216 } | 2197 } |
2217 int32_t expected = ((*i ^ right) == 0) ? constant : 0 - constant; | 2198 int32_t expected = ((*i ^ right) == 0) ? constant : 0 - constant; |
2218 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 2199 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
2219 } | 2200 } |
2220 } | 2201 } |
2221 } | 2202 } |
2222 } | 2203 } |
2223 } | 2204 } |
2224 } | 2205 } |
2225 | 2206 |
2226 | 2207 |
2227 TEST(RunWord32ShlP) { | 2208 TEST(RunWord32ShlP) { |
2228 { | 2209 { |
2229 FOR_UINT32_INPUTS(i) { | 2210 FOR_UINT32_SHIFTS(shift) { |
2230 uint32_t shift = *i & 0x1F; | |
2231 RawMachineAssemblerTester<int32_t> m(kMachineWord32); | 2211 RawMachineAssemblerTester<int32_t> m(kMachineWord32); |
2232 m.Return(m.Word32Shl(m.Parameter(0), m.Int32Constant(shift))); | 2212 m.Return(m.Word32Shl(m.Parameter(0), m.Int32Constant(shift))); |
2233 FOR_UINT32_INPUTS(j) { | 2213 FOR_UINT32_INPUTS(j) { |
2234 uint32_t expected = *j << shift; | 2214 uint32_t expected = *j << shift; |
2235 CHECK_EQ(expected, m.Call(*j)); | 2215 CHECK_EQ(expected, m.Call(*j)); |
2236 } | 2216 } |
2237 } | 2217 } |
2238 } | 2218 } |
2239 { | 2219 { |
2240 RawMachineAssemblerTester<int32_t> m; | 2220 RawMachineAssemblerTester<int32_t> m; |
2241 Int32BinopTester bt(&m); | 2221 Int32BinopTester bt(&m); |
2242 bt.AddReturn(m.Word32Shl(bt.param0, bt.param1)); | 2222 bt.AddReturn(m.Word32Shl(bt.param0, bt.param1)); |
2243 FOR_UINT32_INPUTS(i) { | 2223 FOR_UINT32_INPUTS(i) { |
2244 FOR_UINT32_INPUTS(j) { | 2224 FOR_UINT32_SHIFTS(shift) { |
2245 uint32_t shift = *j & 0x1F; | |
2246 uint32_t expected = *i << shift; | 2225 uint32_t expected = *i << shift; |
2247 CHECK_EQ(expected, bt.call(*i, shift)); | 2226 CHECK_EQ(expected, bt.call(*i, shift)); |
2248 } | 2227 } |
2249 } | 2228 } |
2250 } | 2229 } |
2251 } | 2230 } |
2252 | 2231 |
2253 | 2232 |
2254 TEST(RunWord32ShrP) { | 2233 TEST(RunWord32ShrP) { |
2255 { | 2234 { |
2256 FOR_UINT32_INPUTS(i) { | 2235 FOR_UINT32_SHIFTS(shift) { |
2257 uint32_t shift = *i & 0x1F; | |
2258 RawMachineAssemblerTester<int32_t> m(kMachineWord32); | 2236 RawMachineAssemblerTester<int32_t> m(kMachineWord32); |
2259 m.Return(m.Word32Shr(m.Parameter(0), m.Int32Constant(shift))); | 2237 m.Return(m.Word32Shr(m.Parameter(0), m.Int32Constant(shift))); |
2260 FOR_UINT32_INPUTS(j) { | 2238 FOR_UINT32_INPUTS(j) { |
2261 uint32_t expected = *j >> shift; | 2239 uint32_t expected = *j >> shift; |
2262 CHECK_EQ(expected, m.Call(*j)); | 2240 CHECK_EQ(expected, m.Call(*j)); |
2263 } | 2241 } |
2264 } | 2242 } |
2265 } | 2243 } |
2266 { | 2244 { |
2267 RawMachineAssemblerTester<int32_t> m; | 2245 RawMachineAssemblerTester<int32_t> m; |
2268 Int32BinopTester bt(&m); | 2246 Int32BinopTester bt(&m); |
2269 bt.AddReturn(m.Word32Shr(bt.param0, bt.param1)); | 2247 bt.AddReturn(m.Word32Shr(bt.param0, bt.param1)); |
2270 FOR_UINT32_INPUTS(i) { | 2248 FOR_UINT32_INPUTS(i) { |
2271 FOR_UINT32_INPUTS(j) { | 2249 FOR_UINT32_SHIFTS(shift) { |
2272 uint32_t shift = *j & 0x1F; | |
2273 uint32_t expected = *i >> shift; | 2250 uint32_t expected = *i >> shift; |
2274 CHECK_EQ(expected, bt.call(*i, shift)); | 2251 CHECK_EQ(expected, bt.call(*i, shift)); |
2275 } | 2252 } |
2276 } | 2253 } |
2277 CHECK_EQ(0x00010000, bt.call(0x80000000, 15)); | 2254 CHECK_EQ(0x00010000, bt.call(0x80000000, 15)); |
2278 } | 2255 } |
2279 } | 2256 } |
2280 | 2257 |
2281 | 2258 |
2282 TEST(RunWord32SarP) { | 2259 TEST(RunWord32SarP) { |
2283 { | 2260 { |
2284 FOR_INT32_INPUTS(i) { | 2261 FOR_INT32_SHIFTS(shift) { |
2285 int32_t shift = *i & 0x1F; | |
2286 RawMachineAssemblerTester<int32_t> m(kMachineWord32); | 2262 RawMachineAssemblerTester<int32_t> m(kMachineWord32); |
2287 m.Return(m.Word32Sar(m.Parameter(0), m.Int32Constant(shift))); | 2263 m.Return(m.Word32Sar(m.Parameter(0), m.Int32Constant(shift))); |
2288 FOR_INT32_INPUTS(j) { | 2264 FOR_INT32_INPUTS(j) { |
2289 int32_t expected = *j >> shift; | 2265 int32_t expected = *j >> shift; |
2290 CHECK_EQ(expected, m.Call(*j)); | 2266 CHECK_EQ(expected, m.Call(*j)); |
2291 } | 2267 } |
2292 } | 2268 } |
2293 } | 2269 } |
2294 { | 2270 { |
2295 RawMachineAssemblerTester<int32_t> m; | 2271 RawMachineAssemblerTester<int32_t> m; |
2296 Int32BinopTester bt(&m); | 2272 Int32BinopTester bt(&m); |
2297 bt.AddReturn(m.Word32Sar(bt.param0, bt.param1)); | 2273 bt.AddReturn(m.Word32Sar(bt.param0, bt.param1)); |
2298 FOR_INT32_INPUTS(i) { | 2274 FOR_INT32_INPUTS(i) { |
2299 FOR_INT32_INPUTS(j) { | 2275 FOR_INT32_SHIFTS(shift) { |
2300 int32_t shift = *j & 0x1F; | |
2301 int32_t expected = *i >> shift; | 2276 int32_t expected = *i >> shift; |
2302 CHECK_EQ(expected, bt.call(*i, shift)); | 2277 CHECK_EQ(expected, bt.call(*i, shift)); |
2303 } | 2278 } |
2304 } | 2279 } |
2305 CHECK_EQ(0xFFFF0000, bt.call(0x80000000, 15)); | 2280 CHECK_EQ(0xFFFF0000, bt.call(0x80000000, 15)); |
2306 } | 2281 } |
2307 } | 2282 } |
2308 | 2283 |
2309 | 2284 |
2310 TEST(RunWord32NotP) { | 2285 TEST(RunWord32NotP) { |
(...skipping 17 matching lines...) Expand all Loading... |
2328 | 2303 |
2329 | 2304 |
2330 TEST(RunWord32EqualAndWord32SarP) { | 2305 TEST(RunWord32EqualAndWord32SarP) { |
2331 { | 2306 { |
2332 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 2307 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
2333 kMachineWord32); | 2308 kMachineWord32); |
2334 m.Return(m.Word32Equal(m.Parameter(0), | 2309 m.Return(m.Word32Equal(m.Parameter(0), |
2335 m.Word32Sar(m.Parameter(1), m.Parameter(2)))); | 2310 m.Word32Sar(m.Parameter(1), m.Parameter(2)))); |
2336 FOR_INT32_INPUTS(i) { | 2311 FOR_INT32_INPUTS(i) { |
2337 FOR_INT32_INPUTS(j) { | 2312 FOR_INT32_INPUTS(j) { |
2338 FOR_UINT32_INPUTS(k) { | 2313 FOR_UINT32_SHIFTS(shift) { |
2339 uint32_t shift = *k & 0x1F; | |
2340 int32_t expected = (*i == (*j >> shift)); | 2314 int32_t expected = (*i == (*j >> shift)); |
2341 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 2315 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
2342 } | 2316 } |
2343 } | 2317 } |
2344 } | 2318 } |
2345 } | 2319 } |
2346 { | 2320 { |
2347 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 2321 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
2348 kMachineWord32); | 2322 kMachineWord32); |
2349 m.Return(m.Word32Equal(m.Word32Sar(m.Parameter(0), m.Parameter(1)), | 2323 m.Return(m.Word32Equal(m.Word32Sar(m.Parameter(0), m.Parameter(1)), |
2350 m.Parameter(2))); | 2324 m.Parameter(2))); |
2351 FOR_INT32_INPUTS(i) { | 2325 FOR_INT32_INPUTS(i) { |
2352 FOR_UINT32_INPUTS(j) { | 2326 FOR_UINT32_SHIFTS(shift) { |
2353 FOR_INT32_INPUTS(k) { | 2327 FOR_INT32_INPUTS(k) { |
2354 uint32_t shift = *j & 0x1F; | |
2355 int32_t expected = ((*i >> shift) == *k); | 2328 int32_t expected = ((*i >> shift) == *k); |
2356 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 2329 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
2357 } | 2330 } |
2358 } | 2331 } |
2359 } | 2332 } |
2360 } | 2333 } |
2361 } | 2334 } |
2362 | 2335 |
2363 | 2336 |
2364 TEST(RunWord32EqualAndWord32ShlP) { | 2337 TEST(RunWord32EqualAndWord32ShlP) { |
2365 { | 2338 { |
2366 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 2339 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
2367 kMachineWord32); | 2340 kMachineWord32); |
2368 m.Return(m.Word32Equal(m.Parameter(0), | 2341 m.Return(m.Word32Equal(m.Parameter(0), |
2369 m.Word32Shl(m.Parameter(1), m.Parameter(2)))); | 2342 m.Word32Shl(m.Parameter(1), m.Parameter(2)))); |
2370 FOR_UINT32_INPUTS(i) { | 2343 FOR_UINT32_INPUTS(i) { |
2371 FOR_UINT32_INPUTS(j) { | 2344 FOR_UINT32_INPUTS(j) { |
2372 FOR_UINT32_INPUTS(k) { | 2345 FOR_UINT32_SHIFTS(shift) { |
2373 uint32_t shift = *k & 0x1F; | |
2374 int32_t expected = (*i == (*j << shift)); | 2346 int32_t expected = (*i == (*j << shift)); |
2375 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 2347 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
2376 } | 2348 } |
2377 } | 2349 } |
2378 } | 2350 } |
2379 } | 2351 } |
2380 { | 2352 { |
2381 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 2353 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
2382 kMachineWord32); | 2354 kMachineWord32); |
2383 m.Return(m.Word32Equal(m.Word32Shl(m.Parameter(0), m.Parameter(1)), | 2355 m.Return(m.Word32Equal(m.Word32Shl(m.Parameter(0), m.Parameter(1)), |
2384 m.Parameter(2))); | 2356 m.Parameter(2))); |
2385 FOR_UINT32_INPUTS(i) { | 2357 FOR_UINT32_INPUTS(i) { |
2386 FOR_UINT32_INPUTS(j) { | 2358 FOR_UINT32_SHIFTS(shift) { |
2387 FOR_UINT32_INPUTS(k) { | 2359 FOR_UINT32_INPUTS(k) { |
2388 uint32_t shift = *j & 0x1F; | |
2389 int32_t expected = ((*i << shift) == *k); | 2360 int32_t expected = ((*i << shift) == *k); |
2390 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 2361 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
2391 } | 2362 } |
2392 } | 2363 } |
2393 } | 2364 } |
2394 } | 2365 } |
2395 } | 2366 } |
2396 | 2367 |
2397 | 2368 |
2398 TEST(RunWord32EqualAndWord32ShrP) { | 2369 TEST(RunWord32EqualAndWord32ShrP) { |
2399 { | 2370 { |
2400 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 2371 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
2401 kMachineWord32); | 2372 kMachineWord32); |
2402 m.Return(m.Word32Equal(m.Parameter(0), | 2373 m.Return(m.Word32Equal(m.Parameter(0), |
2403 m.Word32Shr(m.Parameter(1), m.Parameter(2)))); | 2374 m.Word32Shr(m.Parameter(1), m.Parameter(2)))); |
2404 FOR_UINT32_INPUTS(i) { | 2375 FOR_UINT32_INPUTS(i) { |
2405 FOR_UINT32_INPUTS(j) { | 2376 FOR_UINT32_INPUTS(j) { |
2406 FOR_UINT32_INPUTS(k) { | 2377 FOR_UINT32_SHIFTS(shift) { |
2407 uint32_t shift = *k & 0x1F; | |
2408 int32_t expected = (*i == (*j >> shift)); | 2378 int32_t expected = (*i == (*j >> shift)); |
2409 CHECK_EQ(expected, m.Call(*i, *j, shift)); | 2379 CHECK_EQ(expected, m.Call(*i, *j, shift)); |
2410 } | 2380 } |
2411 } | 2381 } |
2412 } | 2382 } |
2413 } | 2383 } |
2414 { | 2384 { |
2415 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, | 2385 RawMachineAssemblerTester<int32_t> m(kMachineWord32, kMachineWord32, |
2416 kMachineWord32); | 2386 kMachineWord32); |
2417 m.Return(m.Word32Equal(m.Word32Shr(m.Parameter(0), m.Parameter(1)), | 2387 m.Return(m.Word32Equal(m.Word32Shr(m.Parameter(0), m.Parameter(1)), |
2418 m.Parameter(2))); | 2388 m.Parameter(2))); |
2419 FOR_UINT32_INPUTS(i) { | 2389 FOR_UINT32_INPUTS(i) { |
2420 FOR_UINT32_INPUTS(j) { | 2390 FOR_UINT32_SHIFTS(shift) { |
2421 FOR_UINT32_INPUTS(k) { | 2391 FOR_UINT32_INPUTS(k) { |
2422 uint32_t shift = *j & 0x1F; | |
2423 int32_t expected = ((*i >> shift) == *k); | 2392 int32_t expected = ((*i >> shift) == *k); |
2424 CHECK_EQ(expected, m.Call(*i, shift, *k)); | 2393 CHECK_EQ(expected, m.Call(*i, shift, *k)); |
2425 } | 2394 } |
2426 } | 2395 } |
2427 } | 2396 } |
2428 } | 2397 } |
2429 } | 2398 } |
2430 | 2399 |
2431 | 2400 |
2432 TEST(RunDeadNodes) { | 2401 TEST(RunDeadNodes) { |
(...skipping 1635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4068 FOR_UINT32_INPUTS(i) { | 4037 FOR_UINT32_INPUTS(i) { |
4069 FOR_UINT32_INPUTS(j) { | 4038 FOR_UINT32_INPUTS(j) { |
4070 int32_t expected; | 4039 int32_t expected; |
4071 if (ssub_overflow(*i, *j, &expected)) expected = constant; | 4040 if (ssub_overflow(*i, *j, &expected)) expected = constant; |
4072 CHECK_EQ(expected, bt.call(*i, *j)); | 4041 CHECK_EQ(expected, bt.call(*i, *j)); |
4073 } | 4042 } |
4074 } | 4043 } |
4075 } | 4044 } |
4076 | 4045 |
4077 #endif // V8_TURBOFAN_TARGET | 4046 #endif // V8_TURBOFAN_TARGET |
OLD | NEW |