Skip to contentSkip to conversation

Update asm string header

PATCH New Shinya Kuribayashi 2 participants 4 messages Aug 27, 2007 – Aug 28, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 Update asm string header

[MIPS] Update asm string header

From: Shinya Kuribayashi <[email protected]>

This includes several bugfixes and cleanups in the latest upstream:

- Don't include linux/config.h from anywhere else in include/
- Remove buggy inline version of memscan.
- Merge with Linux 2.6.11-rc3.
- Fix undefined reference to strcpy in binfmt_misc caused by gcc 3.4.
- Goodbye mips64. 31704 lines of code bite the dust.
- Replace extern inline with static inline.
- Fix return value of strncpy.
- Remove a bunch more "$1" clobbers.

---

 include/asm-mips/string.h |   71 +++++++++++++++++++--------------------------
 1 files changed, 30 insertions(+), 41 deletions(-)
include/asm-mips/string.h +30 -41
index 463a111..4739c18 100644
@@ -1,18 +1,26 @@
-/* $Id: string.h,v 1.13 2000/02/19 14:12:14 harald Exp $
- *
+/*
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (c) 1994, 1995, 1996, 1997, 1998 by Ralf Baechle
+ * Copyright (c) 1994, 95, 96, 97, 98, 2000, 01 Ralf Baechle
+ * Copyright (c) 2000 by Silicon Graphics, Inc.
+ * Copyright (c) 2001 MIPS Technologies, Inc.
+ */
+#ifndef _ASM_STRING_H
+#define _ASM_STRING_H
+
+
+/*
+ * Most of the inline functions are rather naive implementations so I just
+ * didn't bother updating them for 64-bit ...
  */
-#ifndef __ASM_MIPS_STRING_H
-#define __ASM_MIPS_STRING_H
+#if 1 /* #ifdef CONFIG_32BIT */
 
-#include <linux/config.h>
+#ifndef IN_STRING_C
 
 #define __HAVE_ARCH_STRCPY
-extern __inline__ char *strcpy(char *__dest, __const__ char *__src)
+static __inline__ char *strcpy(char *__dest, __const__ char *__src)
 {
   char *__xdest = __dest;
 
@@ -28,13 +36,13 @@ extern __inline__ char *strcpy(char *__dest, __const__ char *__src)
 	".set\treorder"
 	: "=r" (__dest), "=r" (__src)
 	: "0" (__dest), "1" (__src)
-	: "$1","memory");
+	: "memory");
 
   return __xdest;
 }
 
 #define __HAVE_ARCH_STRNCPY
-extern __inline__ char *strncpy(char *__dest, __const__ char *__src, size_t __n)
+static __inline__ char *strncpy(char *__dest, __const__ char *__src, size_t __n)
 {
   char *__xdest = __dest;
 
@@ -56,13 +64,13 @@ extern __inline__ char *strncpy(char *__dest, __const__ char *__src, size_t __n)
 	".set\treorder"
 	: "=r" (__dest), "=r" (__src), "=r" (__n)
 	: "0" (__dest), "1" (__src), "2" (__n)
-	: "$1","memory");
+	: "memory");
 
-  return __dest;
+  return __xdest;
 }
 
 #define __HAVE_ARCH_STRCMP
-extern __inline__ int strcmp(__const__ char *__cs, __const__ char *__ct)
+static __inline__ int strcmp(__const__ char *__cs, __const__ char *__ct)
 {
   int __res;
 
@@ -84,14 +92,15 @@ extern __inline__ int strcmp(__const__ char *__cs, __const__ char *__ct)
 	"3:\t.set\tat\n\t"
 	".set\treorder"
 	: "=r" (__cs), "=r" (__ct), "=r" (__res)
-	: "0" (__cs), "1" (__ct)
-	: "$1");
+	: "0" (__cs), "1" (__ct));
 
   return __res;
 }
 
+#endif /* !defined(IN_STRING_C) */
+
 #define __HAVE_ARCH_STRNCMP
-extern __inline__ int
+static __inline__ int
 strncmp(__const__ char *__cs, __const__ char *__ct, size_t __count)
 {
 	int __res;
@@ -116,12 +125,15 @@ strncmp(__const__ char *__cs, __const__ char *__ct, size_t __count)
 	".set\tat\n\t"
 	".set\treorder"
 	: "=r" (__cs), "=r" (__ct), "=r" (__count), "=r" (__res)
-	: "0" (__cs), "1" (__ct), "2" (__count)
-	: "$1");
+	: "0" (__cs), "1" (__ct), "2" (__count));
 
 	return __res;
 }
+#endif /* CONFIG_32BIT */
 
+/*
+ * We don't have optimized memory routines for now.
+ */
 #undef __HAVE_ARCH_MEMSET
 extern void *memset(void *__s, int __c, size_t __count);
 
@@ -131,27 +143,4 @@ extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
 #undef __HAVE_ARCH_MEMMOVE
 extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
 
-/* Don't build bcopy at all ...  */
-#define __HAVE_ARCH_BCOPY
-
-#define __HAVE_ARCH_MEMSCAN
-extern __inline__ void *memscan(void *__addr, int __c, size_t __size)
-{
-	char *__end = (char *)__addr + __size;
-
-	__asm__(".set\tpush\n\t"
-		".set\tnoat\n\t"
-		".set\treorder\n\t"
-		"1:\tbeq\t%0,%1,2f\n\t"
-		"addiu\t%0,1\n\t"
-		"lb\t$1,-1(%0)\n\t"
-		"bne\t$1,%4,1b\n"
-		"2:\t.set\tpop"
-		: "=r" (__addr), "=r" (__end)
-		: "0" (__addr), "1" (__end), "r" (__c)
-		: "$1");
-
-	return __addr;
-}
-
-#endif /* __ASM_MIPS_STRING_H */
+#endif /* _ASM_STRING_H */
#1 lore raw

PATCH 1/2 Update asm string header

Quoted 5 lines · In message <[email protected]> you wrote:

[MIPS] Update asm string header

From: Shinya Kuribayashi <[email protected]>

This includes several bugfixes and cleanups in the latest upstream:

...

Quoted 5 lines
include/asm-mips/string.h +0 -0
index 463a111..4739c18 100644
@@ -1,18 +1,26 @@

...

include/asm-mips/string.h line 18

Quoted 7 lines
include/asm-mips/string.h +4 -2
+/*
+ * Most of the inline functions are rather naive implementations so I just
+ * didn't bother updating them for 64-bit ...
  */
-#ifndef __ASM_MIPS_STRING_H
-#define __ASM_MIPS_STRING_H
+#if 1 /* #ifdef CONFIG_32BIT */

Please remove this (and the corresponding #endif).

Ummm... does this work on 64 bit MIPS systems, too?

Best regards,

Wolfgang Denk

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
No journaling file system can recover your data if the disk dies.
                                 - Steve Rago in <[email protected]>
#2 lore raw

PATCH 1/2 Update asm string header

Quoted 13 lines · Wolfgang Denk
Quoted 5 lines · In message <[email protected]> you wrote:

[MIPS] Update asm string header

From: Shinya Kuribayashi <[email protected]>

This includes several bugfixes and cleanups in the latest upstream:

...

Quoted 5 lines
include/asm-mips/string.h +0 -0
index 463a111..4739c18 100644
@@ -1,18 +1,26 @@

...

Quoted 9 lines

include/asm-mips/string.h line 18

Quoted 7 lines
include/asm-mips/string.h +4 -2
+/*
+ * Most of the inline functions are rather naive implementations so I just
+ * didn't bother updating them for 64-bit ...
  */
-#ifndef __ASM_MIPS_STRING_H
-#define __ASM_MIPS_STRING_H
+#if 1 /* #ifdef CONFIG_32BIT */

Please remove this (and the corresponding #endif).

I just wanted to indicate that this funcs is valid for 32-bit mode. But, I agree that it's not a proper workaround.

Quoted 1 line

Ummm... does this work on 64 bit MIPS systems, too?

No it doesn't, according to the upstream's decision.

Unfortunately, AFAIK, current MIPS port doesn't have general configs for 32/64-bit mode. It might be better to use lib_generic/string.c for both CPU mode in this situation.

Thanks,

Shinya Kuribayashi

#3 lore raw

PATCH 1/2 Update asm string header

Quoted 8 lines · In message <[email protected]> you wrote:
Quoted 4 lines
Quoted 2 lines

+#if 1 /* #ifdef CONFIG_32BIT */

Please remove this (and the corresponding #endif).

I just wanted to indicate that this funcs is valid for 32-bit mode. But, I agree that it's not a proper workaround.

Quoted 7 lines
Quoted 1 line

Ummm... does this work on 64 bit MIPS systems, too?

No it doesn't, according to the upstream's decision.

Unfortunately, AFAIK, current MIPS port doesn't have general configs for 32/64-bit mode. It might be better to use lib_generic/string.c for both CPU mode in this situation.

Yes, please do this, then.

Best regards,

Wolfgang Denk

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Documentation is like sex: when it is good, it is  very,  very  good;
and when it is bad, it is better than nothing.         - Dick Brandon