| Index: src/opts/SkFloatingPoint_opts.h
|
| diff --git a/src/opts/SkFloatingPoint_opts.h b/src/opts/SkFloatingPoint_opts.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8b6536ad7f18dab0e72c7472803fe63deab9d777
|
| --- /dev/null
|
| +++ b/src/opts/SkFloatingPoint_opts.h
|
| @@ -0,0 +1,35 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkFloatingPoint_opts_DEFINED
|
| +#define SkFloatingPoint_opts_DEFINED
|
| +
|
| +#include "SkFloatingPoint.h"
|
| +
|
| +namespace SK_OPTS_NS {
|
| +
|
| +#if defined(SK_ARM_HAS_NEON)
|
| + static float rsqrt(float x) {
|
| + return sk_float_rsqrt(x); // This sk_float_rsqrt copy will take the NEON compile-time path.
|
| + }
|
| +#else
|
| + static float rsqrt(float x) {
|
| + // Get initial estimate.
|
| + int i = *SkTCast<int*>(&x);
|
| + i = 0x5F1FFFF9 - (i>>1);
|
| + float estimate = *SkTCast<float*>(&i);
|
| +
|
| + // One step of Newton's method to refine.
|
| + const float estimate_sq = estimate*estimate;
|
| + estimate *= 0.703952253f*(2.38924456f-x*estimate_sq);
|
| + return estimate;
|
| + }
|
| +#endif
|
| +
|
| +} // namespace SK_OPTS_NS
|
| +
|
| +#endif//SkFloatingPoint_opts_DEFINED
|
|
|