(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
rvv/
base/
ternop_vx_constraint-5.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32 -O3" } */
       3  /* { dg-final { check-function-bodies "**" "" } } */
       4  #include "riscv_vector.h"
       5  
       6  /*
       7  ** f0:
       8  **  ...
       9  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      10  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      11  **  ...
      12  **	ret
      13  */
      14  void f0 (void * in, void *out, int64_t x, int n)
      15  {
      16    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      17    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      18    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, -16, v2, 4);
      19    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, -16, v3, 4);
      20    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
      21  }
      22  
      23  /*
      24  ** f1:
      25  **  ...
      26  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      27  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      28  **  ...
      29  **	ret
      30  */
      31  void f1 (void * in, void *out, int64_t x, int n)
      32  {
      33    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      34    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      35    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, 15, v2, 4);
      36    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, 15, v3, 4);
      37    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
      38  }
      39  
      40  /*
      41  ** f2:
      42  **  ...
      43  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      44  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      45  **  ...
      46  **	ret
      47  */
      48  void f2 (void * in, void *out, int64_t x, int n)
      49  {
      50    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      51    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      52    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, 16, v2, 4);
      53    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, 16, v3, 4);
      54    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
      55  }
      56  
      57  /*
      58  ** f3:
      59  **  ...
      60  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      61  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      62  **  ...
      63  **	ret
      64  */
      65  void f3 (void * in, void *out, int64_t x, int n)
      66  {
      67    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      68    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      69    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, 0xAAAAAA, v2, 4);
      70    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, 0xAAAAAA, v3, 4);
      71    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
      72  }
      73  
      74  /*
      75  ** f4:
      76  **  ...
      77  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      78  **	vma[c-d][c-d]\.vx\tv[0-9]+,\s*[a-x0-9]+,\s*v[0-9]+
      79  **  ...
      80  **	ret
      81  */
      82  void f4 (void * in, void *out, int64_t x, int n)
      83  {
      84    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      85    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      86    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, 0xAAAAAAA, v2, 4);
      87    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, 0xAAAAAAA, v3, 4);
      88    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
      89  }
      90  
      91  /*
      92  ** f5:
      93  **  ...
      94  **	vma[c-d][c-d]\.vv\tv[0-9]+,\s*v[0-9]+,\s*v[0-9]+
      95  **	vma[c-d][c-d]\.vv\tv[0-9]+,\s*v[0-9]+,\s*v[0-9]+
      96  **  ...
      97  */
      98  void f5 (void * in, void *out, int64_t x, int n)
      99  {
     100    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
     101    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
     102    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, 0xAAAAAAAAAAAAAAAA, v2, 4);
     103    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, 0xAAAAAAAAAAAAAAAA, v3, 4);
     104    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
     105  }
     106  
     107  /*
     108  ** f6:
     109  **  ...
     110  **	vma[c-d][c-d]\.vv\tv[0-9]+,\s*v[0-9]+,\s*v[0-9]+
     111  **	vma[c-d][c-d]\.vv\tv[0-9]+,\s*v[0-9]+,\s*v[0-9]+
     112  **  ...
     113  */
     114  void f6 (void * in, void *out, int64_t x, int n)
     115  {
     116    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
     117    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
     118    vint64m1_t v3 = __riscv_vmacc_vx_i64m1_tu (v2, x, v2, 4);
     119    vint64m1_t v4 = __riscv_vmacc_vx_i64m1_tu (v3, x, v3, 4);
     120    __riscv_vse64_v_i64m1 (out + 2, v4, 4);
     121  }
     122  
     123  /* { dg-final { scan-assembler-not {vmv} } } */