summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/string/i386/string.c329
-rw-r--r--libc/string/powerpc/string.c214
-rw-r--r--libc/sysdeps/linux/alpha/sys/acct.h66
3 files changed, 0 insertions, 609 deletions
diff --git a/libc/string/i386/string.c b/libc/string/i386/string.c
deleted file mode 100644
index 8a7f1a89b..000000000
--- a/libc/string/i386/string.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * This string-include defines all string functions as inline
- * functions. Use gcc. It also assumes ds=es=data space, this should be
- * normal. Most of the string-functions are rather heavily hand-optimized,
- * see especially strtok,strstr,str[c]spn. They should work, but are not
- * very easy to understand. Everything is done entirely within the register
- * set, making the functions fast and clean. String instructions have been
- * used through-out, making for "slightly" unclear code :-)
- *
- * NO Copyright (C) 1991, 1992 Linus Torvalds,
- * consider these trivial functions to be PD.
- *
- * Modified for uClibc by Erik Andersen <andersen@codepoet.org>
- * These make no attempt to use nifty things like mmx/3dnow/etc.
- * These are not inline, and will therefore not be as fast as
- * modifying the headers to use inlines (and cannot therefore
- * do tricky things when dealing with const memory). But they
- * should (I hope!) be faster than their generic equivalents....
- *
- * More importantly, these should provide a good example for
- * others to follow when adding arch specific optimizations.
- * -Erik
- */
-
-#define _STDIO_UTILITY
-#define _GNU_SOURCE
-#include <string.h>
-#include <locale.h> /* for __LOCALE_C_ONLY */
-
-#ifdef L_strcpy
-char * strcpy(char * dest, const char * src)
-{
- int d0, d1, d2;
- __asm__ __volatile__(
- "1:\tlodsb\n\t"
- "stosb\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b"
- : "=&S" (d0), "=&D" (d1), "=&a" (d2)
- :"0" (src),"1" (dest) : "memory");
- return dest;
-}
-#endif
-
-
-#ifdef L_strncpy
-char * strncpy(char * dest, const char * src, size_t count)
-{
- int d0, d1, d2, d3;
- __asm__ __volatile__(
- "incl %2\n"
- "1:\n"
- "decl %2\n"
- "jz 2f\n"
- "lodsb\n\t"
- "stosb\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b\n\t"
- "decl %2\n"
- "rep\n\t"
- "stosb\n"
- "2:"
- : "=&S" (d0), "=&D" (d1), "=&c" (d2), "=&a" (d3)
- :"0" (src),"1" (dest),"2" (count) : "memory");
- return dest;
-}
-#endif
-
-
-#ifdef L_strcat
-char *strcat(char * dest, const char * src)
-{
- int d0, d1, d2, d3;
- __asm__ __volatile__(
- "repne\n\t"
- "scasb\n\t"
- "decl %1\n"
- "1:\tlodsb\n\t"
- "stosb\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b"
- : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3)
- : "0" (src), "1" (dest), "2" (0), "3" (0xffffffff):"memory");
- return dest;
-}
-#endif
-
-
-#ifdef L_strncat
-char *strncat(char * dest,
- const char * src, size_t count)
-{
- int d0, d1, d2, d3;
- __asm__ __volatile__(
- "repne\n\t"
- "scasb\n\t"
- "decl %1\n\t"
- "movl %8,%3\n"
- "incl %3\n"
- "1:\tdecl %3\n\t"
- "jz 2f\n"
- "lodsb\n\t"
- "stosb\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b\n"
- "jmp 3f\n"
- "2:\txorl %2,%2\n\t"
- "stosb\n"
- "3:"
- : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3)
- : "0" (src),"1" (dest),"2" (0),"3" (0xffffffff), "g" (count)
- : "memory");
- return dest;
-}
-#endif
-
-
-#ifdef L_strcmp
-int strcmp(const char *cs, const char *ct)
-{
- int d0, d1;
- register int __res;
- __asm__ __volatile__(
- "1:\tlodsb\n\t"
- "scasb\n\t"
- "jne 2f\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b\n\t"
- "xorl %%eax,%%eax\n\t"
- "jmp 3f\n"
- "2:\tsbbl %%eax,%%eax\n\t"
- "orb $1,%%al\n"
- "3:"
- :"=a" (__res), "=&S" (d0), "=&D" (d1)
- :"1" (cs),"2" (ct));
- return __res;
-}
-#ifdef __LOCALE_C_ONLY
-weak_alias(strcmp,strcoll);
-#endif /* __LOCALE_C_ONLY */
-#endif
-
-
-#ifdef L_strncmp
-int strncmp(const char *cs, const char *ct, size_t count)
-{
- register int __res;
- int d0, d1, d2;
- __asm__ __volatile__(
- "incl %3\n"
- "1:\tdecl %3\n\t"
- "jz 2f\n"
- "lodsb\n\t"
- "scasb\n\t"
- "jne 3f\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b\n"
- "2:\txorl %%eax,%%eax\n\t"
- "jmp 4f\n"
- "3:\tsbbl %%eax,%%eax\n\t"
- "orb $1,%%al\n"
- "4:"
- :"=a" (__res), "=&S" (d0), "=&D" (d1), "=&c" (d2)
- :"1" (cs),"2" (ct),"3" (count));
- return __res;
-}
-#endif
-
-
-#ifdef L_strchr
-char * strchr(const char *s, int c)
-{
- int d0;
- register char * __res;
- __asm__ __volatile__(
- "movb %%al,%%ah\n"
- "1:\tlodsb\n\t"
- "cmpb %%ah,%%al\n\t"
- "je 2f\n\t"
- "testb %%al,%%al\n\t"
- "jne 1b\n\t"
- "movl $1,%1\n"
- "2:\tmovl %1,%0\n\t"
- "decl %0"
- :"=a" (__res), "=&S" (d0) : "1" (s),"0" (c));
- return __res;
-}
-weak_alias(strchr,index);
-#endif
-
-
-#ifdef L_strrchr
-char *strrchr(const char *s, int c)
-{
- int d0, d1;
- register char * __res;
- __asm__ __volatile__(
- "movb %%al,%%ah\n"
- "1:\tlodsb\n\t"
- "cmpb %%ah,%%al\n\t"
- "jne 2f\n\t"
- "leal -1(%%esi),%0\n"
- "2:\ttestb %%al,%%al\n\t"
- "jne 1b"
- :"=g" (__res), "=&S" (d0), "=&a" (d1) :"0" (0),"1" (s),"2" (c));
- return __res;
-}
-weak_alias(strrchr,rindex);
-#endif
-
-
-
-#ifdef L_strlen
-size_t strlen(const char *s)
-{
- int d0;
- register int __res;
- __asm__ __volatile__(
- "repne\n\t"
- "scasb\n\t"
- "notl %0\n\t"
- "decl %0"
- :"=c" (__res), "=&D" (d0) :"1" (s),"a" (0), "0" (0xffffffff));
- return __res;
-}
-#endif
-
-
-#ifdef L_strnlen
-size_t strnlen(const char *s, size_t count)
-{
- int d0;
- register int __res;
- __asm__ __volatile__(
- "movl %2,%0\n\t"
- "incl %1\n"
- "jmp 2f\n"
- "1:\tcmpb $0,(%0)\n\t"
- "je 3f\n\t"
- "incl %0\n"
- "2:\tdecl %1\n\t"
- "jne 1b\n"
- "3:\tsubl %2,%0"
- :"=a" (__res), "=&d" (d0)
- :"c" (s),"1" (count));
- return __res;
-}
-#endif
-
-
-#ifdef L_memcpy
-void *memcpy(void * to, const void * from, size_t n)
-{
- int d0, d1, d2;
- __asm__ __volatile__(
- "rep ; movsl\n\t"
- "testb $2,%b4\n\t"
- "je 1f\n\t"
- "movsw\n"
- "1:\ttestb $1,%b4\n\t"
- "je 2f\n\t"
- "movsb\n"
- "2:"
- : "=&c" (d0), "=&D" (d1), "=&S" (d2)
- :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
- : "memory");
- return (to);
-}
-#endif
-
-
-#ifdef L_memmove
-void *memmove(void *dest, const void *src, size_t n)
-{
- int d0, d1, d2;
- if (dest<src)
- __asm__ __volatile__(
- "rep\n\t"
- "movsb"
- : "=&c" (d0), "=&S" (d1), "=&D" (d2)
- :"0" (n),"1" (src),"2" (dest)
- : "memory");
- else
- __asm__ __volatile__(
- "std\n\t"
- "rep\n\t"
- "movsb\n\t"
- "cld"
- : "=&c" (d0), "=&S" (d1), "=&D" (d2)
- :"0" (n),
- "1" (n-1+(const char *)src),
- "2" (n-1+(char *)dest)
- :"memory");
- return dest;
-}
-#endif
-
-#ifdef L_memchr
-void *memchr(const void *cs, int c, size_t count)
-{
- int d0;
- register void * __res;
- if (!count)
- return NULL;
- __asm__ __volatile__(
- "repne\n\t"
- "scasb\n\t"
- "je 1f\n\t"
- "movl $1,%0\n"
- "1:\tdecl %0"
- :"=D" (__res), "=&c" (d0) : "a" (c),"0" (cs),"1" (count));
- return __res;
-}
-#endif
-
-#ifdef L_memset
-void *memset(void *s, int c, size_t count)
-{
- int d0, d1;
- __asm__ __volatile__(
- "rep\n\t"
- "stosb"
- : "=&c" (d0), "=&D" (d1)
- :"a" (c),"1" (s),"0" (count)
- :"memory");
- return s;
-}
-#endif
-
diff --git a/libc/string/powerpc/string.c b/libc/string/powerpc/string.c
deleted file mode 100644
index acd5d0144..000000000
--- a/libc/string/powerpc/string.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Library General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- *
- * This program 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 Library General Public License for more
- * details.
- */
-
-/* These are carefully optimized mem*() functions for PPC written in C.
- * Don't muck around with these function without checking the generated
- * assmbler code.
- * It is possible to optimize these significantly more by using specific
- * data cache instructions(mainly dcbz). However that requires knownledge
- * about the CPU's cache line size.
- *
- * BUG ALERT!
- * The cache instructions on MPC8xx CPU's are buggy(they don't update
- * the DAR register when causing a DTLB Miss/Error) and cannot be
- * used on 8xx CPU's without a kernel patch to work around this
- * problem.
- *
- * Copyright (C) 2004 Joakim Tjernlund
- */
-
-#define _STDIO_UTILITY
-#define _GNU_SOURCE
-#include <string.h>
-#include <locale.h> /* for __LOCALE_C_ONLY */
-
-#ifdef L_memcpy
-void attribute_hidden *__memcpy(void *to, const void *from, size_t n)
-/* PPC can do pre increment and load/store, but not post increment and load/store.
- Therefore use *++ptr instead of *ptr++. */
-{
- unsigned long rem, chunks, tmp1, tmp2;
- unsigned char *tmp_to;
- unsigned char *tmp_from = (unsigned char *)from;
-
- chunks = n / 8;
- tmp_from -= 4;
- tmp_to = to - 4;
- if (!chunks)
- goto lessthan8;
- rem = (unsigned long )tmp_to % 4;
- if (rem)
- goto align;
- copy_chunks:
- do {
- /* make gcc to load all data, then store it */
- tmp1 = *(unsigned long *)(tmp_from+4);
- tmp_from += 8;
- tmp2 = *(unsigned long *)tmp_from;
- *(unsigned long *)(tmp_to+4) = tmp1;
- tmp_to += 8;
- *(unsigned long *)tmp_to = tmp2;
- } while (--chunks);
- lessthan8:
- n = n % 8;
- if (n >= 4) {
- *(unsigned long *)(tmp_to+4) = *(unsigned long *)(tmp_from+4);
- tmp_from += 4;
- tmp_to += 4;
- n = n-4;
- }
- if (!n ) return to;
- tmp_from += 3;
- tmp_to += 3;
- do {
- *++tmp_to = *++tmp_from;
- } while (--n);
-
- return to;
- align:
- rem = 4 - rem;
- n = n - rem;
- do {
- *(tmp_to+4) = *(tmp_from+4);
- ++tmp_from;
- ++tmp_to;
- } while (--rem);
- chunks = n / 8;
- if (chunks)
- goto copy_chunks;
- goto lessthan8;
-}
-strong_alias(__memcpy, memcpy);
-#endif
-
-#ifdef L_memmove
-void attribute_hidden *__memmove(void *to, const void *from, size_t n)
-{
- unsigned long rem, chunks, tmp1, tmp2;
- unsigned char *tmp_to;
- unsigned char *tmp_from = (unsigned char *)from;
-
- if (tmp_from >= (unsigned char *)to)
- return memcpy(to, from, n);
- chunks = n / 8;
- tmp_from += n;
- tmp_to = to + n;
- if (!chunks)
- goto lessthan8;
- rem = (unsigned long )tmp_to % 4;
- if (rem)
- goto align;
- copy_chunks:
- do {
- /* make gcc to load all data, then store it */
- tmp1 = *(unsigned long *)(tmp_from-4);
- tmp_from -= 8;
- tmp2 = *(unsigned long *)tmp_from;
- *(unsigned long *)(tmp_to-4) = tmp1;
- tmp_to -= 8;
- *(unsigned long *)tmp_to = tmp2;
- } while (--chunks);
- lessthan8:
- n = n % 8;
- if (n >= 4) {
- *(unsigned long *)(tmp_to-4) = *(unsigned long *)(tmp_from-4);
- tmp_from -= 4;
- tmp_to -= 4;
- n = n-4;
- }
- if (!n ) return to;
- do {
- *--tmp_to = *--tmp_from;
- } while (--n);
-
- return to;
- align:
- rem = 4 - rem;
- n = n - rem;
- do {
- *--tmp_to = *--tmp_from;
- } while (--rem);
- chunks = n / 8;
- if (chunks)
- goto copy_chunks;
- goto lessthan8;
-}
-strong_alias(__memmove, memmove);
-#endif
-
-#ifdef L_memset
-static inline int expand_byte_word(int c){
- /* this does:
- c = c << 8 | c;
- c = c << 16 | c ;
- */
- asm("rlwimi %0,%0,8,16,23\n"
- "\trlwimi %0,%0,16,0,15\n"
- : "=r" (c) : "0" (c));
- return c;
-}
-void attribute_hidden *__memset(void *to, int c, size_t n)
-{
- unsigned long rem, chunks;
- unsigned char *tmp_to;
-
- chunks = n / 8;
- tmp_to = to - 4;
- c = expand_byte_word(c);
- if (!chunks)
- goto lessthan8;
- rem = (unsigned long )tmp_to % 4;
- if (rem)
- goto align;
- copy_chunks:
- do {
- *(unsigned long *)(tmp_to+4) = c;
- tmp_to += 4;
- *(unsigned long *)(tmp_to+4) = c;
- tmp_to += 4;
- } while (--chunks);
- lessthan8:
- n = n % 8;
- if (n >= 4) {
- *(unsigned long *)(tmp_to+4) = c;
- tmp_to += 4;
- n = n-4;
- }
- if (!n ) return to;
- tmp_to += 3;
- do {
- *++tmp_to = c;
- } while (--n);
-
- return to;
- align:
- rem = 4 - rem;
- n = n-rem;
- do {
- *(tmp_to+4) = c;
- ++tmp_to;
- } while (--rem);
- chunks = n / 8;
- if (chunks)
- goto copy_chunks;
- goto lessthan8;
-}
-strong_alias(__memset, memset);
-#endif
-
-#ifdef L_bzero
-weak_alias(__bzero,bzero);
-void __bzero(void *s, size_t n)
-{
- (void)memset(s, 0, n);
-}
-#endif
diff --git a/libc/sysdeps/linux/alpha/sys/acct.h b/libc/sysdeps/linux/alpha/sys/acct.h
deleted file mode 100644
index 1e00006ef..000000000
--- a/libc/sysdeps/linux/alpha/sys/acct.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (C) 1996, 1997, 2000 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, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#ifndef _SYS_ACCT_H
-
-#define _SYS_ACCT_H 1
-#include <features.h>
-
-#define __need_time_t
-#include <time.h>
-
-
-__BEGIN_DECLS
-
-#define ACCT_COMM 16
-
-struct acct
- {
- char ac_comm[ACCT_COMM]; /* Accounting command name. */
- time_t ac_utime; /* Accounting user time. */
- time_t ac_stime; /* Accounting system time. */
- time_t ac_etime; /* Accounting elapsed time. */
- time_t ac_btime; /* Beginning time. */
- unsigned int ac_uid; /* Accounting user ID. */
- unsigned int ac_gid; /* Accounting group ID. */
- unsigned int ac_tty; /* Controlling tty. */
- /* Please note that the value of the `ac_tty' field, a device number,
- is encoded differently in the kernel and for the libc dev_t type. */
- char ac_flag; /* Accounting flag. */
- long int ac_minflt; /* Accounting minor pagefaults. */
- long int ac_majflt; /* Accounting major pagefaults. */
- long int ac_exitcode; /* Accounting process exitcode. */
- };
-
-enum
- {
- AFORK = 0001, /* Has executed fork, but no exec. */
- ASU = 0002, /* Used super-user privileges. */
- ACORE = 0004, /* Dumped core. */
- AXSIG = 0010 /* Killed by a signal. */
- };
-
-#define AHZ 100
-
-
-/* Switch process accounting on and off. */
-extern int acct (__const char *__filename) __THROW;
-
-__END_DECLS
-
-#endif /* sys/acct.h */