1118611Snjl/* Check calling convention in the vector ABI. */ 2118611Snjl 3218590Sjkim/* { dg-do compile { target { s390*-*-* } } } */ 4118611Snjl/* { dg-options "-O3 -mzarch -march=z13" } */ 5118611Snjl 6118611Snjl/* c.i and c.j are passed by reference since a struct with two 7217365Sjkim elements is no vector type argument. */ 8217365Sjkim/* { dg-final { scan-assembler "ld\t%v\[0-9\]*,0\\(%r3\\)" } } */ 9118611Snjl/* { dg-final { scan-assembler "ld\t%v\[0-9\]*,8\\(%r3\\)" } } */ 10118611Snjl 11217365Sjkim/* just_v2si is passed in a vector reg if it as an incoming arg. 12217365Sjkim However, as return value it is passed via hidden first pointer 13217365Sjkim argument. */ 14217365Sjkim/* { dg-final { scan-assembler ".*st.*\t%v\[0-9\]*,0\\(%r2\\)" } } */ 15217365Sjkim 16217365Sjkim/* { dg-final { scan-assembler "gnu_attribute 8, 2" } } */ 17217365Sjkim 18217365Sjkimtypedef int __attribute__ ((vector_size(8))) v2si; 19217365Sjkim 20217365Sjkimstruct just_v2si 21217365Sjkim{ 22217365Sjkim v2si i; 23217365Sjkim}; 24217365Sjkim 25118611Snjlstruct two_v2si 26217365Sjkim{ 27217365Sjkim v2si i, j; 28217365Sjkim}; 29118611Snjl 30217365Sjkimstruct just_v2si 31217365Sjkimadd_structvecs (v2si a, struct just_v2si b, struct two_v2si c) 32217365Sjkim{ 33217365Sjkim struct just_v2si res; 34217365Sjkim 35217365Sjkim res.i = a + b.i + c.i + c.j; 36217365Sjkim return res; 37217365Sjkim} 38217365Sjkim