OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 float f; | 647 float f; |
648 float g; | 648 float g; |
649 float h; | 649 float h; |
650 } F; | 650 } F; |
651 F f; | 651 F f; |
652 | 652 |
653 // Create a function that uses vldm/vstm to move some double and | 653 // Create a function that uses vldm/vstm to move some double and |
654 // single precision values around in memory. | 654 // single precision values around in memory. |
655 Assembler assm(isolate, NULL, 0); | 655 Assembler assm(isolate, NULL, 0); |
656 | 656 |
657 if (CpuFeatures::IsSupported(VFP2)) { | 657 __ mov(ip, Operand(sp)); |
658 CpuFeatureScope scope(&assm, VFP2); | 658 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); |
| 659 __ sub(fp, ip, Operand(4)); |
659 | 660 |
660 __ mov(ip, Operand(sp)); | 661 __ add(r4, r0, Operand(OFFSET_OF(D, a))); |
661 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); | 662 __ vldm(ia_w, r4, d0, d3); |
662 __ sub(fp, ip, Operand(4)); | 663 __ vldm(ia_w, r4, d4, d7); |
663 | 664 |
664 __ add(r4, r0, Operand(OFFSET_OF(D, a))); | 665 __ add(r4, r0, Operand(OFFSET_OF(D, a))); |
665 __ vldm(ia_w, r4, d0, d3); | 666 __ vstm(ia_w, r4, d6, d7); |
666 __ vldm(ia_w, r4, d4, d7); | 667 __ vstm(ia_w, r4, d0, d5); |
667 | 668 |
668 __ add(r4, r0, Operand(OFFSET_OF(D, a))); | 669 __ add(r4, r1, Operand(OFFSET_OF(F, a))); |
669 __ vstm(ia_w, r4, d6, d7); | 670 __ vldm(ia_w, r4, s0, s3); |
670 __ vstm(ia_w, r4, d0, d5); | 671 __ vldm(ia_w, r4, s4, s7); |
671 | 672 |
672 __ add(r4, r1, Operand(OFFSET_OF(F, a))); | 673 __ add(r4, r1, Operand(OFFSET_OF(F, a))); |
673 __ vldm(ia_w, r4, s0, s3); | 674 __ vstm(ia_w, r4, s6, s7); |
674 __ vldm(ia_w, r4, s4, s7); | 675 __ vstm(ia_w, r4, s0, s5); |
675 | 676 |
676 __ add(r4, r1, Operand(OFFSET_OF(F, a))); | 677 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); |
677 __ vstm(ia_w, r4, s6, s7); | |
678 __ vstm(ia_w, r4, s0, s5); | |
679 | 678 |
680 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); | 679 CodeDesc desc; |
| 680 assm.GetCode(&desc); |
| 681 Object* code = isolate->heap()->CreateCode( |
| 682 desc, |
| 683 Code::ComputeFlags(Code::STUB), |
| 684 Handle<Code>())->ToObjectChecked(); |
| 685 CHECK(code->IsCode()); |
| 686 #ifdef DEBUG |
| 687 Code::cast(code)->Print(); |
| 688 #endif |
| 689 F4 fn = FUNCTION_CAST<F4>(Code::cast(code)->entry()); |
| 690 d.a = 1.1; |
| 691 d.b = 2.2; |
| 692 d.c = 3.3; |
| 693 d.d = 4.4; |
| 694 d.e = 5.5; |
| 695 d.f = 6.6; |
| 696 d.g = 7.7; |
| 697 d.h = 8.8; |
681 | 698 |
682 CodeDesc desc; | 699 f.a = 1.0; |
683 assm.GetCode(&desc); | 700 f.b = 2.0; |
684 Object* code = isolate->heap()->CreateCode( | 701 f.c = 3.0; |
685 desc, | 702 f.d = 4.0; |
686 Code::ComputeFlags(Code::STUB), | 703 f.e = 5.0; |
687 Handle<Code>())->ToObjectChecked(); | 704 f.f = 6.0; |
688 CHECK(code->IsCode()); | 705 f.g = 7.0; |
689 #ifdef DEBUG | 706 f.h = 8.0; |
690 Code::cast(code)->Print(); | |
691 #endif | |
692 F4 fn = FUNCTION_CAST<F4>(Code::cast(code)->entry()); | |
693 d.a = 1.1; | |
694 d.b = 2.2; | |
695 d.c = 3.3; | |
696 d.d = 4.4; | |
697 d.e = 5.5; | |
698 d.f = 6.6; | |
699 d.g = 7.7; | |
700 d.h = 8.8; | |
701 | 707 |
702 f.a = 1.0; | 708 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); |
703 f.b = 2.0; | 709 USE(dummy); |
704 f.c = 3.0; | |
705 f.d = 4.0; | |
706 f.e = 5.0; | |
707 f.f = 6.0; | |
708 f.g = 7.0; | |
709 f.h = 8.0; | |
710 | 710 |
711 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); | 711 CHECK_EQ(7.7, d.a); |
712 USE(dummy); | 712 CHECK_EQ(8.8, d.b); |
| 713 CHECK_EQ(1.1, d.c); |
| 714 CHECK_EQ(2.2, d.d); |
| 715 CHECK_EQ(3.3, d.e); |
| 716 CHECK_EQ(4.4, d.f); |
| 717 CHECK_EQ(5.5, d.g); |
| 718 CHECK_EQ(6.6, d.h); |
713 | 719 |
714 CHECK_EQ(7.7, d.a); | 720 CHECK_EQ(7.0, f.a); |
715 CHECK_EQ(8.8, d.b); | 721 CHECK_EQ(8.0, f.b); |
716 CHECK_EQ(1.1, d.c); | 722 CHECK_EQ(1.0, f.c); |
717 CHECK_EQ(2.2, d.d); | 723 CHECK_EQ(2.0, f.d); |
718 CHECK_EQ(3.3, d.e); | 724 CHECK_EQ(3.0, f.e); |
719 CHECK_EQ(4.4, d.f); | 725 CHECK_EQ(4.0, f.f); |
720 CHECK_EQ(5.5, d.g); | 726 CHECK_EQ(5.0, f.g); |
721 CHECK_EQ(6.6, d.h); | 727 CHECK_EQ(6.0, f.h); |
722 | |
723 CHECK_EQ(7.0, f.a); | |
724 CHECK_EQ(8.0, f.b); | |
725 CHECK_EQ(1.0, f.c); | |
726 CHECK_EQ(2.0, f.d); | |
727 CHECK_EQ(3.0, f.e); | |
728 CHECK_EQ(4.0, f.f); | |
729 CHECK_EQ(5.0, f.g); | |
730 CHECK_EQ(6.0, f.h); | |
731 } | |
732 } | 728 } |
733 | 729 |
734 | 730 |
735 TEST(9) { | 731 TEST(9) { |
736 // Test VFP multi load/store with ia. | 732 // Test VFP multi load/store with ia. |
737 InitializeVM(); | 733 InitializeVM(); |
738 Isolate* isolate = Isolate::Current(); | 734 Isolate* isolate = Isolate::Current(); |
739 HandleScope scope(isolate); | 735 HandleScope scope(isolate); |
740 | 736 |
741 typedef struct { | 737 typedef struct { |
(...skipping 17 matching lines...) Expand all Loading... |
759 float f; | 755 float f; |
760 float g; | 756 float g; |
761 float h; | 757 float h; |
762 } F; | 758 } F; |
763 F f; | 759 F f; |
764 | 760 |
765 // Create a function that uses vldm/vstm to move some double and | 761 // Create a function that uses vldm/vstm to move some double and |
766 // single precision values around in memory. | 762 // single precision values around in memory. |
767 Assembler assm(isolate, NULL, 0); | 763 Assembler assm(isolate, NULL, 0); |
768 | 764 |
769 if (CpuFeatures::IsSupported(VFP2)) { | 765 __ mov(ip, Operand(sp)); |
770 CpuFeatureScope scope(&assm, VFP2); | 766 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); |
| 767 __ sub(fp, ip, Operand(4)); |
771 | 768 |
772 __ mov(ip, Operand(sp)); | 769 __ add(r4, r0, Operand(OFFSET_OF(D, a))); |
773 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); | 770 __ vldm(ia, r4, d0, d3); |
774 __ sub(fp, ip, Operand(4)); | 771 __ add(r4, r4, Operand(4 * 8)); |
| 772 __ vldm(ia, r4, d4, d7); |
775 | 773 |
776 __ add(r4, r0, Operand(OFFSET_OF(D, a))); | 774 __ add(r4, r0, Operand(OFFSET_OF(D, a))); |
777 __ vldm(ia, r4, d0, d3); | 775 __ vstm(ia, r4, d6, d7); |
778 __ add(r4, r4, Operand(4 * 8)); | 776 __ add(r4, r4, Operand(2 * 8)); |
779 __ vldm(ia, r4, d4, d7); | 777 __ vstm(ia, r4, d0, d5); |
780 | 778 |
781 __ add(r4, r0, Operand(OFFSET_OF(D, a))); | 779 __ add(r4, r1, Operand(OFFSET_OF(F, a))); |
782 __ vstm(ia, r4, d6, d7); | 780 __ vldm(ia, r4, s0, s3); |
783 __ add(r4, r4, Operand(2 * 8)); | 781 __ add(r4, r4, Operand(4 * 4)); |
784 __ vstm(ia, r4, d0, d5); | 782 __ vldm(ia, r4, s4, s7); |
785 | 783 |
786 __ add(r4, r1, Operand(OFFSET_OF(F, a))); | 784 __ add(r4, r1, Operand(OFFSET_OF(F, a))); |
787 __ vldm(ia, r4, s0, s3); | 785 __ vstm(ia, r4, s6, s7); |
788 __ add(r4, r4, Operand(4 * 4)); | 786 __ add(r4, r4, Operand(2 * 4)); |
789 __ vldm(ia, r4, s4, s7); | 787 __ vstm(ia, r4, s0, s5); |
790 | 788 |
791 __ add(r4, r1, Operand(OFFSET_OF(F, a))); | 789 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); |
792 __ vstm(ia, r4, s6, s7); | |
793 __ add(r4, r4, Operand(2 * 4)); | |
794 __ vstm(ia, r4, s0, s5); | |
795 | 790 |
796 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); | 791 CodeDesc desc; |
| 792 assm.GetCode(&desc); |
| 793 Object* code = isolate->heap()->CreateCode( |
| 794 desc, |
| 795 Code::ComputeFlags(Code::STUB), |
| 796 Handle<Code>())->ToObjectChecked(); |
| 797 CHECK(code->IsCode()); |
| 798 #ifdef DEBUG |
| 799 Code::cast(code)->Print(); |
| 800 #endif |
| 801 F4 fn = FUNCTION_CAST<F4>(Code::cast(code)->entry()); |
| 802 d.a = 1.1; |
| 803 d.b = 2.2; |
| 804 d.c = 3.3; |
| 805 d.d = 4.4; |
| 806 d.e = 5.5; |
| 807 d.f = 6.6; |
| 808 d.g = 7.7; |
| 809 d.h = 8.8; |
797 | 810 |
798 CodeDesc desc; | 811 f.a = 1.0; |
799 assm.GetCode(&desc); | 812 f.b = 2.0; |
800 Object* code = isolate->heap()->CreateCode( | 813 f.c = 3.0; |
801 desc, | 814 f.d = 4.0; |
802 Code::ComputeFlags(Code::STUB), | 815 f.e = 5.0; |
803 Handle<Code>())->ToObjectChecked(); | 816 f.f = 6.0; |
804 CHECK(code->IsCode()); | 817 f.g = 7.0; |
805 #ifdef DEBUG | 818 f.h = 8.0; |
806 Code::cast(code)->Print(); | |
807 #endif | |
808 F4 fn = FUNCTION_CAST<F4>(Code::cast(code)->entry()); | |
809 d.a = 1.1; | |
810 d.b = 2.2; | |
811 d.c = 3.3; | |
812 d.d = 4.4; | |
813 d.e = 5.5; | |
814 d.f = 6.6; | |
815 d.g = 7.7; | |
816 d.h = 8.8; | |
817 | 819 |
818 f.a = 1.0; | 820 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); |
819 f.b = 2.0; | 821 USE(dummy); |
820 f.c = 3.0; | |
821 f.d = 4.0; | |
822 f.e = 5.0; | |
823 f.f = 6.0; | |
824 f.g = 7.0; | |
825 f.h = 8.0; | |
826 | 822 |
827 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); | 823 CHECK_EQ(7.7, d.a); |
828 USE(dummy); | 824 CHECK_EQ(8.8, d.b); |
| 825 CHECK_EQ(1.1, d.c); |
| 826 CHECK_EQ(2.2, d.d); |
| 827 CHECK_EQ(3.3, d.e); |
| 828 CHECK_EQ(4.4, d.f); |
| 829 CHECK_EQ(5.5, d.g); |
| 830 CHECK_EQ(6.6, d.h); |
829 | 831 |
830 CHECK_EQ(7.7, d.a); | 832 CHECK_EQ(7.0, f.a); |
831 CHECK_EQ(8.8, d.b); | 833 CHECK_EQ(8.0, f.b); |
832 CHECK_EQ(1.1, d.c); | 834 CHECK_EQ(1.0, f.c); |
833 CHECK_EQ(2.2, d.d); | 835 CHECK_EQ(2.0, f.d); |
834 CHECK_EQ(3.3, d.e); | 836 CHECK_EQ(3.0, f.e); |
835 CHECK_EQ(4.4, d.f); | 837 CHECK_EQ(4.0, f.f); |
836 CHECK_EQ(5.5, d.g); | 838 CHECK_EQ(5.0, f.g); |
837 CHECK_EQ(6.6, d.h); | 839 CHECK_EQ(6.0, f.h); |
838 | |
839 CHECK_EQ(7.0, f.a); | |
840 CHECK_EQ(8.0, f.b); | |
841 CHECK_EQ(1.0, f.c); | |
842 CHECK_EQ(2.0, f.d); | |
843 CHECK_EQ(3.0, f.e); | |
844 CHECK_EQ(4.0, f.f); | |
845 CHECK_EQ(5.0, f.g); | |
846 CHECK_EQ(6.0, f.h); | |
847 } | |
848 } | 840 } |
849 | 841 |
850 | 842 |
851 TEST(10) { | 843 TEST(10) { |
852 // Test VFP multi load/store with db_w. | 844 // Test VFP multi load/store with db_w. |
853 InitializeVM(); | 845 InitializeVM(); |
854 Isolate* isolate = Isolate::Current(); | 846 Isolate* isolate = Isolate::Current(); |
855 HandleScope scope(isolate); | 847 HandleScope scope(isolate); |
856 | 848 |
857 typedef struct { | 849 typedef struct { |
(...skipping 17 matching lines...) Expand all Loading... |
875 float f; | 867 float f; |
876 float g; | 868 float g; |
877 float h; | 869 float h; |
878 } F; | 870 } F; |
879 F f; | 871 F f; |
880 | 872 |
881 // Create a function that uses vldm/vstm to move some double and | 873 // Create a function that uses vldm/vstm to move some double and |
882 // single precision values around in memory. | 874 // single precision values around in memory. |
883 Assembler assm(isolate, NULL, 0); | 875 Assembler assm(isolate, NULL, 0); |
884 | 876 |
885 if (CpuFeatures::IsSupported(VFP2)) { | 877 __ mov(ip, Operand(sp)); |
886 CpuFeatureScope scope(&assm, VFP2); | 878 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); |
| 879 __ sub(fp, ip, Operand(4)); |
887 | 880 |
888 __ mov(ip, Operand(sp)); | 881 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8)); |
889 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); | 882 __ vldm(db_w, r4, d4, d7); |
890 __ sub(fp, ip, Operand(4)); | 883 __ vldm(db_w, r4, d0, d3); |
891 | 884 |
892 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8)); | 885 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8)); |
893 __ vldm(db_w, r4, d4, d7); | 886 __ vstm(db_w, r4, d0, d5); |
894 __ vldm(db_w, r4, d0, d3); | 887 __ vstm(db_w, r4, d6, d7); |
895 | 888 |
896 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8)); | 889 __ add(r4, r1, Operand(OFFSET_OF(F, h) + 4)); |
897 __ vstm(db_w, r4, d0, d5); | 890 __ vldm(db_w, r4, s4, s7); |
898 __ vstm(db_w, r4, d6, d7); | 891 __ vldm(db_w, r4, s0, s3); |
899 | 892 |
900 __ add(r4, r1, Operand(OFFSET_OF(F, h) + 4)); | 893 __ add(r4, r1, Operand(OFFSET_OF(F, h) + 4)); |
901 __ vldm(db_w, r4, s4, s7); | 894 __ vstm(db_w, r4, s0, s5); |
902 __ vldm(db_w, r4, s0, s3); | 895 __ vstm(db_w, r4, s6, s7); |
903 | 896 |
904 __ add(r4, r1, Operand(OFFSET_OF(F, h) + 4)); | 897 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); |
905 __ vstm(db_w, r4, s0, s5); | |
906 __ vstm(db_w, r4, s6, s7); | |
907 | 898 |
908 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); | 899 CodeDesc desc; |
| 900 assm.GetCode(&desc); |
| 901 Object* code = isolate->heap()->CreateCode( |
| 902 desc, |
| 903 Code::ComputeFlags(Code::STUB), |
| 904 Handle<Code>())->ToObjectChecked(); |
| 905 CHECK(code->IsCode()); |
| 906 #ifdef DEBUG |
| 907 Code::cast(code)->Print(); |
| 908 #endif |
| 909 F4 fn = FUNCTION_CAST<F4>(Code::cast(code)->entry()); |
| 910 d.a = 1.1; |
| 911 d.b = 2.2; |
| 912 d.c = 3.3; |
| 913 d.d = 4.4; |
| 914 d.e = 5.5; |
| 915 d.f = 6.6; |
| 916 d.g = 7.7; |
| 917 d.h = 8.8; |
909 | 918 |
910 CodeDesc desc; | 919 f.a = 1.0; |
911 assm.GetCode(&desc); | 920 f.b = 2.0; |
912 Object* code = isolate->heap()->CreateCode( | 921 f.c = 3.0; |
913 desc, | 922 f.d = 4.0; |
914 Code::ComputeFlags(Code::STUB), | 923 f.e = 5.0; |
915 Handle<Code>())->ToObjectChecked(); | 924 f.f = 6.0; |
916 CHECK(code->IsCode()); | 925 f.g = 7.0; |
917 #ifdef DEBUG | 926 f.h = 8.0; |
918 Code::cast(code)->Print(); | |
919 #endif | |
920 F4 fn = FUNCTION_CAST<F4>(Code::cast(code)->entry()); | |
921 d.a = 1.1; | |
922 d.b = 2.2; | |
923 d.c = 3.3; | |
924 d.d = 4.4; | |
925 d.e = 5.5; | |
926 d.f = 6.6; | |
927 d.g = 7.7; | |
928 d.h = 8.8; | |
929 | 927 |
930 f.a = 1.0; | 928 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); |
931 f.b = 2.0; | 929 USE(dummy); |
932 f.c = 3.0; | |
933 f.d = 4.0; | |
934 f.e = 5.0; | |
935 f.f = 6.0; | |
936 f.g = 7.0; | |
937 f.h = 8.0; | |
938 | 930 |
939 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); | 931 CHECK_EQ(7.7, d.a); |
940 USE(dummy); | 932 CHECK_EQ(8.8, d.b); |
| 933 CHECK_EQ(1.1, d.c); |
| 934 CHECK_EQ(2.2, d.d); |
| 935 CHECK_EQ(3.3, d.e); |
| 936 CHECK_EQ(4.4, d.f); |
| 937 CHECK_EQ(5.5, d.g); |
| 938 CHECK_EQ(6.6, d.h); |
941 | 939 |
942 CHECK_EQ(7.7, d.a); | 940 CHECK_EQ(7.0, f.a); |
943 CHECK_EQ(8.8, d.b); | 941 CHECK_EQ(8.0, f.b); |
944 CHECK_EQ(1.1, d.c); | 942 CHECK_EQ(1.0, f.c); |
945 CHECK_EQ(2.2, d.d); | 943 CHECK_EQ(2.0, f.d); |
946 CHECK_EQ(3.3, d.e); | 944 CHECK_EQ(3.0, f.e); |
947 CHECK_EQ(4.4, d.f); | 945 CHECK_EQ(4.0, f.f); |
948 CHECK_EQ(5.5, d.g); | 946 CHECK_EQ(5.0, f.g); |
949 CHECK_EQ(6.6, d.h); | 947 CHECK_EQ(6.0, f.h); |
950 | |
951 CHECK_EQ(7.0, f.a); | |
952 CHECK_EQ(8.0, f.b); | |
953 CHECK_EQ(1.0, f.c); | |
954 CHECK_EQ(2.0, f.d); | |
955 CHECK_EQ(3.0, f.e); | |
956 CHECK_EQ(4.0, f.f); | |
957 CHECK_EQ(5.0, f.g); | |
958 CHECK_EQ(6.0, f.h); | |
959 } | |
960 } | 948 } |
961 | 949 |
962 | 950 |
963 TEST(11) { | 951 TEST(11) { |
964 // Test instructions using the carry flag. | 952 // Test instructions using the carry flag. |
965 InitializeVM(); | 953 InitializeVM(); |
966 Isolate* isolate = Isolate::Current(); | 954 Isolate* isolate = Isolate::Current(); |
967 HandleScope scope(isolate); | 955 HandleScope scope(isolate); |
968 | 956 |
969 typedef struct { | 957 typedef struct { |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 CHECK_EQ(2.75, t.x); | 1141 CHECK_EQ(2.75, t.x); |
1154 CHECK_EQ(1.5, t.y); | 1142 CHECK_EQ(1.5, t.y); |
1155 CHECK_EQ(17.0, t.z); | 1143 CHECK_EQ(17.0, t.z); |
1156 CHECK_EQ(14.7610017472335499, t.i); | 1144 CHECK_EQ(14.7610017472335499, t.i); |
1157 CHECK_EQ(16.0, t.j); | 1145 CHECK_EQ(16.0, t.j); |
1158 CHECK_EQ(73.8818412254460241, t.k); | 1146 CHECK_EQ(73.8818412254460241, t.k); |
1159 } | 1147 } |
1160 } | 1148 } |
1161 | 1149 |
1162 #undef __ | 1150 #undef __ |
OLD | NEW |