From 01d5b946acac8519d510781967bf538acdae1853 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 2 Mar 2016 17:18:18 -0800 Subject: [PATCH] Remove optimized code for bzero, which was removed from POSIX in 2008. I'll come back for the last bcopy remnant... Bug: http://b/26407170 Change-Id: Iabfeb95fc8a4b4b3992e3cc209ec5221040e7c26 --- libc/arch-arm/cortex-a15/bionic/memset.S | 9 +---- libc/arch-arm/cortex-a7/bionic/memset.S | 9 +---- libc/arch-arm/cortex-a9/bionic/memset.S | 10 +---- libc/arch-arm/denver/bionic/memset.S | 9 +---- libc/arch-arm/generic/bionic/memset.S | 10 +---- libc/arch-arm/krait/bionic/memset.S | 10 +---- libc/arch-mips/bionic/bzero.S | 39 ------------------- libc/arch-mips/mips.mk | 1 - libc/arch-x86/atom/atom.mk | 2 - libc/arch-x86/atom/string/sse2-bzero-atom.S | 33 ---------------- libc/arch-x86/atom/string/sse2-memset-atom.S | 22 ++--------- .../silvermont/string/sse2-bzero-slm.S | 33 ---------------- .../silvermont/string/sse2-memset-slm.S | 22 ++--------- libc/arch-x86/x86.mk | 1 - libc/arch-x86_64/string/sse2-memset-slm.S | 9 ----- libc/bionic/ndk_cruft.cpp | 6 +++ 16 files changed, 20 insertions(+), 205 deletions(-) delete mode 100644 libc/arch-mips/bionic/bzero.S delete mode 100644 libc/arch-x86/atom/string/sse2-bzero-atom.S delete mode 100644 libc/arch-x86/silvermont/string/sse2-bzero-slm.S diff --git a/libc/arch-arm/cortex-a15/bionic/memset.S b/libc/arch-arm/cortex-a15/bionic/memset.S index 732a03931..6458f97ea 100644 --- a/libc/arch-arm/cortex-a15/bionic/memset.S +++ b/libc/arch-arm/cortex-a15/bionic/memset.S @@ -40,7 +40,7 @@ ENTRY(__memset_chk) cmp r2, r3 - bls .L_done + bls memset // Preserve lr for backtrace. push {lr} @@ -50,13 +50,6 @@ ENTRY(__memset_chk) bl __memset_chk_fail END(__memset_chk) -ENTRY(bzero) - mov r2, r1 - mov r1, #0 -.L_done: - // Fall through to memset... -END(bzero) - ENTRY(memset) stmfd sp!, {r0} .cfi_def_cfa_offset 4 diff --git a/libc/arch-arm/cortex-a7/bionic/memset.S b/libc/arch-arm/cortex-a7/bionic/memset.S index 0b96d62f0..357416cae 100644 --- a/libc/arch-arm/cortex-a7/bionic/memset.S +++ b/libc/arch-arm/cortex-a7/bionic/memset.S @@ -40,7 +40,7 @@ ENTRY(__memset_chk) cmp r2, r3 - bls .L_done + bls memset // Preserve lr for backtrace. push {lr} @@ -50,13 +50,6 @@ ENTRY(__memset_chk) bl __memset_chk_fail END(__memset_chk) -ENTRY(bzero) - mov r2, r1 - mov r1, #0 -.L_done: - // Fall through to memset... -END(bzero) - ENTRY(memset) mov r3, r0 // At this point only d0, d1 are going to be used below. diff --git a/libc/arch-arm/cortex-a9/bionic/memset.S b/libc/arch-arm/cortex-a9/bionic/memset.S index a2c811066..d00231bdc 100644 --- a/libc/arch-arm/cortex-a9/bionic/memset.S +++ b/libc/arch-arm/cortex-a9/bionic/memset.S @@ -38,7 +38,7 @@ ENTRY(__memset_chk) cmp r2, r3 - bls .L_done + bls memset // Preserve lr for backtrace. push {lr} @@ -48,14 +48,6 @@ ENTRY(__memset_chk) bl __memset_chk_fail END(__memset_chk) -ENTRY(bzero) - mov r2, r1 - mov r1, #0 - -.L_done: - // Fall through to memset... -END(bzero) - /* memset() returns its first argument. */ ENTRY(memset) // The neon memset only wins for less than 132. diff --git a/libc/arch-arm/denver/bionic/memset.S b/libc/arch-arm/denver/bionic/memset.S index 8d79e5b46..1b0152a00 100644 --- a/libc/arch-arm/denver/bionic/memset.S +++ b/libc/arch-arm/denver/bionic/memset.S @@ -42,7 +42,7 @@ ENTRY(__memset_chk) cmp r2, r3 - bls .L_done + bls memset // Preserve lr for backtrace. push {lr} @@ -52,13 +52,6 @@ ENTRY(__memset_chk) bl __memset_chk_fail END(__memset_chk) -ENTRY(bzero) - mov r2, r1 - mov r1, #0 -.L_done: - // Fall through to memset... -END(bzero) - ENTRY(memset) pldw [r0] mov r3, r0 diff --git a/libc/arch-arm/generic/bionic/memset.S b/libc/arch-arm/generic/bionic/memset.S index 6e7039712..1fd0de1db 100644 --- a/libc/arch-arm/generic/bionic/memset.S +++ b/libc/arch-arm/generic/bionic/memset.S @@ -38,19 +38,11 @@ ENTRY(__memset_chk) cmp r2, r3 - bls done + bls memset bl __memset_chk_fail END(__memset_chk) -ENTRY(bzero) - mov r2, r1 - mov r1, #0 - -done: - // Fall through to memset... -END(bzero) - ENTRY(memset) /* compute the offset to align the destination * offset = (4-(src&3))&3 = -src & 3 diff --git a/libc/arch-arm/krait/bionic/memset.S b/libc/arch-arm/krait/bionic/memset.S index 0264dd3dd..81ba74b73 100644 --- a/libc/arch-arm/krait/bionic/memset.S +++ b/libc/arch-arm/krait/bionic/memset.S @@ -40,7 +40,7 @@ ENTRY(__memset_chk) cmp r2, r3 - bls .L_done + bls memset // Preserve lr for backtrace. push {lr} @@ -50,14 +50,6 @@ ENTRY(__memset_chk) bl __memset_chk_fail END(__memset_chk) -ENTRY(bzero) - mov r2, r1 - mov r1, #0 - -.L_done: - // Fall through to memset... -END(bzero) - /* memset() returns its first argument. */ ENTRY(memset) mov r3, r0 diff --git a/libc/arch-mips/bionic/bzero.S b/libc/arch-mips/bionic/bzero.S deleted file mode 100644 index 6e5d2947f..000000000 --- a/libc/arch-mips/bionic/bzero.S +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -// void bzero(void*, size_t); -ENTRY(bzero) - .set noreorder - .cpload t9 - move a2,a1 - la t9,memset - j t9 - move a1,zero -END(bzero) diff --git a/libc/arch-mips/mips.mk b/libc/arch-mips/mips.mk index 3663fab81..b98d52590 100644 --- a/libc/arch-mips/mips.mk +++ b/libc/arch-mips/mips.mk @@ -12,7 +12,6 @@ libc_bionic_src_files_mips += \ libc_bionic_src_files_mips += \ arch-mips/bionic/__bionic_clone.S \ - arch-mips/bionic/bzero.S \ arch-mips/bionic/cacheflush.cpp \ arch-mips/bionic/_exit_with_stack_teardown.S \ arch-mips/bionic/libgcc_compat.c \ diff --git a/libc/arch-x86/atom/atom.mk b/libc/arch-x86/atom/atom.mk index 1afabaca0..34e4c58b1 100644 --- a/libc/arch-x86/atom/atom.mk +++ b/libc/arch-x86/atom/atom.mk @@ -1,5 +1,4 @@ libc_bionic_src_files_x86 += \ - arch-x86/atom/string/sse2-bzero-atom.S \ arch-x86/atom/string/sse2-memset-atom.S \ arch-x86/atom/string/sse2-strlen-atom.S \ arch-x86/atom/string/ssse3-bcopy-atom.S \ @@ -15,7 +14,6 @@ libc_bionic_src_files_exclude_x86 += \ libc_bionic_src_files_exclude_x86 += \ arch-x86/silvermont/string/sse2-bcopy-slm.S \ - arch-x86/silvermont/string/sse2-bzero-slm.S \ arch-x86/silvermont/string/sse2-memcpy-slm.S \ arch-x86/silvermont/string/sse2-memmove-slm.S \ arch-x86/silvermont/string/sse2-memset-slm.S \ diff --git a/libc/arch-x86/atom/string/sse2-bzero-atom.S b/libc/arch-x86/atom/string/sse2-bzero-atom.S deleted file mode 100644 index 0ddc4992e..000000000 --- a/libc/arch-x86/atom/string/sse2-bzero-atom.S +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright (c) 2010, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - - * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define USE_AS_BZERO -#define MEMSET bzero -#include "sse2-memset-atom.S" diff --git a/libc/arch-x86/atom/string/sse2-memset-atom.S b/libc/arch-x86/atom/string/sse2-memset-atom.S index b0963a187..e8ceee18f 100644 --- a/libc/arch-x86/atom/string/sse2-memset-atom.S +++ b/libc/arch-x86/atom/string/sse2-memset-atom.S @@ -84,16 +84,10 @@ name: \ #define PUSH(REG) pushl REG; CFI_PUSH (REG) #define POP(REG) popl REG; CFI_POP (REG) -#ifdef USE_AS_BZERO -# define DEST PARMS -# define LEN DEST+4 -# define SETRTNVAL -#else -# define DEST PARMS -# define CHR DEST+4 -# define LEN CHR+4 -# define SETRTNVAL movl DEST(%esp), %eax -#endif +#define DEST PARMS +#define CHR DEST+4 +#define LEN CHR+4 +#define SETRTNVAL movl DEST(%esp), %eax #if (defined SHARED || defined __PIC__) # define ENTRANCE PUSH (%ebx); @@ -148,16 +142,12 @@ ENTRY (MEMSET) ENTRANCE movl LEN(%esp), %ecx -#ifdef USE_AS_BZERO - xor %eax, %eax -#else movzbl CHR(%esp), %eax movb %al, %ah /* Fill the whole EAX with pattern. */ movl %eax, %edx shl $16, %eax or %edx, %eax -#endif movl DEST(%esp), %edx cmp $32, %ecx jae L(32bytesormore) @@ -287,12 +277,8 @@ L(write_3bytes): /* ECX > 32 and EDX is 4 byte aligned. */ L(32bytesormore): /* Fill xmm0 with the pattern. */ -#ifdef USE_AS_BZERO - pxor %xmm0, %xmm0 -#else movd %eax, %xmm0 pshufd $0, %xmm0, %xmm0 -#endif testl $0xf, %edx jz L(aligned_16) /* ECX > 32 and EDX is not 16 byte aligned. */ diff --git a/libc/arch-x86/silvermont/string/sse2-bzero-slm.S b/libc/arch-x86/silvermont/string/sse2-bzero-slm.S deleted file mode 100644 index b682ed686..000000000 --- a/libc/arch-x86/silvermont/string/sse2-bzero-slm.S +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright (c) 2014, Intel Corporation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - - * Neither the name of Intel Corporation nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#define USE_AS_BZERO -#define MEMSET bzero -#include "sse2-memset-slm.S" diff --git a/libc/arch-x86/silvermont/string/sse2-memset-slm.S b/libc/arch-x86/silvermont/string/sse2-memset-slm.S index c30bf7464..489f64e79 100644 --- a/libc/arch-x86/silvermont/string/sse2-memset-slm.S +++ b/libc/arch-x86/silvermont/string/sse2-memset-slm.S @@ -88,16 +88,10 @@ name: \ #define PUSH(REG) pushl REG; CFI_PUSH (REG) #define POP(REG) popl REG; CFI_POP (REG) -#ifdef USE_AS_BZERO -# define DEST PARMS -# define LEN DEST+4 -# define SETRTNVAL -#else -# define DEST PARMS -# define CHR DEST+4 -# define LEN CHR+4 -# define SETRTNVAL movl DEST(%esp), %eax -#endif +#define DEST PARMS +#define CHR DEST+4 +#define LEN CHR+4 +#define SETRTNVAL movl DEST(%esp), %eax #if (defined SHARED || defined __PIC__) # define ENTRANCE PUSH (%ebx); @@ -154,16 +148,12 @@ ENTRY (MEMSET) RETURN L(1byteormore): -#ifdef USE_AS_BZERO - xor %eax, %eax -#else movzbl CHR(%esp), %eax movb %al, %ah /* Fill the whole EAX with pattern. */ movl %eax, %edx shl $16, %eax or %edx, %eax -#endif movl DEST(%esp), %edx cmp $1, %ecx je L(1byte) @@ -195,12 +185,8 @@ L(1byte): ALIGN (4) L(16bytesormore): -#ifdef USE_AS_BZERO - pxor %xmm0, %xmm0 -#else movd %eax, %xmm0 pshufd $0, %xmm0, %xmm0 -#endif cmp $64, %ecx ja L(64bytesmore) diff --git a/libc/arch-x86/x86.mk b/libc/arch-x86/x86.mk index 1d717aa79..9e44a8694 100644 --- a/libc/arch-x86/x86.mk +++ b/libc/arch-x86/x86.mk @@ -15,7 +15,6 @@ libc_bionic_src_files_x86 += \ arch-x86/atom/string/sse2-wcslen-atom.S \ arch-x86/atom/string/sse2-wcscmp-atom.S \ arch-x86/silvermont/string/sse2-bcopy-slm.S \ - arch-x86/silvermont/string/sse2-bzero-slm.S \ arch-x86/silvermont/string/sse2-memcpy-slm.S \ arch-x86/silvermont/string/sse2-memmove-slm.S \ arch-x86/silvermont/string/sse2-memset-slm.S \ diff --git a/libc/arch-x86_64/string/sse2-memset-slm.S b/libc/arch-x86_64/string/sse2-memset-slm.S index bfcafae07..48671ec18 100644 --- a/libc/arch-x86_64/string/sse2-memset-slm.S +++ b/libc/arch-x86_64/string/sse2-memset-slm.S @@ -67,14 +67,9 @@ name: \ .section .text.sse2,"ax",@progbits ENTRY (MEMSET) movq %rdi, %rax -#ifdef USE_AS_BZERO_P - mov %rsi, %rdx - xor %rcx, %rcx -#else and $0xff, %rsi mov $0x0101010101010101, %rcx imul %rsi, %rcx -#endif cmpq $16, %rdx jae L(16bytesormore) testb $8, %dl @@ -106,12 +101,8 @@ L(2_3bytes): ALIGN (4) L(16bytesormore): -#ifdef USE_AS_BZERO_P - pxor %xmm0, %xmm0 -#else movd %rcx, %xmm0 pshufd $0, %xmm0, %xmm0 -#endif movdqu %xmm0, (%rdi) movdqu %xmm0, -16(%rdi, %rdx) cmpq $32, %rdx diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index 3ac88f867..6dc233afe 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -250,6 +250,12 @@ void bcopy(const void* src, void* dst, size_t n) { // x86 has an assembler implementation. #endif +// This was removed from POSIX 2008. +#undef bzero +void bzero(void* dst, size_t n) { + memset(dst, 0, n); +} + // sysv_signal() was never in POSIX. extern "C++" sighandler_t _signal(int signum, sighandler_t handler, int flags); sighandler_t sysv_signal(int signum, sighandler_t handler) {