bionic: libm: replace Qualcomm's routines with Nvidia's (except pow)

Thank you to Johnny Qiu and Shu Zhang from Nvidia for both creating these
and making them public.

This commit is a squash of the following (but modified for KitKat):

Optimization for sin/cos:
    1. Add assembly version of sin/cos for arm
    2. Enable a fast implementation of sin() and cos() for small
    input (|x| < 640). It is only enabled for Cortex-A15.
Bug 1154547
Bug 1340861
Reviewed-on: http://git-master/r/277610
(cherry picked from commit 325d52623445ee089a0199fc993b28264b1cc9a6)

libm: correct a confusing macro name in __kernel_log2

Reviewed-on: http://git-master/r/278950
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Johnny Qiu <joqiu@nvidia.com>
Tested-by: Johnny Qiu <joqiu@nvidia.com>
Reviewed-on: http://git-master/r/336758
Reviewed-by: Shu Zhang <chazhang@nvidia.com>
Tested-by: Shu Zhang <chazhang@nvidia.com>

libm: Optimize exp()

Perform fast exp(x) when |x| < 16.0.
Bug 1362653
Reviewed-on: http://git-master/r/278360
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Johnny Qiu <joqiu@nvidia.com>
Tested-by: Johnny Qiu <joqiu@nvidia.com>
Reviewed-on: http://git-master/r/336759
Reviewed-by: Shu Zhang <chazhang@nvidia.com>
Tested-by: Shu Zhang <chazhang@nvidia.com>

use vfma.f64/vfms.f64 instead of vmla.f64/vmls.f64

vmfa/vmfs has better precision than vmla/vmls. Use vmfa/vfms if
vfpv4 FPU is available.
Bug 1426401
Reviewed-on: http://git-master/r/343595
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Shu Zhang <chazhang@nvidia.com>
Tested-by: Shu Zhang <chazhang@nvidia.com>

libm: fast and precise sin()/cos()

Rewrite upstream sin/cos with assembly. Jump paths are optimized.
Introduce a PRECISE_TRIGONOMETRIC macro to select precision and
performance. With PRECISE_TRIGONOMETRIC set, the error is within 1 ULP.
The error is 2ULP if not set.
Bug 1426401
Reviewed-on: http://git-master/r/345073
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Shu Zhang <chazhang@nvidia.com>
Tested-by: Shu Zhang <chazhang@nvidia.com>

libm: turn on high-precision sin/cos

Turn on PRECISE_TRIGONOMETRIC macro to get high precision sin/cos.
Bug 1437755
Reviewed-on: http://git-master/r/355653
Tested-by: Shu Zhang <chazhang@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Shu Zhang <chazhang@nvidia.com>

Add arm specific floor() optimization

Add arch specific optimization scheme for libm.
Add arm specific floor() implementation which avoids VMSR and VMRS
instructions.

libm: Fix incorrect exponent when hitting a boundary condition

Bug 1466747
Reviewed-on: http://git-master/r/375210
Reviewed-by: Johnny Qiu <joqiu@nvidia.com>
Tested-by: Johnny Qiu <joqiu@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Ryane Luo <ryanel@nvidia.com>
Tested-by: Ryane Luo <ryanel@nvidia.com>
Reviewed-by: Peter Zu <pzu@nvidia.com>

add arm specific sqrt and sqrtf

Add arm specific optimized sqrt and sqrtf.

Change-Id: Ibd4cd7147aa2f98c9b5bbaf74948843ea619dba4