/* APPLE LOCAL begin radar 4614623 */
/* { dg-do run { target i?86-*-* } } */
/* { dg-skip-if "" { *-*-darwin* } { "-m64" } { "" } } */
/* { dg-options "-O -mmmx -fomit-frame-pointer -march=pentium-m" } */
#include <signal.h>
extern void abort (void);

void sig_ill_handler (int sig)
{
  abort ();
}

int foo (const int m, const int n, const float *a1, const float *a,
         const float *b, const float *b1, float *c)
{
  float t1_i, t1_r;
  int i, iaki, ibij, ibkj, icij, j, jai, jbj, jcj, k, lda2 = 1, ldb2 = 2, ldc2 = 1;
  for (j = 0, jbj = 0, jcj = 0; j < n; j++, jbj += ldb2, jcj += ldc2)
    {
      for (i = m-1, jai = (m-1)*lda2, ibij = ((m-1) << 1)+jbj,
           icij = ((m-1) << 1 )+jcj; i >= 0;
           i--, jai -= lda2, ibij -= 2, icij -= 2 )
        {
          for (k = i+1, iaki = ((i+1) << 1 )+jai, ibkj = ((i+1) << 1)+jbj;
               k < m;
               k++, iaki += 2, ibkj += 2)
            {
              t1_r += (b[ibkj]) * (a[iaki]) - (b[ibkj+1]) * (-a[iaki+1]);
              t1_i += (b[ibkj]) * (-a[iaki+1]) + (b[ibkj+1]) * (a[iaki]);
            }
          c[icij] += (a1[0]) * (t1_r) - (a1[1]) * (t1_i);
          c[icij+1] += (a1[0]) * (t1_i) + (a1[1]) * (t1_r);
        }
    }
}

int main ()
{
  float a[4], b[4], c[4], d[4], e[4];
  signal (SIGILL, sig_ill_handler);
  foo (2, 2, a, b, c, d, e);
  return 0;
}
/* APPLE LOCAL end radar 4614623 */
