1 /* { dg-do run { target { s390*-*-* } } } */
2 /* { dg-require-effective-target s390_vx } */
3 /* { dg-options "-O3 -mzarch -march=z13" } */
4 
5 /* For FP zero checks we use the ltdbr instruction.  Since this is an
6    load and test it actually writes the FPR.  Whenever an FPR gets
7    written the rest of the overlapping VR is clobbered.  */
8 typedef double __attribute__((vector_size(16))) v2df;
9 
10 v2df a = { 1.0, 2.0 };
11 
12 extern void abort (void);
13 
14 void __attribute__((noinline))
foo(v2df a)15 foo (v2df a)
16 {
17   v2df b = { 1.0, 3.0 };
18 
19   b -= a;
20 
21   /* Take away all the VRs not overlapping with FPRs.  */
22   asm volatile ("" : : :
23 		"v16","v17","v18","v19",
24 		"v20","v21","v22","v23",
25 		"v24","v25","v26","v27",
26 		"v28","v29","v30","v31");
27   if (b[0] != 0.0) /* ltdbr */
28     abort ();
29   if (b[1] != 1.0)
30     abort ();
31 }
32 
33 int
main()34 main ()
35 {
36   foo (a);
37   return 0;
38 }
39