1 /* { dg-do compile } */
2 /* { dg-options "-mfp64 -mhard-float -mmsa" } */
3 /* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
4
5 typedef short v8i16 __attribute__ ((vector_size (16)));
6 typedef int v4i32 __attribute__ ((vector_size (16)));
7
8 void foo (int *x, v8i16 *y, v8i16 *z)
9 {
10 v4i32 acc[4];
11
12 acc[0] = __builtin_msa_ld_w(x, 0);
13 acc[1] = __builtin_msa_ld_w(x, 16);
14 acc[2] = __builtin_msa_ld_w(x, 32);
15 acc[3] = __builtin_msa_ld_w(x, 48);
16
17 acc[0] = __builtin_msa_dpadd_s_w(acc[0], y[0], z[0]);
18 acc[1] = __builtin_msa_dpadd_s_w(acc[1], y[1], z[0]);
19 acc[2] = __builtin_msa_dpsub_s_w(acc[2], y[0], z[1]);
20 acc[3] = __builtin_msa_dpsub_s_w(acc[3], y[1], z[1]);
21
22 __builtin_msa_st_w(acc[0], x, 0);
23 __builtin_msa_st_w(acc[1], x, 16);
24 __builtin_msa_st_w(acc[2], x, 32);
25 __builtin_msa_st_w(acc[3], x, 48);
26 }
27
28 /* { dg-final { scan-assembler-not "move.v" } } */