1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -mzarch -march=arch13 -mzvector -fno-asynchronous-unwind-tables -dp" } */
       3  
       4  #include <vecintrin.h>
       5  
       6  vector double
       7  vcdgb (vector signed long long a)
       8  {
       9    return vec_double (a);
      10  }
      11  
      12  /* { dg-final { scan-assembler-times "vcdgb.*\n\tvcdgb.*floatv2div2df2" 1 } } */
      13  
      14  vector double
      15  vcdlgb (vector unsigned long long a)
      16  {
      17    return vec_double (a);
      18  }
      19  
      20  /* { dg-final { scan-assembler-times "vcdlgb.*\n\tvcdlgb.*floatunsv2div2df2" 1 } } */
      21  
      22  vector double
      23  vcdgb_mem (vector signed long long *a)
      24  {
      25    return vec_double (*a);
      26  }
      27  
      28  vector double
      29  vcdlgb_mem (vector unsigned long long *a)
      30  {
      31    return vec_double (*a);
      32  }
      33  
      34  /* The following immediates are being converted and directly stored
      35     in the literal pool so no explicit conversion is necessary.   */
      36  /* { dg-final { scan-assembler-times "vl\t%v\[0-9\]+,\.L\[0-9\]+\-\.L\[0-9\]+\\(%r\[0-9\]+\\)" 2 } } */
      37  
      38  vector double
      39  vcdgb_imm ()
      40  {
      41    return vec_double ((vector signed long long) { 1, -2 });
      42  }
      43  
      44  vector double
      45  vcdlgb_imm ()
      46  {
      47    return vec_double ((vector unsigned long long){ 1, 2 });
      48  }
      49  
      50  /* { dg-final { scan-assembler-times "vcdgb\t" 2 } } */
      51  /* { dg-final { scan-assembler-times "vcdlgb\t" 2 } } */