1/* { dg-do run { target { s390*-*-* } } } */ 2/* { dg-require-effective-target vector } */ 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. */ 8typedef double __attribute__((vector_size(16))) v2df; 9 10v2df a = { 1.0, 2.0 }; 11 12extern void abort (void); 13 14void __attribute__((noinline)) 15foo (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 33int 34main () 35{ 36 foo (a); 37 return 0; 38} 39