1  /* Check that vector extraction works correctly. */
       2  
       3  /* { dg-do run } */
       4  /* { dg-options "-msse" { target { i?86-*-* x86_64-*-* } } } */
       5  /* { dg-require-effective-target sse_runtime { target { i?86-*-* x86_64-*-* } } } */
       6  /* { dg-options "-mabi=altivec" { target { powerpc-*-* powerpc64-*-* } } } */
       7  /* { dg-require-effective-target vmx_hw { target { powerpc-*-* powerpc64--*-* } } } */
       8  
       9  #define vector __attribute__((vector_size(16) ))
      10  
      11  int f0(vector int t)
      12  {
      13    return ((int*)&t)[0];
      14  }
      15  int f1(vector int t)
      16  {
      17    return ((int*)&t)[1];
      18  }
      19  int f2(vector int t)
      20  {
      21    return ((int*)&t)[2];
      22  }
      23  int f3(vector int t)
      24  {
      25    return ((int*)&t)[3];
      26  }
      27  int main(void)
      28  {
      29    vector int a = {0, 1, 2, 3};
      30    /* Make sure that we have the correct size for the vectors. */
      31    if (sizeof(int) != 4)
      32      __builtin_exit (0);
      33    if (f0(a) != 0)
      34      __builtin_abort ();
      35    if (f1(a) != 1)
      36      __builtin_abort ();
      37    if (f2(a) != 2)
      38      __builtin_abort ();
      39    if (f3(a) != 3)
      40      __builtin_abort ();
      41    return 0;
      42  }