/* APPLE LOCAL file CW asm blocks */
/* { dg-do assemble { target i?86*-*-darwin* } } */
/* { dg-skip-if "" { *-*-darwin* } { "-m64" } { "" } } */
/* { dg-options { -fasm-blocks -msse3 } } */
/* Radar 4371958 */

#define SourceArray(row, col)  (sPtr [(row) * sRowBytes + (col)])
void foo() {
  char *sPtr[20];
  int sRowBytes = 1;
  SourceArray(0, 0);
  asm {
    nop
    ;           w2 = SourceArray(rowIndex + 1, colIndex * sColBytes) +
    nop
  }
}

void
RefBNDecimateH1() { }
#define DoOldDecimateH RefBNDecimateH1
void X_DecimateH (int cols) {
  if ( cols < 8 )
    {
      DoOldDecimateH ();
      return;
    }
  asm { call DoOldDecimateH }
}
