Add aarch64 instructions wherever possible

fma, sqrt and various rounding functions have aarch64 instruction equivalent

Change-Id: I1284f31b9f78f914281e5563b8d44db8362b627d
This commit is contained in:
Amaury Le Leyzour
2015-02-17 15:05:51 -08:00
committed by Christopher Ferris
parent d5c2745ca8
commit 32936c895d
8 changed files with 285 additions and 22 deletions

27
libm/arm64/ceil.S Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(ceil)
frintP d0, d0
ret
END(ceil)
ENTRY(ceilf)
frintP s0, s0
ret
END(ceilf)

27
libm/arm64/floor.S Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(floor)
frintM d0, d0
ret
END(floor)
ENTRY(floorf)
frintM s0, s0
ret
END(floorf)

27
libm/arm64/fma.S Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(fma)
fmadd d0, d0, d1, d2
ret
END(fma)
ENTRY(fmaf)
fmadd s0, s0, s1, s2
ret
END(fmaf)

36
libm/arm64/lrint.S Normal file
View File

@@ -0,0 +1,36 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(lrint)
frintX d0, d0
fcvtzs x0, d0
ret
END(lrint)
ENTRY(lrintf)
frintX s0, s0
fcvtzs x0, s0
ret
END(lrintf)
// sizeof(long) and sizeof(long long) are the same for aarch64
.weak llrint
.equ llrint,lrint
.weak llrintf
.equ llrintf,lrintf

27
libm/arm64/rint.S Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(rint)
frintX d0, d0
ret
END(rint)
ENTRY(rintf)
frintX s0, s0
ret
END(rintf)

27
libm/arm64/sqrt.S Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(sqrt)
fsqrt d0, d0
ret
END(sqrt)
ENTRY(sqrtf)
fsqrt s0, s0
ret
END(sqrtf)

27
libm/arm64/trunc.S Normal file
View File

@@ -0,0 +1,27 @@
/*
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <private/bionic_asm.h>
ENTRY(trunc)
frintZ d0, d0
ret
END(trunc)
ENTRY(truncf)
frintZ s0, s0
ret
END(truncf)