1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32d -O3" } */
       3  
       4  #include "riscv_vector.h"
       5  
       6  void f1 (void *base1,void *base2,void *base3,void *base4,void *out,size_t vl, size_t shift)
       7  {
       8      vuint16m1_t v1 = __riscv_vle16_v_u16m1 (base1, vl);
       9      vuint16m1_t v2 = __riscv_vle16_v_u16m1 (base2, vl);
      10      vbool16_t m1 = __riscv_vlm_v_b16 (base3, vl);
      11      vbool16_t m2 = __riscv_vlm_v_b16 (base4, vl);
      12      asm volatile("#" ::
      13  		 : "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      14  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      15  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      16  		   "v26", "v27", "v28");
      17  
      18      vbool16_t v = __riscv_vmseq_vv_u16m1_b16_mu(m1,m2,v1,v2,vl);
      19      asm volatile("#" ::
      20  		 : "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      21  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      22  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      23  		   "v26", "v27");
      24  
      25      __riscv_vsm_v_b16 (out,v,vl);
      26  }
      27  
      28  void f2 (void *base1,void *base2,void *base3,void *base4,void *out,size_t vl, uint16_t shift)
      29  {
      30      vuint16m1_t v1 = __riscv_vle16_v_u16m1 (base1, vl);
      31      vbool16_t m1 = __riscv_vlm_v_b16 (base3, vl);
      32      vbool16_t m2 = __riscv_vlm_v_b16 (base4, vl);
      33      asm volatile("#" ::
      34  		 : "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      35  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      36  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      37  		   "v26", "v27", "v28", "v29");
      38  
      39      vbool16_t v = __riscv_vmseq_vx_u16m1_b16_mu(m1,m2,v1,shift,vl);
      40      asm volatile("#" ::
      41  		 : "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      42  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      43  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      44  		   "v26", "v27", "v28", "v29");
      45  
      46  
      47      __riscv_vsm_v_b16 (out,v,vl);
      48  }
      49  
      50  void f3 (void *base1,void *base2,void *base3,void *base4,void *out,size_t vl, size_t shift)
      51  {
      52      vuint16m1_t v1 = __riscv_vle16_v_u16m1 (base1, vl);
      53      vuint16m1_t v2 = __riscv_vle16_v_u16m1 (base2, vl);
      54      vbool16_t m1 = __riscv_vlm_v_b16 (base3, vl);
      55      vbool16_t m2 = __riscv_vlm_v_b16 (base4, vl);
      56      asm volatile("#" ::
      57  		 : "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      58  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      59  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      60  		   "v26", "v27", "v28");
      61  
      62      vbool16_t v = __riscv_vmsltu_vv_u16m1_b16_mu(m1,m2,v1,v2,vl);
      63      asm volatile("#" ::
      64  		 : "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      65  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      66  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      67  		   "v26", "v27");
      68  
      69      __riscv_vsm_v_b16 (out,v,vl);
      70  }
      71  
      72  void f4 (void *base1,void *base2,void *base3,void *base4,void *out,size_t vl, uint16_t shift)
      73  {
      74      vuint16m1_t v1 = __riscv_vle16_v_u16m1 (base1, vl);
      75      vbool16_t m1 = __riscv_vlm_v_b16 (base3, vl);
      76      vbool16_t m2 = __riscv_vlm_v_b16 (base4, vl);
      77      asm volatile("#" ::
      78  		 : "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      79  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      80  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      81  		   "v26", "v27", "v28", "v29");
      82  
      83      vbool16_t v = __riscv_vmsltu_vx_u16m1_b16_mu(m1,m2,v1,shift,vl);
      84      asm volatile("#" ::
      85  		 : "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",
      86  		   "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", 
      87  		   "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",  
      88  		   "v26", "v27", "v28", "v29");
      89  
      90  
      91      __riscv_vsm_v_b16 (out,v,vl);
      92  }
      93  
      94  /* { dg-final { scan-assembler-not {vmv} } } */
      95  /* { dg-final { scan-assembler-not {csrr} } } */