OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #if V8_TARGET_ARCH_ARM | 9 #if V8_TARGET_ARCH_ARM |
10 | 10 |
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 } | 854 } |
855 | 855 |
856 | 856 |
857 void MacroAssembler::VFPCanonicalizeNaN(const DwVfpRegister dst, | 857 void MacroAssembler::VFPCanonicalizeNaN(const DwVfpRegister dst, |
858 const DwVfpRegister src, | 858 const DwVfpRegister src, |
859 const Condition cond) { | 859 const Condition cond) { |
860 vsub(dst, src, kDoubleRegZero, cond); | 860 vsub(dst, src, kDoubleRegZero, cond); |
861 } | 861 } |
862 | 862 |
863 | 863 |
| 864 void MacroAssembler::VFPCompareAndSetFlags(const SwVfpRegister src1, |
| 865 const SwVfpRegister src2, |
| 866 const Condition cond) { |
| 867 // Compare and move FPSCR flags to the normal condition flags. |
| 868 VFPCompareAndLoadFlags(src1, src2, pc, cond); |
| 869 } |
| 870 |
| 871 void MacroAssembler::VFPCompareAndSetFlags(const SwVfpRegister src1, |
| 872 const float src2, |
| 873 const Condition cond) { |
| 874 // Compare and move FPSCR flags to the normal condition flags. |
| 875 VFPCompareAndLoadFlags(src1, src2, pc, cond); |
| 876 } |
| 877 |
| 878 |
864 void MacroAssembler::VFPCompareAndSetFlags(const DwVfpRegister src1, | 879 void MacroAssembler::VFPCompareAndSetFlags(const DwVfpRegister src1, |
865 const DwVfpRegister src2, | 880 const DwVfpRegister src2, |
866 const Condition cond) { | 881 const Condition cond) { |
867 // Compare and move FPSCR flags to the normal condition flags. | 882 // Compare and move FPSCR flags to the normal condition flags. |
868 VFPCompareAndLoadFlags(src1, src2, pc, cond); | 883 VFPCompareAndLoadFlags(src1, src2, pc, cond); |
869 } | 884 } |
870 | 885 |
871 void MacroAssembler::VFPCompareAndSetFlags(const DwVfpRegister src1, | 886 void MacroAssembler::VFPCompareAndSetFlags(const DwVfpRegister src1, |
872 const double src2, | 887 const double src2, |
873 const Condition cond) { | 888 const Condition cond) { |
874 // Compare and move FPSCR flags to the normal condition flags. | 889 // Compare and move FPSCR flags to the normal condition flags. |
875 VFPCompareAndLoadFlags(src1, src2, pc, cond); | 890 VFPCompareAndLoadFlags(src1, src2, pc, cond); |
876 } | 891 } |
877 | 892 |
878 | 893 |
| 894 void MacroAssembler::VFPCompareAndLoadFlags(const SwVfpRegister src1, |
| 895 const SwVfpRegister src2, |
| 896 const Register fpscr_flags, |
| 897 const Condition cond) { |
| 898 // Compare and load FPSCR. |
| 899 vcmp(src1, src2, cond); |
| 900 vmrs(fpscr_flags, cond); |
| 901 } |
| 902 |
| 903 void MacroAssembler::VFPCompareAndLoadFlags(const SwVfpRegister src1, |
| 904 const float src2, |
| 905 const Register fpscr_flags, |
| 906 const Condition cond) { |
| 907 // Compare and load FPSCR. |
| 908 vcmp(src1, src2, cond); |
| 909 vmrs(fpscr_flags, cond); |
| 910 } |
| 911 |
| 912 |
879 void MacroAssembler::VFPCompareAndLoadFlags(const DwVfpRegister src1, | 913 void MacroAssembler::VFPCompareAndLoadFlags(const DwVfpRegister src1, |
880 const DwVfpRegister src2, | 914 const DwVfpRegister src2, |
881 const Register fpscr_flags, | 915 const Register fpscr_flags, |
882 const Condition cond) { | 916 const Condition cond) { |
883 // Compare and load FPSCR. | 917 // Compare and load FPSCR. |
884 vcmp(src1, src2, cond); | 918 vcmp(src1, src2, cond); |
885 vmrs(fpscr_flags, cond); | 919 vmrs(fpscr_flags, cond); |
886 } | 920 } |
887 | 921 |
888 void MacroAssembler::VFPCompareAndLoadFlags(const DwVfpRegister src1, | 922 void MacroAssembler::VFPCompareAndLoadFlags(const DwVfpRegister src1, |
889 const double src2, | 923 const double src2, |
890 const Register fpscr_flags, | 924 const Register fpscr_flags, |
891 const Condition cond) { | 925 const Condition cond) { |
892 // Compare and load FPSCR. | 926 // Compare and load FPSCR. |
893 vcmp(src1, src2, cond); | 927 vcmp(src1, src2, cond); |
894 vmrs(fpscr_flags, cond); | 928 vmrs(fpscr_flags, cond); |
895 } | 929 } |
896 | 930 |
| 931 |
897 void MacroAssembler::Vmov(const DwVfpRegister dst, | 932 void MacroAssembler::Vmov(const DwVfpRegister dst, |
898 const double imm, | 933 const double imm, |
899 const Register scratch) { | 934 const Register scratch) { |
900 static const DoubleRepresentation minus_zero(-0.0); | 935 static const DoubleRepresentation minus_zero(-0.0); |
901 static const DoubleRepresentation zero(0.0); | 936 static const DoubleRepresentation zero(0.0); |
902 DoubleRepresentation value_rep(imm); | 937 DoubleRepresentation value_rep(imm); |
903 // Handle special values first. | 938 // Handle special values first. |
904 if (value_rep == zero) { | 939 if (value_rep == zero) { |
905 vmov(dst, kDoubleRegZero); | 940 vmov(dst, kDoubleRegZero); |
906 } else if (value_rep == minus_zero) { | 941 } else if (value_rep == minus_zero) { |
(...skipping 2969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3876 } | 3911 } |
3877 } | 3912 } |
3878 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); | 3913 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); |
3879 add(result, result, Operand(dividend, LSR, 31)); | 3914 add(result, result, Operand(dividend, LSR, 31)); |
3880 } | 3915 } |
3881 | 3916 |
3882 } // namespace internal | 3917 } // namespace internal |
3883 } // namespace v8 | 3918 } // namespace v8 |
3884 | 3919 |
3885 #endif // V8_TARGET_ARCH_ARM | 3920 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |