This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] strchr broken on SPU with non 16byte aligned argument - take 2


Patch applied.

-- Jeff J.

Kazunori Asayama wrote:
Kazunori Asayama <asayama@sm.sony.co.jp> wrote:
Andrew_Pinski@playstation.sony.com wrote:
I noticed that the GCC testcase gcc.c-torture/execute/string-opt-5.c
is failing on the spu and was debugging it and it looks like strchr does not handle correctly a non 16byte aligned agrument.
Here is the reduced testcase which is failing:
Here is a patch to fix the problem.
But I'm worried that there may be similar problem to it...

I investigated all other string functions in libc/machine/spu, and I found the same problem in strrchr().

Here is a patch to fix these problems. Please apply this instead of
the previous one.

Thanks,

2006-12-01 Kazunori Asayama <asayama@sm.sony.co.jp>

	* libc/machine/spu/strchr.c: Fix mask for misaligned string.
	* libc/machine/spu/strrchr.c: Ditto.

Index: newlib/newlib/libc/machine/spu/strchr.c
===================================================================
--- newlib.orig/newlib/libc/machine/spu/strchr.c
+++ newlib/newlib/libc/machine/spu/strchr.c
@@ -44,7 +44,7 @@ char *strchr(const char *s, int c)
   vec_uint4 cmp_c, cmp_0;
   vec_uint4 result;
   vec_uint4 mask;
-  vec_uint4 one = spu_splats((unsigned int)-1);
+  vec_uint4 one = spu_splats(0xffffU);
   /* Scan memory array a quadword at a time. Skip leading
    * mis-aligned bytes.
    */
Index: newlib/newlib/libc/machine/spu/strrchr.c
===================================================================
--- newlib.orig/newlib/libc/machine/spu/strrchr.c
+++ newlib/newlib/libc/machine/spu/strrchr.c
@@ -45,7 +45,7 @@ char * strrchr(const char *s, int c)
   vec_uint4 cmp_c, cmp_0, cmp;
   vec_uint4 res_ptr, res_cmp;
   vec_uint4 mask, result;
-  vec_uint4 one = spu_splats((unsigned int)-1);
+  vec_uint4 one = spu_splats(0xffffU);
   /* Scan memory array a quadword at a time. Skip leading
    * mis-aligned bytes.
    */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]