(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
simd/
vmulx_f64_1.c
       1  /* Test the vmulx_f64 AArch64 SIMD intrinsic.  */
       2  
       3  /* { dg-do run } */
       4  /* { dg-options "-save-temps -O3" } */
       5  
       6  #include "arm_neon.h"
       7  
       8  extern void abort (void);
       9  
      10  void  __attribute__ ((noinline))
      11  test_case (float64_t v1[1], float64_t v2[1], float64_t e1[1])
      12  {
      13    float64x1_t vec1_1 = vld1_f64 (v1);
      14    float64x1_t vec1_2 = vld1_f64 (v2);
      15  
      16    float64x1_t actual1 = vmulx_f64 (vec1_1, vec1_2);
      17    float64_t actual[1];
      18    vst1_f64 (actual, actual1);
      19    if (actual[0] != e1[0])
      20      abort ();
      21  }
      22  
      23  int
      24  main (void)
      25  {
      26    float64_t v1 = 3.14159265359;
      27    float64_t v2 = -2.71828;
      28  
      29    float64_t v1_1[] = {v1};
      30    float64_t v1_2[] = {v2};
      31    float64_t e1[] = {v1 * v2};
      32    test_case (v1_1, v1_2, e1);
      33  
      34    float64_t v2_1[] = {0};
      35    float64_t v2_2[] = {__builtin_huge_val ()};
      36    float64_t e2[] = {2.0};
      37    test_case (v2_1, v2_2, e2);
      38  
      39    float64_t v3_1[] = {0};
      40    float64_t v3_2[] = {-__builtin_huge_val ()};
      41    float64_t e3[] = {-2.0};
      42    test_case (v3_1, v3_2, e3);
      43  
      44    float64_t v4_1[] = {-0.0};
      45    float64_t v4_2[] = {__builtin_huge_val ()};
      46    float64_t e4[] = {-2.0};
      47    test_case (v4_1, v4_2, e4);
      48  
      49    float64_t v5_1[] = {-0.0};
      50    float64_t v5_2[] = {-__builtin_huge_val ()};
      51    float64_t e5[] = {2.0};
      52    test_case (v5_1, v5_2, e5);
      53  
      54    return 0;
      55  }
      56  
      57  /* { dg-final { scan-assembler-times "fmulx\[ \t\]+\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+, ?\[dD\]\[0-9\]+\n" 1 } } */