diff options
Diffstat (limited to 'ports/sysdeps/powerpc/powerpc32')
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/memcmp.S | 128 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/memcpy.S | 130 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/memset.S | 152 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/strcmp.S | 134 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/strcpy.S | 107 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/strlen.S | 75 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/405/strncmp.S | 128 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/440/Implies | 2 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/464/Implies | 2 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/476/Implies | 2 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/476/memset.S | 152 | ||||
-rw-r--r-- | ports/sysdeps/powerpc/powerpc32/Makefile | 8 |
12 files changed, 0 insertions, 1020 deletions
diff --git a/ports/sysdeps/powerpc/powerpc32/405/memcmp.S b/ports/sysdeps/powerpc/powerpc32/405/memcmp.S deleted file mode 100644 index 2849461cd7..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/memcmp.S +++ /dev/null @@ -1,128 +0,0 @@ -/* Optimized memcmp implementation for PowerPC476. - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* memcmp - - r3:source1 address, return equality - r4:source2 address - r5:byte count - - Check 2 words from src1 and src2. If unequal jump to end and - return src1 > src2 or src1 < src2. - If count = zero check bytes before zero counter and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If src1 = src2 and no null, repeat. */ - -EALIGN (memcmp, 5, 0) - srwi. r6,r5,5 - beq L(preword2_count_loop) - mtctr r6 - clrlwi r5,r5,27 - -L(word8_compare_loop): - lwz r10,0(r3) - lwz r6,4(r3) - lwz r8,0(r4) - lwz r9,4(r4) - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - lwz r10,8(r3) - lwz r6,12(r3) - lwz r8,8(r4) - lwz r9,12(r4) - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - lwz r10,16(r3) - lwz r6,20(r3) - lwz r8,16(r4) - lwz r9,20(r4) - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - lwz r10,24(r3) - lwz r6,28(r3) - addi r3,r3,0x20 - lwz r8,24(r4) - lwz r9,28(r4) - addi r4,r4,0x20 - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - bdnz L(word8_compare_loop) - -L(preword2_count_loop): - srwi. r6,r5,3 - beq L(prebyte_count_loop) - mtctr r6 - clrlwi r5,r5,29 - -L(word2_count_loop): - lwz r10,0(r3) - lwz r6,4(r3) - addi r3,r3,0x08 - lwz r8,0(r4) - lwz r9,4(r4) - addi r4,r4,0x08 - cmplw cr5,r8,r10 - cmplw cr1,r9,r6 - bne cr5,L(st2) - bne cr1,L(st1) - bdnz L(word2_count_loop) - -L(prebyte_count_loop): - addi r5,r5,1 - mtctr r5 - bdz L(end_memcmp) - -L(byte_count_loop): - lbz r6,0(r3) - addi r3,r3,0x01 - lbz r8,0(r4) - addi r4,r4,0x01 - cmplw cr5,r8,r6 - bne cr5,L(st2) - bdnz L(byte_count_loop) - -L(end_memcmp): - addi r3,r0,0 - blr - -L(l_r): - addi r3,r0,1 - blr - -L(st1): - blt cr1,L(l_r) - addi r3,r0,-1 - blr - -L(st2): - blt cr5,L(l_r) - addi r3,r0,-1 - blr -END (memcmp) -libc_hidden_builtin_def (memcmp) -weak_alias (memcmp,bcmp) diff --git a/ports/sysdeps/powerpc/powerpc32/405/memcpy.S b/ports/sysdeps/powerpc/powerpc32/405/memcpy.S deleted file mode 100644 index b01d539209..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/memcpy.S +++ /dev/null @@ -1,130 +0,0 @@ -/* Optimized memcpy implementation for PowerPC476. - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* memcpy - - r0:return address - r3:destination address - r4:source address - r5:byte count - - Save return address in r0. - If destinationn and source are unaligned and copy count is greater than 256 - then copy 0-3 bytes to make destination aligned. - If 32 or more bytes to copy we use 32 byte copy loop. - Finaly we copy 0-31 extra bytes. */ - -EALIGN (memcpy, 5, 0) -/* Check if bytes to copy are greater than 256 and if - source and destination are unaligned */ - cmpwi r5,0x0100 - addi r0,r3,0 - ble L(string_count_loop) - neg r6,r3 - clrlwi. r6,r6,30 - beq L(string_count_loop) - neg r6,r4 - clrlwi. r6,r6,30 - beq L(string_count_loop) - mtctr r6 - subf r5,r6,r5 - -L(unaligned_bytecopy_loop): /* Align destination by coping 0-3 bytes */ - lbz r8,0x0(r4) - addi r4,r4,1 - stb r8,0x0(r3) - addi r3,r3,1 - bdnz L(unaligned_bytecopy_loop) - srwi. r7,r5,5 - beq L(preword2_count_loop) - mtctr r7 - -L(word8_count_loop_no_dcbt): /* Copy 32 bytes at a time */ - lwz r6,0(r4) - lwz r7,4(r4) - lwz r8,8(r4) - lwz r9,12(r4) - subi r5,r5,0x20 - stw r6,0(r3) - stw r7,4(r3) - stw r8,8(r3) - stw r9,12(r3) - lwz r6,16(r4) - lwz r7,20(r4) - lwz r8,24(r4) - lwz r9,28(r4) - addi r4,r4,0x20 - stw r6,16(r3) - stw r7,20(r3) - stw r8,24(r3) - stw r9,28(r3) - addi r3,r3,0x20 - bdnz L(word8_count_loop_no_dcbt) - -L(preword2_count_loop): /* Copy remaining 0-31 bytes */ - clrlwi. r12,r5,27 - beq L(end_memcpy) - mtxer r12 - lswx r5,0,r4 - stswx r5,0,r3 - mr r3,r0 - blr - -L(string_count_loop): /* Copy odd 0-31 bytes */ - clrlwi. r12,r5,28 - add r3,r3,r5 - add r4,r4,r5 - beq L(pre_string_copy) - mtxer r12 - subf r4,r12,r4 - subf r3,r12,r3 - lswx r6,0,r4 - stswx r6,0,r3 - -L(pre_string_copy): /* Check how many 32 byte chunks to copy */ - srwi. r7,r5,4 - beq L(end_memcpy) - mtctr r7 - -L(word4_count_loop_no_dcbt): /* Copy 32 bytes at a time */ - lwz r6,-4(r4) - lwz r7,-8(r4) - lwz r8,-12(r4) - lwzu r9,-16(r4) - stw r6,-4(r3) - stw r7,-8(r3) - stw r8,-12(r3) - stwu r9,-16(r3) - bdz L(end_memcpy) - lwz r6,-4(r4) - lwz r7,-8(r4) - lwz r8,-12(r4) - lwzu r9,-16(r4) - stw r6,-4(r3) - stw r7,-8(r3) - stw r8,-12(r3) - stwu r9,-16(r3) - bdnz L(word4_count_loop_no_dcbt) - -L(end_memcpy): - mr r3,r0 - blr -END (memcpy) -libc_hidden_builtin_def (memcpy) diff --git a/ports/sysdeps/powerpc/powerpc32/405/memset.S b/ports/sysdeps/powerpc/powerpc32/405/memset.S deleted file mode 100644 index b73dba8873..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/memset.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Optimized memset for PowerPC405,440,464 (32-byte cacheline). - Copyright (C) 2012-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* memset - - r3:destination address and return address - r4:source integer to copy - r5:byte count - r11:sources integer to copy in all 32 bits of reg - r12:temp return address - - Save return address in r12 - If destinationn is unaligned and count is greater tha 255 bytes - set 0-3 bytes to make destination aligned - If count is greater tha 255 bytes and setting zero to memory - use dbcz to set memeory when we can - otherwsie do the follwoing - If 16 or more words to set we use 16 word copy loop. - Finaly we set 0-15 extra bytes with string store. */ - -EALIGN (memset, 5, 0) - rlwinm r11,r4,0,24,31 - rlwimi r11,r4,8,16,23 - rlwimi r11,r11,16,0,15 - addi r12,r3,0 - cmpwi r5,0x00FF - ble L(preword8_count_loop) - cmpwi r4,0x00 - beq L(use_dcbz) - neg r6,r3 - clrlwi. r6,r6,30 - beq L(preword8_count_loop) - addi r8,0,1 - mtctr r6 - subi r3,r3,1 - -L(unaligned_bytecopy_loop): - stbu r11,0x1(r3) - subf. r5,r8,r5 - beq L(end_memset) - bdnz L(unaligned_bytecopy_loop) - addi r3,r3,1 - -L(preword8_count_loop): - srwi. r6,r5,4 - beq L(preword2_count_loop) - mtctr r6 - addi r3,r3,-4 - mr r8,r11 - mr r9,r11 - mr r10,r11 - -L(word8_count_loop_no_dcbt): - stwu r8,4(r3) - stwu r9,4(r3) - subi r5,r5,0x10 - stwu r10,4(r3) - stwu r11,4(r3) - bdnz L(word8_count_loop_no_dcbt) - addi r3,r3,4 - -L(preword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - -L(end_memset): - addi r3,r12,0 - blr - -L(use_dcbz): - neg r6,r3 - clrlwi. r7,r6,28 - beq L(skip_string_loop) - mr r8,r11 - mr r9,r11 - mr r10,r11 - subf r5,r7,r5 - mtxer r7 - stswx r8,0,r3 - add r3,r3,r7 - -L(skip_string_loop): - clrlwi r8,r6,27 - srwi. r8,r8,4 - beq L(dcbz_pre_loop) - mtctr r8 - -L(word_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(word_loop) - -L(dcbz_pre_loop): - srwi r6,r5,5 - mtctr r6 - addi r7,0,0 - -L(dcbz_loop): - dcbz r3,r7 - addi r3,r3,0x20 - subi r5,r5,0x20 - bdnz L(dcbz_loop) - srwi. r6,r5,4 - beq L(postword2_count_loop) - mtctr r6 - -L(postword8_count_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(postword8_count_loop) - -L(postword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - b L(end_memset) -END (memset) -libc_hidden_builtin_def (memset) diff --git a/ports/sysdeps/powerpc/powerpc32/405/strcmp.S b/ports/sysdeps/powerpc/powerpc32/405/strcmp.S deleted file mode 100644 index c0b21907be..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/strcmp.S +++ /dev/null @@ -1,134 +0,0 @@ -/* Optimized strcmp implementation for PowerPC476. - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* strcmp - - Register Use - r0:temp return equality - r3:source1 address, return equality - r4:source2 address - - Implementation description - Check 2 words from src1 and src2. If unequal jump to end and - return src1 > src2 or src1 < src2. - If null check bytes before null and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If src1 = src2 and no null, repeat. */ - -EALIGN (strcmp,5,0) - neg r7,r3 - clrlwi r7,r7,20 - neg r8,r4 - clrlwi r8,r8,20 - srwi. r7,r7,5 - beq L(byte_loop) - srwi. r8,r8,5 - beq L(byte_loop) - cmplw r7,r8 - mtctr r7 - ble L(big_loop) - mtctr r8 - -L(big_loop): - lwz r5,0(r3) - lwz r6,4(r3) - lwz r8,0(r4) - lwz r9,4(r4) - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - lwz r5,8(r3) - lwz r6,12(r3) - lwz r8,8(r4) - lwz r9,12(r4) - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - lwz r5,16(r3) - lwz r6,20(r3) - lwz r8,16(r4) - lwz r9,20(r4) - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - lwz r5,24(r3) - lwz r6,28(r3) - addi r3,r3,0x20 - lwz r8,24(r4) - lwz r9,28(r4) - addi r4,r4,0x20 - dlmzb. r12,r5,r6 - bne L(end_check) - cmplw r5,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - bdnz L(big_loop) - b L(byte_loop) - -L(end_check): - subfic r12,r12,4 - blt L(end_check2) - rlwinm r12,r12,3,0,31 - srw r5,r5,r12 - srw r8,r8,r12 - cmplw r5,r8 - bne L(st1) - b L(end_strcmp) - -L(end_check2): - addi r12,r12,4 - cmplw r5,r8 - rlwinm r12,r12,3,0,31 - bne L(st1) - srw r6,r6,r12 - srw r9,r9,r12 - cmplw r6,r9 - bne L(st1) - -L(end_strcmp): - addi r3,r0,0 - blr - -L(st1): - mfcr r3 - blr - -L(byte_loop): - lbz r5,0(r3) - addi r3,r3,1 - lbz r6,0(r4) - addi r4,r4,1 - cmplw r5,r6 - bne L(st1) - cmpwi r5,0 - beq L(end_strcmp) - b L(byte_loop) -END (strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/ports/sysdeps/powerpc/powerpc32/405/strcpy.S b/ports/sysdeps/powerpc/powerpc32/405/strcpy.S deleted file mode 100644 index d7c84569d9..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/strcpy.S +++ /dev/null @@ -1,107 +0,0 @@ -/* Optimized strcpy implementation for PowerPC476. - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* strcpy - - Register Use - r3:destination and return address - r4:source address - r10:temp destination address - - Implementation description - Loop by checking 2 words at a time, with dlmzb. Check if there is a null - in the 2 words. If there is a null jump to end checking to determine - where in the last 8 bytes it is. Copy the appropriate bytes of the last - 8 according to the null position. */ - -EALIGN (strcpy, 5, 0) - neg r7,r4 - subi r4,r4,1 - clrlwi. r8,r7,29 - subi r10,r3,1 - beq L(pre_word8_loop) - mtctr r8 - -L(loop): - lbzu r5,0x01(r4) - cmpi cr5,r5,0x0 - stbu r5,0x01(r10) - beq cr5,L(end_strcpy) - bdnz L(loop) - -L(pre_word8_loop): - subi r4,r4,3 - subi r10,r10,3 - -L(word8_loop): - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - lwzu r5,0x04(r4) - lwzu r6,0x04(r4) - dlmzb. r11,r5,r6 - bne L(byte_copy) - stwu r5,0x04(r10) - stwu r6,0x04(r10) - b L(word8_loop) - -L(last_bytes_copy): - stwu r5,0x04(r10) - subi r11,r11,4 - mtctr r11 - addi r10,r10,3 - subi r4,r4,1 - -L(last_bytes_copy_loop): - lbzu r5,0x01(r4) - stbu r5,0x01(r10) - bdnz L(last_bytes_copy_loop) - blr - -L(byte_copy): - blt L(last_bytes_copy) - mtctr r11 - addi r10,r10,3 - subi r4,r4,5 - -L(last_bytes_copy_loop2): - lbzu r5,0x01(r4) - stbu r5,0x01(r10) - bdnz L(last_bytes_copy_loop2) - -L(end_strcpy): - blr -END (strcpy) -libc_hidden_builtin_def (strcpy) diff --git a/ports/sysdeps/powerpc/powerpc32/405/strlen.S b/ports/sysdeps/powerpc/powerpc32/405/strlen.S deleted file mode 100644 index 77d22ea673..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/strlen.S +++ /dev/null @@ -1,75 +0,0 @@ -/* Optimized strlen implementation for PowerPC476. - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* strlen - - Register Use - r3:source address and return length of string - r4:byte counter - - Implementation description - Load 2 words at a time and count bytes, if we find null we subtract one from - the count and return the count value. We need to subtract one because - we don't count the null character as a byte. */ - -EALIGN (strlen,5,0) - neg r7,r3 - clrlwi. r8,r7,29 - addi r4,0,0 - beq L(byte_count_loop) - mtctr r8 - -L(loop): - lbz r5,0(r3) - cmpi cr5,r5,0x0 - addi r3,r3,0x1 - addi r4,r4,0x1 - beq cr5,L(end_strlen) - bdnz L(loop) - -L(byte_count_loop): - lwz r5,0(r3) - lwz r6,4(r3) - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - lwz r5,8(r3) - lwz r6,12(r3) - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - lwz r5,16(r3) - lwz r6,20(r3) - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - lwz r5,24(r3) - lwz r6,28(r3) - addi r3,r3,0x20 - dlmzb. r12,r5,r6 - add r4,r4,r12 - bne L(end_strlen) - b L(byte_count_loop) - -L(end_strlen): - addi r3,r4,-1 - blr -END (strlen) -libc_hidden_builtin_def (strlen) diff --git a/ports/sysdeps/powerpc/powerpc32/405/strncmp.S b/ports/sysdeps/powerpc/powerpc32/405/strncmp.S deleted file mode 100644 index 3e2ba5f855..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/405/strncmp.S +++ /dev/null @@ -1,128 +0,0 @@ -/* Optimized strncmp implementation for PowerPC476. - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* strncmp - - Register Use - r0:temp return equality - r3:source1 address, return equality - r4:source2 address - r5:byte count - - Implementation description - Touch in 3 lines of D-cache. - If source1 or source2 is unaligned copy 0-3 bytes to make source1 aligned - Check 2 words from src1 and src2. If unequal jump to end and - return src1 > src2 or src1 < src2. - If null check bytes before null and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If count = zero check bytes before zero counter and then jump to end and - return src1 > src2, src1 < src2 or src1 = src2. - If src1 = src2 and no null, repeat. */ - -EALIGN (strncmp,5,0) - neg r7,r3 - clrlwi r7,r7,20 - neg r8,r4 - clrlwi r8,r8,20 - srwi. r7,r7,3 - beq L(prebyte_count_loop) - srwi. r8,r8,3 - beq L(prebyte_count_loop) - cmplw r7,r8 - mtctr r7 - ble L(preword2_count_loop) - mtctr r8 - -L(preword2_count_loop): - srwi. r6,r5,3 - beq L(prebyte_count_loop) - mfctr r7 - cmplw r6,r7 - bgt L(set_count_loop) - mtctr r6 - clrlwi r5,r5,29 - -L(word2_count_loop): - lwz r10,0(r3) - lwz r6,4(r3) - addi r3,r3,0x08 - lwz r8,0(r4) - lwz r9,4(r4) - addi r4,r4,0x08 - dlmzb. r12,r10,r6 - bne L(end_check) - cmplw r10,r8 - bne L(st1) - cmplw r6,r9 - bne L(st1) - bdnz L(word2_count_loop) - -L(prebyte_count_loop): - addi r5,r5,1 - mtctr r5 - bdz L(end_strncmp) - -L(byte_count_loop): - lbz r6,0(r3) - addi r3,r3,1 - lbz r7,0(r4) - addi r4,r4,1 - cmplw r6,r7 - bne L(st1) - cmpwi r6,0 - beq L(end_strncmp) - bdnz L(byte_count_loop) - b L(end_strncmp) - -L(set_count_loop): - slwi r7,r7,3 - subf r5,r7,r5 - b L(word2_count_loop) - -L(end_check): - subfic r12,r12,4 - blt L(end_check2) - rlwinm r12,r12,3,0,31 - srw r10,r10,r12 - srw r8,r8,r12 - cmplw r10,r8 - bne L(st1) - b L(end_strncmp) - -L(end_check2): - addi r12,r12,4 - cmplw r10,r8 - rlwinm r12,r12,3,0,31 - bne L(st1) - srw r6,r6,r12 - srw r9,r9,r12 - cmplw r6,r9 - bne L(st1) - -L(end_strncmp): - addi r3,r0,0 - blr - -L(st1): - mfcr r3 - blr -END (strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/ports/sysdeps/powerpc/powerpc32/440/Implies b/ports/sysdeps/powerpc/powerpc32/440/Implies deleted file mode 100644 index 70c0d2eda3..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/440/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/405/fpu -powerpc/powerpc32/405 diff --git a/ports/sysdeps/powerpc/powerpc32/464/Implies b/ports/sysdeps/powerpc/powerpc32/464/Implies deleted file mode 100644 index c3e52c5504..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/464/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/440/fpu -powerpc/powerpc32/440 diff --git a/ports/sysdeps/powerpc/powerpc32/476/Implies b/ports/sysdeps/powerpc/powerpc32/476/Implies deleted file mode 100644 index 2829f9ccaf..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/476/Implies +++ /dev/null @@ -1,2 +0,0 @@ -powerpc/powerpc32/464/fpu -powerpc/powerpc32/464 diff --git a/ports/sysdeps/powerpc/powerpc32/476/memset.S b/ports/sysdeps/powerpc/powerpc32/476/memset.S deleted file mode 100644 index 48c21d6209..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/476/memset.S +++ /dev/null @@ -1,152 +0,0 @@ -/* Optimized memset for PowerPC476 (128-byte cacheline). - Copyright (C) 2010-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* memset - - r3:destination address and return address - r4:source integer to copy - r5:byte count - r11:sources integer to copy in all 32 bits of reg - r12:temp return address - - Save return address in r12 - If destinationn is unaligned and count is greater tha 255 bytes - set 0-3 bytes to make destination aligned - If count is greater tha 255 bytes and setting zero to memory - use dbcz to set memeory when we can - otherwsie do the follwoing - If 16 or more words to set we use 16 word copy loop. - Finaly we set 0-15 extra bytes with string store. */ - -EALIGN (memset, 5, 0) - rlwinm r11,r4,0,24,31 - rlwimi r11,r4,8,16,23 - rlwimi r11,r11,16,0,15 - addi r12,r3,0 - cmpwi r5,0x00FF - ble L(preword8_count_loop) - cmpwi r4,0x00 - beq L(use_dcbz) - neg r6,r3 - clrlwi. r6,r6,30 - beq L(preword8_count_loop) - addi r8,0,1 - mtctr r6 - subi r3,r3,1 - -L(unaligned_bytecopy_loop): - stbu r11,0x1(r3) - subf. r5,r8,r5 - beq L(end_memset) - bdnz L(unaligned_bytecopy_loop) - addi r3,r3,1 - -L(preword8_count_loop): - srwi. r6,r5,4 - beq L(preword2_count_loop) - mtctr r6 - addi r3,r3,-4 - mr r8,r11 - mr r9,r11 - mr r10,r11 - -L(word8_count_loop_no_dcbt): - stwu r8,4(r3) - stwu r9,4(r3) - subi r5,r5,0x10 - stwu r10,4(r3) - stwu r11,4(r3) - bdnz L(word8_count_loop_no_dcbt) - addi r3,r3,4 - -L(preword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - -L(end_memset): - addi r3,r12,0 - blr - -L(use_dcbz): - neg r6,r3 - clrlwi. r7,r6,28 - beq L(skip_string_loop) - mr r8,r11 - mr r9,r11 - mr r10,r11 - subf r5,r7,r5 - mtxer r7 - stswx r8,0,r3 - add r3,r3,r7 - -L(skip_string_loop): - clrlwi r8,r6,25 - srwi. r8,r8,4 - beq L(dcbz_pre_loop) - mtctr r8 - -L(word_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(word_loop) - -L(dcbz_pre_loop): - srwi r6,r5,7 - mtctr r6 - addi r7,0,0 - -L(dcbz_loop): - dcbz r3,r7 - addi r3,r3,0x80 - subi r5,r5,0x80 - bdnz L(dcbz_loop) - srwi. r6,r5,4 - beq L(postword2_count_loop) - mtctr r6 - -L(postword8_count_loop): - stw r11,0(r3) - subi r5,r5,0x10 - stw r11,4(r3) - stw r11,8(r3) - stw r11,12(r3) - addi r3,r3,0x10 - bdnz L(postword8_count_loop) - -L(postword2_count_loop): - clrlwi. r7,r5,28 - beq L(end_memset) - mr r8,r11 - mr r9,r11 - mr r10,r11 - mtxer r7 - stswx r8,0,r3 - b L(end_memset) -END (memset) -libc_hidden_builtin_def (memset) diff --git a/ports/sysdeps/powerpc/powerpc32/Makefile b/ports/sysdeps/powerpc/powerpc32/Makefile deleted file mode 100644 index 3d235deeb9..0000000000 --- a/ports/sysdeps/powerpc/powerpc32/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# Some Powerpc32 variants assume soft-fp is the default even though there is -# an fp variant so provide -mhard-float if --with-fp is explicitly passed. - -ifeq ($(with-fp),yes) -+cflags += -mhard-float -ASFLAGS += -mhard-float -sysdep-LDFLAGS += -mhard-float -endif |