/* Funtional setmem test. */ /* { dg-do run } */ /* { dg-options "-O3" } */ #define MAX_LEN (8 * 1000) __attribute__ ((noinline)) int check_mem (char *mem, int val, int len) { int i; if (mem[0] != 0x71) __builtin_abort(); for (i = 1; i <= len; i++) if (mem[i] != val) __builtin_abort(); if (mem[len + 1] != 0x71 + (len + 1) % 4) __builtin_abort(); } __attribute__ ((noinline)) void init_mem (char *mem) { unsigned int *p; int i; p = (unsigned int *)mem; for (i = 0; i < MAX_LEN / sizeof(unsigned int); i++) p[i] = 0x71727374; } #define MEMSET_CHECK(VAL, SIZE) \ init_mem (mem1); \ __builtin_memset (mem1 + 1, 0, (SIZE)); \ check_mem (mem1, 0, SIZE); \ init_mem (mem2); \ __builtin_memset (mem2 + 1, (VAL), (SIZE)); \ check_mem (mem2, VAL, SIZE); char mem1[MAX_LEN + 2]; char mem2[MAX_LEN + 2]; int main(int argc, char **argv) { int lens[] = { 256, 257, 258, 259, 512, 513, 514, 515, 768, 769, 770, 771, 1024, 1025, 1026, 1027, 1280, 1281, 1282, 1283, -999 }; int t; /* variable length */ for (t = 0; lens[t] != -999; t++) { MEMSET_CHECK (argc + 0x10, lens[t]); } /* constant length */ MEMSET_CHECK (argc + 0x10, 0); MEMSET_CHECK (argc + 0x10, 1); MEMSET_CHECK (argc + 0x10, 2); MEMSET_CHECK (argc + 0x10, 3); MEMSET_CHECK (argc + 0x10, 256); MEMSET_CHECK (argc + 0x10, 257); MEMSET_CHECK (argc + 0x10, 258); MEMSET_CHECK (argc + 0x10, 259); MEMSET_CHECK (argc + 0x10, 512); MEMSET_CHECK (argc + 0x10, 513); MEMSET_CHECK (argc + 0x10, 514); MEMSET_CHECK (argc + 0x10, 515); MEMSET_CHECK (argc + 0x10, 768); MEMSET_CHECK (argc + 0x10, 769); MEMSET_CHECK (argc + 0x10, 770); MEMSET_CHECK (argc + 0x10, 771); MEMSET_CHECK (argc + 0x10, 1024); MEMSET_CHECK (argc + 0x10, 1025); MEMSET_CHECK (argc + 0x10, 1026); MEMSET_CHECK (argc + 0x10, 1027); MEMSET_CHECK (argc + 0x10, 1280); MEMSET_CHECK (argc + 0x10, 1281); MEMSET_CHECK (argc + 0x10, 1282); MEMSET_CHECK (argc + 0x10, 1283); return 0; }