tags 483352 + patch
thanks

* Lucas Nussbaum | 2008-05-28 15:55:45 [+0200]:

>Would be interesting to know if this is a liboil bug or a test bug.
It is a liboil bug. Patch attached.

Sebastian
>From 064d11051f477cd2c398e5d4e3cb1301daf683eb Mon Sep 17 00:00:00 2001
From: Sebastian Andrzej Siewior <[email protected]>
Date: Tue, 17 Aug 2010 22:30:49 +0200
Subject: [PATCH] fix stride tc on amd64. i386 and powerpc

the stride tc segfauls with

|diff --git a/testsuite/stride.c b/testsuite/stride.c
|index abc521e..debc340 100644
|--- a/testsuite/stride.c
|+++ b/testsuite/stride.c
|@@ -74,8 +74,8 @@ int main (int argc, char *argv[])
|       continue;
|     }
|     oil_test_set_iterations (test, 1);
|-    test->n = 1 + oil_rand_u8();
|-    test->m = 1 + oil_rand_u8();
|+    test->n = 1;
|+    test->m = 33;
|
|     oil_test_check_impl (test, klass->reference_impl);
|     for(j=0;j<OIL_ARG_LAST;j++){

as random numers. This was reported as Debian bug #483352.

Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
---
 liboil/amd64/wavelet.c   |    3 +++
 liboil/i386/wavelet.c    |    2 ++
 liboil/powerpc/rgb2bgr.c |    2 ++
 3 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/liboil/amd64/wavelet.c b/liboil/amd64/wavelet.c
index 6b1946a..353471f 100644
--- a/liboil/amd64/wavelet.c
+++ b/liboil/amd64/wavelet.c
@@ -18,6 +18,9 @@ deinterleave2_asm (int16_t *d1, int16_t *d2, int16_t *s_2xn, 
int n)
     n--;
   }
 
+  if (!n)
+         return;
+
   asm volatile ("\n"
       "  sub $2, %%rcx\n"
       "1:\n"
diff --git a/liboil/i386/wavelet.c b/liboil/i386/wavelet.c
index a382a22..d8d61a6 100644
--- a/liboil/i386/wavelet.c
+++ b/liboil/i386/wavelet.c
@@ -117,6 +117,8 @@ deinterleave2_asm (int16_t *d1, int16_t *d2, int16_t 
*s_2xn, int n)
     s_2xn+=2;
     n--;
   }
+  if (!n)
+         return;
 
   asm volatile ("\n"
       "  mov %3, %%ecx\n"
diff --git a/liboil/powerpc/rgb2bgr.c b/liboil/powerpc/rgb2bgr.c
index 8787d66..419b8e1 100644
--- a/liboil/powerpc/rgb2bgr.c
+++ b/liboil/powerpc/rgb2bgr.c
@@ -50,6 +50,8 @@ rgb2bgr_ppc (uint8_t *dest, uint8_t* src, int n)
   n /= 4;
   dest -= 4;
   src -= 4;
+  if (!n)
+         return ;
   asm volatile (
        "       mtctr %2                \n"
        "1:     lwzu r10, 4(%1)         \n" /* rgbr x */
-- 
1.5.6.5

Reply via email to