public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
@ 2002-07-11 19:46 Alan Modra
  0 siblings, 0 replies; 6+ messages in thread
From: Alan Modra @ 2002-07-11 19:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7130; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: yozo@cs.berkeley.edu, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org
Cc:  
Subject: Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
Date: Fri, 12 Jul 2002 12:06:06 +0930

 The testsuite failures with the previous patch were due to
 doloop_modify_runtime not taking into account loop preconditioning.
 
 No new regressions with this patch.  Yay!
 
 gcc/ChangeLog
 	PR optimization/7130
 	* loop.h (struct loop_info): Add "preconditioned".
 	* unroll.c (unroll_loop): Set it.
 	* doloop.c (doloop_modify_runtime): Correct count for unrolled loops.
 
 Hmm, I suppose I should be adding the testcase in gcc.c-torture/execute/
 since these get compiled with -funroll-all-loops.
 
 Index: gcc/loop.h
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/loop.h,v
 retrieving revision 1.61
 diff -u -p -r1.61 loop.h
 --- gcc/loop.h	30 May 2002 20:55:11 -0000	1.61
 +++ gcc/loop.h	12 Jul 2002 01:50:43 -0000
 @@ -316,6 +316,9 @@ struct loop_info
    int has_multiple_exit_targets;
    /* Nonzero if there is an indirect jump in the current function.  */
    int has_indirect_jump;
 +  /* Whether loop unrolling has emitted copies of the loop body so
 +     that the main loop needs no exit tests.  */
 +  int preconditioned;
    /* Register or constant initial loop value.  */
    rtx initial_value;
    /* Register or constant value used for comparison test.  */
 Index: gcc/unroll.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/unroll.c,v
 retrieving revision 1.169
 diff -u -p -r1.169 unroll.c
 --- gcc/unroll.c	30 Jun 2002 05:06:01 -0000	1.169
 +++ gcc/unroll.c	12 Jul 2002 01:50:46 -0000
 @@ -1135,6 +1135,9 @@ unroll_loop (loop, insn_count, strength_
    /* Keep track of the unroll factor for the loop.  */
    loop_info->unroll_number = unroll_number;
  
 +  /* And whether the loop has been preconditioned.  */
 +  loop_info->preconditioned = loop_preconditioned;
 +
    /* For each biv and giv, determine whether it can be safely split into
       a different variable for each unrolled copy of the loop body.
       We precalculate and save this info here, since computing it is
 Index: gcc/doloop.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/doloop.c,v
 retrieving revision 1.20
 diff -u -p -r1.20 doloop.c
 --- gcc/doloop.c	24 Jun 2002 02:16:42 -0000	1.20
 +++ gcc/doloop.c	12 Jul 2002 01:50:42 -0000
 @@ -552,6 +552,7 @@ doloop_modify_runtime (loop, iterations_
  {
    const struct loop_info *loop_info = LOOP_INFO (loop);
    HOST_WIDE_INT abs_inc;
 +  HOST_WIDE_INT abs_loop_inc;
    int neg_inc;
    rtx diff;
    rtx sequence;
 @@ -595,13 +596,18 @@ doloop_modify_runtime (loop, iterations_
       except in cases where the loop never terminates.  So we don't
       need to use this more costly calculation.
  
 -     If the loop has been unrolled, then the loop body has been
 -     preconditioned to iterate a multiple of unroll_number times.  If
 -     abs_inc is != 1, the full calculation is
 -
 -       t1 = abs_inc * unroll_number;
 -       n = abs (final - initial) / t1;
 -       n += (abs (final - initial) % t1) > t1 - abs_inc;
 +     If the loop has been unrolled, the full calculation is
 +
 +       t1 = abs_inc * unroll_number;		increment per loop
 +       n = abs (final - initial) / t1;		full loops
 +       n += (abs (final - initial) % t1) != 0;	partial loop
 +
 +     However, in certain cases the unrolled loop will be preconditioned
 +     by emitting copies of the loop body with conditional branches,
 +     so that the unrolled loop is always a full loop and thus needs
 +     no exit tests.  In this case we don't want to add the partial
 +     loop count.  As above, when t1 is a power of two we don't need to
 +     worry about overflow.
  
       The division and modulo operations can be avoided by requiring
       that the increment is a power of 2 (precondition_loop_p enforces
 @@ -667,20 +673,22 @@ doloop_modify_runtime (loop, iterations_
  	}
      }
  
 -  if (abs_inc * loop_info->unroll_number != 1)
 +  abs_loop_inc = abs_inc * loop_info->unroll_number;
 +  if (abs_loop_inc != 1)
      {
        int shift_count;
  
 -      shift_count = exact_log2 (abs_inc * loop_info->unroll_number);
 +      shift_count = exact_log2 (abs_loop_inc);
        if (shift_count < 0)
  	abort ();
  
 -      if (abs_inc != 1)
 +      if (!loop_info->preconditioned)
  	diff = expand_simple_binop (GET_MODE (diff), PLUS,
 -				    diff, GEN_INT (abs_inc - 1),
 +				    diff, GEN_INT (abs_loop_inc - 1),
  				    diff, 1, OPTAB_LIB_WIDEN);
  
 -      /* (abs (final - initial) + abs_inc - 1) / (abs_inc * unroll_number)  */
 +      /* (abs (final - initial) + abs_inc * unroll_number - 1)
 +	 / (abs_inc * unroll_number)  */
        diff = expand_simple_binop (GET_MODE (diff), LSHIFTRT,
  				  diff, GEN_INT (shift_count),
  				  diff, 1, OPTAB_LIB_WIDEN);
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
@ 2002-07-11 16:46 Alan Modra
  0 siblings, 0 replies; 6+ messages in thread
From: Alan Modra @ 2002-07-11 16:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7130; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: Andreas Jaeger <aj@suse.de>
Cc: yozo@cs.berkeley.edu, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
Date: Fri, 12 Jul 2002 09:12:20 +0930

 On Thu, Jul 11, 2002 at 02:06:55PM +0200, Andreas Jaeger wrote:
 > Alan Modra <amodra@bigpond.net.au> writes:
 > 
 > > (And this time, I waited for bootstrap to get through building the stage2
 > >  compiler before firing off emails.)
 > 
 > 
 > What about the testsuite?  Any new regressions or passes?
 
 New regressions unfortunately.  Patch withdrawn until I can figure out
 what is going wrong.
 
 > I guess this is on Powerpc-linux?
 
 Yes.
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
@ 2002-07-11  5:16 Andreas Jaeger
  0 siblings, 0 replies; 6+ messages in thread
From: Andreas Jaeger @ 2002-07-11  5:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7130; it has been noted by GNATS.

From: Andreas Jaeger <aj@suse.de>
To: yozo@cs.berkeley.edu
Cc: gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc
 linux with -funroll-all-loops
Date: Thu, 11 Jul 2002 14:06:55 +0200

 Alan Modra <amodra@bigpond.net.au> writes:
 
 > (And this time, I waited for bootstrap to get through building the stage2
 >  compiler before firing off emails.)
 
 
 What about the testsuite?  Any new regressions or passes?
 
 I guess this is on Powerpc-linux?
 
 Andreas
 -- 
  Andreas Jaeger
   SuSE Labs aj@suse.de
    private aj@arthur.inka.de
     http://www.suse.de/~aj


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
@ 2002-07-11  3:16 Alan Modra
  0 siblings, 0 replies; 6+ messages in thread
From: Alan Modra @ 2002-07-11  3:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7130; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: yozo@cs.berkeley.edu, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org
Cc:  
Subject: Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
Date: Thu, 11 Jul 2002 19:38:40 +0930

 On Thu, Jul 11, 2002 at 05:21:57PM +0930, Alan Modra wrote:
 > doloop.c:doloop_modify_runtime says:
 > 
 >      If the loop has been unrolled, then the loop body has been
 >      preconditioned to iterate a multiple of unroll_number times.  If
 >      abs_inc is != 1, the full calculation is
 > 
 >        t1 = abs_inc * unroll_number;
 >        n = abs (final - initial) / t1;
 >        n += (abs (final - initial) % t1) > t1 - abs_inc;
 > 
 > This is wrong.  Taking the example in the PR, we have
 > 
 > abs_inc = 1
 > unroll_number = 4
 > abs (final - initial) = 10
 > 
 > => t1 == 4
 >    abs (final - initial) % t1 == 2
 > => n == 2
 > 
 > We want n == 3, to go around the loop fully twice, and once partially.
 > 
 > A little thought shows the correct calculation is
 > 
 > 	The amount we increment per (partially) unrolled loop
 >         t1 = abs_inc * unroll_number;
 > 
 > 	The number of time we'll go fully round the loop.
 >         n = abs (final - initial) / t1;
 > 
 > 	Plus any partial loops.
 >         n += (abs (final - initial) % t1) >= abs_inc;
 
 And a little more thought, prodded by bootstrap failing :), says
 
 	Plus any partial loops.
 	  n += (abs (final - initial) % t1) != 0;
 
 Why?  Well, GE loops don't care about final - initial being a multiple
 of the loop increment.  Besides, for unroll_number == 1, the above
 calculations ought to agree with this extract from unroll.c
 
      The number of iterations (prior to any loop unrolling) is given by:
 
        n = (abs (final - initial) + abs_inc - 1) / abs_inc.
 
      However, it is possible for the summation to overflow, and a
      safer method is:
 
        n = abs (final - initial) / abs_inc;
        n += (abs (final - initial) % abs_inc) != 0;
 
 
 gcc/ChangeLog
  	PR optimization/7130
  	* doloop.c (doloop_modify_runtime): Correct count for unrolled loops.
 
 gcc/testsuite/ChangeLog
 	* gcc.dg/unroll.c: New.
 
 (And this time, I waited for bootstrap to get through building the stage2
  compiler before firing off emails.)
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre
 
 Index: gcc/doloop.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/doloop.c,v
 retrieving revision 1.20
 diff -u -p -r1.20 doloop.c
 --- gcc/doloop.c	24 Jun 2002 02:16:42 -0000	1.20
 +++ gcc/doloop.c	11 Jul 2002 09:07:06 -0000
 @@ -552,6 +552,7 @@ doloop_modify_runtime (loop, iterations_
  {
    const struct loop_info *loop_info = LOOP_INFO (loop);
    HOST_WIDE_INT abs_inc;
 +  HOST_WIDE_INT abs_loop_inc;
    int neg_inc;
    rtx diff;
    rtx sequence;
 @@ -601,7 +602,7 @@ doloop_modify_runtime (loop, iterations_
  
         t1 = abs_inc * unroll_number;
         n = abs (final - initial) / t1;
 -       n += (abs (final - initial) % t1) > t1 - abs_inc;
 +       n += (abs (final - initial) % t1) != 0;
  
       The division and modulo operations can be avoided by requiring
       that the increment is a power of 2 (precondition_loop_p enforces
 @@ -667,20 +668,21 @@ doloop_modify_runtime (loop, iterations_
  	}
      }
  
 -  if (abs_inc * loop_info->unroll_number != 1)
 +  abs_loop_inc = abs_inc * loop_info->unroll_number;
 +  if (abs_loop_inc != 1)
      {
        int shift_count;
  
 -      shift_count = exact_log2 (abs_inc * loop_info->unroll_number);
 +      shift_count = exact_log2 (abs_loop_inc);
        if (shift_count < 0)
  	abort ();
  
 -      if (abs_inc != 1)
 -	diff = expand_simple_binop (GET_MODE (diff), PLUS,
 -				    diff, GEN_INT (abs_inc - 1),
 -				    diff, 1, OPTAB_LIB_WIDEN);
 +      diff = expand_simple_binop (GET_MODE (diff), PLUS,
 +				  diff, GEN_INT (abs_loop_inc - 1),
 +				  diff, 1, OPTAB_LIB_WIDEN);
  
 -      /* (abs (final - initial) + abs_inc - 1) / (abs_inc * unroll_number)  */
 +      /* (abs (final - initial) + abs_inc * unroll_number - 1)
 +	 / (abs_inc * unroll_number)  */
        diff = expand_simple_binop (GET_MODE (diff), LSHIFTRT,
  				  diff, GEN_INT (shift_count),
  				  diff, 1, OPTAB_LIB_WIDEN);
 Index: gcc/testsuite/gcc.dg/unroll.c
 ===================================================================
 RCS file: gcc/testsuite/gcc.dg/unroll.c
 diff -N gcc/testsuite/gcc.dg/unroll.c
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ gcc/testsuite/gcc.dg/unroll.c	11 Jul 2002 09:31:12 -0000
 @@ -0,0 +1,39 @@
 +/* PR opt/7130 */
 +/* { dg-do run } */
 +/* { dg-options "-O2 -funroll-all-loops" } */
 +
 +#define TYPE long
 +
 +void
 +scale (TYPE *alpha, TYPE *x, int n)
 +{
 +  int i, ix;
 +
 +  if (*alpha != 1)
 +    for (i = 0, ix = 0; i < n; i++, ix += 2)
 +      {
 +	TYPE tmpr, tmpi;
 +	tmpr = *alpha * x[ix];
 +	tmpi = *alpha * x[ix + 1];
 +	x[ix] = tmpr;
 +	x[ix + 1] = tmpi;
 +      }
 +}
 +
 +int
 +main (void)
 +{
 +  int i;
 +  TYPE x[10];
 +  TYPE alpha = 2;
 +
 +  for (i = 0; i < 10; i++)
 +    x[i] = i;
 +
 +  scale (&alpha, x, 5);
 +
 +  if (x[9] != 18)
 +    abort ();
 +
 +  return 0;
 +}


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
@ 2002-07-11  0:56 Alan Modra
  0 siblings, 0 replies; 6+ messages in thread
From: Alan Modra @ 2002-07-11  0:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7130; it has been noted by GNATS.

From: Alan Modra <amodra@bigpond.net.au>
To: yozo@cs.berkeley.edu
Cc: gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: Re: optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
Date: Thu, 11 Jul 2002 17:21:57 +0930

 doloop.c:doloop_modify_runtime says:
 
      If the loop has been unrolled, then the loop body has been
      preconditioned to iterate a multiple of unroll_number times.  If
      abs_inc is != 1, the full calculation is
 
        t1 = abs_inc * unroll_number;
        n = abs (final - initial) / t1;
        n += (abs (final - initial) % t1) > t1 - abs_inc;
 
 This is wrong.  Taking the example in the PR, we have
 
 abs_inc = 1
 unroll_number = 4
 abs (final - initial) = 10
 
 => t1 == 4
    abs (final - initial) % t1 == 2
 => n == 2
 
 We want n == 3, to go around the loop fully twice, and once partially.
 
 A little thought shows the correct calculation is
 
 	The amount we increment per (partially) unrolled loop
         t1 = abs_inc * unroll_number;
 
 	The number of time we'll go fully round the loop.
         n = abs (final - initial) / t1;
 
 	Plus any partial loops.
         n += (abs (final - initial) % t1) >= abs_inc;
 
 
 	PR optimization/7130
 	* doloop.c (doloop_modify_runtime): Correct count for unrolled loops.
 
 This needs to go on the 3.1 branch too.  OK, assuming my powerpc-linux
 bootstrap and regression test passes?
 
 -- 
 Alan Modra
 IBM OzLabs - Linux Technology Centre
 
 Index: gcc/doloop.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/doloop.c,v
 retrieving revision 1.20
 diff -u -p -r1.20 doloop.c
 --- gcc/doloop.c	24 Jun 2002 02:16:42 -0000	1.20
 +++ gcc/doloop.c	11 Jul 2002 07:49:43 -0000
 @@ -552,6 +552,7 @@ doloop_modify_runtime (loop, iterations_
  {
    const struct loop_info *loop_info = LOOP_INFO (loop);
    HOST_WIDE_INT abs_inc;
 +  HOST_WIDE_INT abs_loop_inc;
    int neg_inc;
    rtx diff;
    rtx sequence;
 @@ -601,7 +602,7 @@ doloop_modify_runtime (loop, iterations_
  
         t1 = abs_inc * unroll_number;
         n = abs (final - initial) / t1;
 -       n += (abs (final - initial) % t1) > t1 - abs_inc;
 +       n += (abs (final - initial) % t1) >= abs_inc;
  
       The division and modulo operations can be avoided by requiring
       that the increment is a power of 2 (precondition_loop_p enforces
 @@ -667,20 +668,21 @@ doloop_modify_runtime (loop, iterations_
  	}
      }
  
 -  if (abs_inc * loop_info->unroll_number != 1)
 +  abs_loop_inc = abs_inc * loop_info->unroll_number;
 +  if (abs_loop_inc != 1)
      {
        int shift_count;
  
 -      shift_count = exact_log2 (abs_inc * loop_info->unroll_number);
 +      shift_count = exact_log2 (abs_loop_inc);
        if (shift_count < 0)
  	abort ();
  
 -      if (abs_inc != 1)
 -	diff = expand_simple_binop (GET_MODE (diff), PLUS,
 -				    diff, GEN_INT (abs_inc - 1),
 -				    diff, 1, OPTAB_LIB_WIDEN);
 +      diff = expand_simple_binop (GET_MODE (diff), PLUS,
 +				  diff, GEN_INT (abs_loop_inc - abs_inc),
 +				  diff, 1, OPTAB_LIB_WIDEN);
  
 -      /* (abs (final - initial) + abs_inc - 1) / (abs_inc * unroll_number)  */
 +      /* (abs (final - initial) + abs_inc * unroll_number - abs_inc)
 +	 / (abs_inc * unroll_number)  */
        diff = expand_simple_binop (GET_MODE (diff), LSHIFTRT,
  				  diff, GEN_INT (shift_count),
  				  diff, 1, OPTAB_LIB_WIDEN);


^ permalink raw reply	[flat|nested] 6+ messages in thread

* optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
@ 2002-06-25 19:26 yozo
  0 siblings, 0 replies; 6+ messages in thread
From: yozo @ 2002-06-25 19:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7130
>Category:       optimization
>Synopsis:       miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 25 18:16:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     yozo@cs.berkeley.edu
>Release:        gcc-3.1
>Organization:
>Environment:
powerpc-unknown-linux-gnu
PowerPC 750 (G3), PowerBook G3 Series (Wallstreet),
Linux-2.14.19-pre10, Glibc 2.2.5
Configured with: ../gcc-3.1/configure --prefix=/usr --enable-shared --enable-threads=posix --with-slibdir=/lib
>Description:
Wrong code is generated for some loops when 
-O3 -funroll-all-loops option is used.

Attached (unroll-test_e.i) is the intermediate file
generated by
  gcc -v -save-temps -O3 -funroll-all-loops -o unroll_test 
      unroll-test_e.c

The code performs a simple scaling of a floating-point
vector.  When the loop iteration is 5, 6, or 7, the 
only the first four iteration is done, leaving the last
1, 2, or 3 vector elements unmodified (see scale() in the
source code).

The output of above command is 

Reading specs from /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/specs
Configured with: ../gcc-3.1/configure --prefix=/usr --enable-shared --enable-threads=posix --with-slibdir=/lib
Thread model: posix
gcc version 3.1
 /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/cpp0 -lang-c -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -DPPC -D__ELF__ -Dpowerpc -D__PPC__ -D__ELF__ -D__powerpc__ -D__PPC -D__powerpc -Acpu=powerpc -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian -D_ARCH_PPC -D__unix__ -D__gnu_linux__ -D__linux__ -Dunix -D__unix -Dlinux -D__linux -Asystem=unix -Asystem=posix unroll-test_e.c unroll-test_e.i
GNU CPP version 3.1 (cpplib) (PowerPC GNU/Linux)
ignoring nonexistent directory "/usr/powerpc-unknown-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/cc1 -fpreprocessed unroll-test_e.i -quiet -dumpbase unroll-test_e.c -O3 -version -funroll-all-loops -o unroll-test_e.s
GNU CPP version 3.1 (cpplib) (PowerPC GNU/Linux)
GNU C version 3.1 (powerpc-unknown-linux-gnu)
  compiled by GNU C version 3.1.
 as -mppc -V -Qy -o unroll-test_e.o unroll-test_e.s
GNU assembler version 2.12.1 (powerpc-unknown-linux-gnu) using BFD version 2.12.1
 /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/collect2 --eh-frame-hdr -V -Qy -m elf32ppclinux -dynamic-linker /lib/ld.so.1 -o unroll_test /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/../../../crt1.o /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/../../../crti.o /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/crtbegin.o -L/usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1 -L/usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/../../.. unroll-test_e.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/crtsavres.o /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/crtend.o /usr/lib/gcc-lib/powerpc-unknown-linux-gnu/3.1/../../../crtn.o
GNU ld version 2.12.1
  Supported emulations:
   elf32ppclinux
   elf32ppc
   elf32ppcsim

The problem was discovered while compiling atlas-3.4.1.

-Yozo
>How-To-Repeat:
Compile the source file with 

  gcc -O3 -funroll-all-loops -o unroll_test unroll_test_e.c

Run the program with

  ./unroll_test

Notice the element x[9] is not changed even though it
is supposed to be multiplied by two.
>Fix:
Don't use "-funroll-all-loops".
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="unroll-test_e.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="unroll-test_e.i"

IyAxICJ1bnJvbGwtdGVzdF9lLmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5l
PiIKIyAxICJ1bnJvbGwtdGVzdF9lLmMiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVu
a25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xpYi9n
Y2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTMgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAyIDMKIyAzOCAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGlu
dXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAy
MDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDQgIi91c3IvbGli
L2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAy
IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1s
aW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5z
aWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9u
ZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0
eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50
OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25l
ZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsK
CnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlw
ZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBf
X3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcg
aW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlk
X3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlw
ZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBl
ZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYg
aW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQg
X190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25n
IGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYg
bG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYg
aW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVf
dDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Js
a2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1
YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlw
ZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lu
bzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBf
X3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0
eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90
OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91
c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9f
c2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNy
L2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rs
b2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVk
ZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50
IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGlu
dCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAg
aW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFj
a3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0
aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0g
cHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhy
ZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50Owog
IF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhy
ZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVm
IGludCBwdGhyZWFkX29uY2VfdDsKIyAxNDAgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl
cy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgNDYgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11
bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1NCAiL3Vzci9saWIv
Z2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMK
dHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAiL3Vzci9saWIvZ2NjLWxpYi9wb3dl
cnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1
Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDc0ICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93
bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv
dXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDI5NCAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgt
Z251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyAz
MjEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBp
bnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hi
WzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0
ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9f
cG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAi
L3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMg
NDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBj
LXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7
CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9f
R0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBV
VCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoK
ICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07
CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9F
UlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90
cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZf
c3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwg
aW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2dj
b252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2dj
b252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3Qg
X19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAo
Kl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u
dl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0
eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9f
Z2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9f
Z2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3Ry
YW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19n
Y29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0
cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hh
ciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBj
aGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3Qg
X19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9u
ZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90
bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9f
ZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpf
X291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsK
CgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoK
ICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1
Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2dj
b252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0
ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsK
fSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVm
IHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3Ry
dWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0
YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
U0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4
LWdudS8zLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvcG93
ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9f
YnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMiAzCiMgMTYwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsg
c3RydWN0IF9JT19GSUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2
b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy
a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5
MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewog
IF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAg
X19jb2RlY3Z0X25vY29udgp9OwojIDI2MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0
IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hh
ciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRl
X2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNo
YXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVf
YmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBz
dHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoK
ICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoK
ICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNl
dDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpf
X3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUg
KiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1
Y3QgX0lPX0ZJTEUgX0lPX0ZJTEU7CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3Ry
dWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVf
cGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8x
X3N0ZGVycl87CiMgMzQ0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVf
dCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5
dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29v
a2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19j
b29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xv
c2VfZm4gKHZvaWQgKl9fY29va2llKTsKIyAzOTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4
dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX3VmbG93IChf
SU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4
dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193
dWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUg
Kiwgd2ludF90KSA7CiMgNDI2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9J
T19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBf
SU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgOwpl
eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSA7CgpleHRlcm4gaW50IF9JT19w
ZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSA7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2Nr
ZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxF
ICopIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSA7CiMgNDU2ICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAq
IF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3Zm
cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3Qg
X0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lP
X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBf
SU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJu
IHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA3NSAiL3Vzci9saWIv
Z2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwojIDg5ICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CiMgMTM4ICIvdXNyL2xp
Yi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvbGli
L2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAy
IDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklM
RSAqc3RkZXJyOwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVu
YW1lKSA7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBj
aGFyICpfX25ldykgOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIDsKIyAxNzAgIi91
c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIg
KnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxODcgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11
bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1w
bmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19z
dHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4g
aW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKIyAyMTAgIi91c3IvbGliL2dj
Yy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4
dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKCmV4
dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAog
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwojIDI0MCAi
L3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19t
b2RlcykgOwojIDI2MyAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251
LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0
dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwK
ICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKZXh0ZXJu
IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpleHRl
cm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHJp
bnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHByaW50ZiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3By
aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChG
SUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGludCB2
cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn
KQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoj
IDMzNCAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIDsKIyAzNjAgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxpbnV4LWdu
dS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt
KSA7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IGdldGNo
YXIgKHZvaWQpIDsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIDsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSA7CgoKCgpleHRlcm4gaW50
IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoKCgoKZXh0
ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4
dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChG
SUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJl
YW0pIDsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf
X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgOwojIDQyNiAiL3Vzci9saWIvZ2Nj
LWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0
ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQ1MCAiL3Vzci9saWIvZ2NjLWxpYi9wb3dl
cnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBm
cHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkKICAgICA7CiMgNDYwICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51
eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hh
ciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg
OwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg
X19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3Ry
aWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
biwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tl
ZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwpl
eHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmc2VlayAo
RklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBs
b25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lkIHJld2luZCAoRklM
RSAqX19zdHJlYW0pIDsKIyA1MDQgIi91c3IvbGliL2djYy1saWIvcG93ZXJwYy11bmtub3duLWxp
bnV4LWdudS8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsKCmV4
dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcykg
OwojIDU0MCAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9p
bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7
CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAo
RklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsK
ZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4g
dm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRlcm4gaW50IHN5c19uZXJy
OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CiMgNTcxICIvdXNy
L2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQg
ZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9w
ZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpl
eHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rl
cm1pZCAoY2hhciAqX19zKSA7CiMgNjE4ICIvdXNyL2xpYi9nY2MtbGliL3Bvd2VycGMtdW5rbm93
bi1saW51eC1nbnUvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUg
KEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0
cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDYz
OSAiL3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRl
L3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMyAiL3Vz
ci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICBy
ZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGlu
ZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpl
eHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4g
KChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo
X19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpl
eHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChz
dGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChz
dGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK
CgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1
dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0Y191bmxvY2tl
ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9f
d3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19z
dHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJl
YW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGlu
dApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChf
X3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBf
X292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBj
aGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgpleHRlcm4g
X19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKCgoc3Rk
b3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJm
bG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCoo
c3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQojIDExMSAiL3Vzci9pbmNsdWRl
L2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7
Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
CnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDY0MCAi
L3Vzci9saWIvZ2NjLWxpYi9wb3dlcnBjLXVua25vd24tbGludXgtZ251LzMuMS9pbmNsdWRlL3N0
ZGlvLmgiIDIgMwoKCgojIDIgInVucm9sbC10ZXN0X2UuYyIgMgoKCnZvaWQgc2NhbGUgKGZsb2F0
ICphbHBoYSwgZmxvYXQgKngsIGludCBuKSB7CiAgaW50IGksIGl4LCBpbmN4MiA9IDI7CgogIGlm
ICgqYWxwaGEgPT0gMC4wKSB7CiAgICBmb3IgKGkgPSAwOyBpIDwgMipuOyBpKyspIHsKICAgICAg
eFtpXSA9IDAuMDsKICAgIH0KICB9IGVsc2UgaWYgKCphbHBoYSAhPSAxLjApIHsKCgogICAgZm9y
IChpID0gMCwgaXggPSAwOyBpIDwgbjsgaSsrLCBpeCArPSBpbmN4MikgewogICAgICBmbG9hdCB0
bXByLCB0bXBpOwogICAgICB0bXByID0gKmFscGhhICogeFtpeF07CiAgICAgIHRtcGkgPSAqYWxw
aGEgKiB4W2l4ICsgMV07CiAgICAgIHhbaXhdID0gdG1wcjsKICAgICAgeFtpeCArIDFdID0gdG1w
aTsKICAgIH0KCiAgfQp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKCiAgaW50
IGk7CiAgZmxvYXQgKng7CiAgZmxvYXQgYWxwaGEgPSAyLjA7CgoKICB4ID0gKGZsb2F0ICopIG1h
bGxvYyhzaXplb2YoZmxvYXQpICogMTApOwogIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQogICAg
eFtpXSA9IChmbG9hdCkgaTsKCiAgcHJpbnRmKCJiZWZvcmU6IHhbOV0gPSAlZlxuIiwgeFs5XSk7
CgoKICBzY2FsZSgmYWxwaGEsIHgsIDUpOwoKICBwcmludGYoIiBhZnRlcjogeFs5XSA9ICVmXG4i
LCB4WzldKTsKCiAgcmV0dXJuIDA7Cn0K


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2002-07-12  2:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-11 19:46 optimization/7130: miscompiled code for gcc-3.1 in powerpc linux with -funroll-all-loops Alan Modra
  -- strict thread matches above, loose matches on Subject: below --
2002-07-11 16:46 Alan Modra
2002-07-11  5:16 Andreas Jaeger
2002-07-11  3:16 Alan Modra
2002-07-11  0:56 Alan Modra
2002-06-25 19:26 yozo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).