OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 // ----------------------------------------------------------------------------- | 142 // ----------------------------------------------------------------------------- |
143 // Common double constants. | 143 // Common double constants. |
144 | 144 |
145 struct DoubleConstant BASE_EMBEDDED { | 145 struct DoubleConstant BASE_EMBEDDED { |
146 double min_int; | 146 double min_int; |
147 double one_half; | 147 double one_half; |
148 double minus_one_half; | 148 double minus_one_half; |
149 double negative_infinity; | 149 double negative_infinity; |
150 double the_hole_nan; | 150 double the_hole_nan; |
151 double uint32_bias; | 151 double uint32_bias; |
| 152 double rounding_limit; |
152 }; | 153 }; |
153 | 154 |
154 static DoubleConstant double_constants; | 155 static DoubleConstant double_constants; |
155 | 156 |
156 const char* const RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING"; | 157 const char* const RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING"; |
157 | 158 |
158 static bool math_exp_data_initialized = false; | 159 static bool math_exp_data_initialized = false; |
159 static base::Mutex* math_exp_data_mutex = NULL; | 160 static base::Mutex* math_exp_data_mutex = NULL; |
160 static double* math_exp_constants_array = NULL; | 161 static double* math_exp_constants_array = NULL; |
161 static double* math_exp_log_table_array = NULL; | 162 static double* math_exp_log_table_array = NULL; |
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 // Implementation of ExternalReference | 944 // Implementation of ExternalReference |
944 | 945 |
945 void ExternalReference::SetUp() { | 946 void ExternalReference::SetUp() { |
946 double_constants.min_int = kMinInt; | 947 double_constants.min_int = kMinInt; |
947 double_constants.one_half = 0.5; | 948 double_constants.one_half = 0.5; |
948 double_constants.minus_one_half = -0.5; | 949 double_constants.minus_one_half = -0.5; |
949 double_constants.the_hole_nan = bit_cast<double>(kHoleNanInt64); | 950 double_constants.the_hole_nan = bit_cast<double>(kHoleNanInt64); |
950 double_constants.negative_infinity = -V8_INFINITY; | 951 double_constants.negative_infinity = -V8_INFINITY; |
951 double_constants.uint32_bias = | 952 double_constants.uint32_bias = |
952 static_cast<double>(static_cast<uint32_t>(0xFFFFFFFF)) + 1; | 953 static_cast<double>(static_cast<uint32_t>(0xFFFFFFFF)) + 1; |
| 954 // 2^52; |
| 955 double_constants.rounding_limit = 4503599627370496.0; |
953 | 956 |
954 math_exp_data_mutex = new base::Mutex(); | 957 math_exp_data_mutex = new base::Mutex(); |
955 } | 958 } |
956 | 959 |
957 | 960 |
958 void ExternalReference::InitializeMathExpData() { | 961 void ExternalReference::InitializeMathExpData() { |
959 // Early return? | 962 // Early return? |
960 if (math_exp_data_initialized) return; | 963 if (math_exp_data_initialized) return; |
961 | 964 |
962 base::LockGuard<base::Mutex> lock_guard(math_exp_data_mutex); | 965 base::LockGuard<base::Mutex> lock_guard(math_exp_data_mutex); |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1270 reinterpret_cast<void*>(&double_constants.the_hole_nan)); | 1273 reinterpret_cast<void*>(&double_constants.the_hole_nan)); |
1271 } | 1274 } |
1272 | 1275 |
1273 | 1276 |
1274 ExternalReference ExternalReference::address_of_uint32_bias() { | 1277 ExternalReference ExternalReference::address_of_uint32_bias() { |
1275 return ExternalReference( | 1278 return ExternalReference( |
1276 reinterpret_cast<void*>(&double_constants.uint32_bias)); | 1279 reinterpret_cast<void*>(&double_constants.uint32_bias)); |
1277 } | 1280 } |
1278 | 1281 |
1279 | 1282 |
| 1283 ExternalReference ExternalReference::address_of_rounding_limit() { |
| 1284 return ExternalReference( |
| 1285 reinterpret_cast<void*>(&double_constants.rounding_limit)); |
| 1286 } |
| 1287 |
| 1288 |
1280 ExternalReference ExternalReference::is_profiling_address(Isolate* isolate) { | 1289 ExternalReference ExternalReference::is_profiling_address(Isolate* isolate) { |
1281 return ExternalReference(isolate->cpu_profiler()->is_profiling_address()); | 1290 return ExternalReference(isolate->cpu_profiler()->is_profiling_address()); |
1282 } | 1291 } |
1283 | 1292 |
1284 | 1293 |
1285 ExternalReference ExternalReference::invoke_function_callback( | 1294 ExternalReference ExternalReference::invoke_function_callback( |
1286 Isolate* isolate) { | 1295 Isolate* isolate) { |
1287 Address thunk_address = FUNCTION_ADDR(&InvokeFunctionCallback); | 1296 Address thunk_address = FUNCTION_ADDR(&InvokeFunctionCallback); |
1288 ExternalReference::Type thunk_type = ExternalReference::PROFILING_API_CALL; | 1297 ExternalReference::Type thunk_type = ExternalReference::PROFILING_API_CALL; |
1289 ApiFunction thunk_fun(thunk_address); | 1298 ApiFunction thunk_fun(thunk_address); |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1852 | 1861 |
1853 | 1862 |
1854 void Assembler::DataAlign(int m) { | 1863 void Assembler::DataAlign(int m) { |
1855 DCHECK(m >= 2 && base::bits::IsPowerOfTwo32(m)); | 1864 DCHECK(m >= 2 && base::bits::IsPowerOfTwo32(m)); |
1856 while ((pc_offset() & (m - 1)) != 0) { | 1865 while ((pc_offset() & (m - 1)) != 0) { |
1857 db(0); | 1866 db(0); |
1858 } | 1867 } |
1859 } | 1868 } |
1860 } // namespace internal | 1869 } // namespace internal |
1861 } // namespace v8 | 1870 } // namespace v8 |
OLD | NEW |