| // Copyright 2012 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "src/codegen.h" | |
| #include <cmath> | |
| #include <memory> | |
| #include "src/flags.h" | |
| namespace v8 { | |
| namespace internal { | |
| #define UNARY_MATH_FUNCTION(name, generator) \ | |
| static UnaryMathFunctionWithIsolate fast_##name##_function = nullptr; \ | |
| double std_##name(double x, Isolate* isolate) { return std::name(x); } \ | |
| void init_fast_##name##_function(Isolate* isolate) { \ | |
| if (FLAG_fast_math) fast_##name##_function = generator(isolate); \ | |
| if (!fast_##name##_function) fast_##name##_function = std_##name; \ | |
| } \ | |
| void lazily_initialize_fast_##name(Isolate* isolate) { \ | |
| if (!fast_##name##_function) init_fast_##name##_function(isolate); \ | |
| } \ | |
| double fast_##name(double x, Isolate* isolate) { \ | |
| return (*fast_##name##_function)(x, isolate); \ | |
| } | |
| UNARY_MATH_FUNCTION(sqrt, CreateSqrtFunction) | |
| #undef UNARY_MATH_FUNCTION | |
| } // namespace internal | |
| } // namespace v8 |