blob: a1d1c11df37b87894b0fa221fdc2fef5fb95f174 [file] [log] [blame]
/* Machine description pattern tests. */
/* { dg-do compile } */
/* { dg-options "-mmvcle -dP -save-temps" } */
/* { dg-do run { target { s390_useable_hw } } } */
/* Skip test if -O0 is present on the command line or -O... is missing:
{ dg-skip-if "" { *-*-* } { "-march=z9*" "-O0" } { "" } }
{ dg-skip-if "" { *-*-* } { "*" } { "-O*" } }
*/
__attribute__ ((noinline))
void test(char *p, char c, int len)
{
__builtin_memset(p, c, len);
}
__attribute__ ((noinline))
void test2(char *p, int c, int len)
{
__builtin_memset(p, (char)c, len);
}
/* Check that the right patterns are used. */
/* { dg-final { scan-assembler-times {c"?:16:.*{[*]setmem_long_?3?1?z?}} 1 } } */
/* { dg-final { scan-assembler-times {c"?:22:.*{[*]setmem_long_and_?3?1?z?}} 1 } } */
#define LEN 500
char buf[LEN + 2];
void init_buf(void)
{
int i;
buf[0] = 0;
for (i = 1; i <= LEN; i++)
buf[i] = (0x10 + (i & 0x3f));
buf[LEN + 1] = 0x7f;
}
void validate_buf(char val)
{
int i;
if (buf[0] != 0)
__builtin_abort();
for (i = 1; i <= LEN; i++)
if (buf[i] != val)
__builtin_abort();
if (buf[LEN + 1] != 0x7f)
__builtin_abort();
}
int main(void)
{
init_buf();
test(buf + 1, 55, LEN);
validate_buf(55);
init_buf();
test(buf + 1, 66, LEN);
validate_buf(66);
}