#include #include #include #include #include #include static volatile sig_atomic_t counter = 0; static void fn(void) { unsigned char q = 0; while (1) { unsigned char xv[64]; unsigned c, i; __asm__ volatile("vpbroadcastb %2, %%zmm31; 1: loop 1b; vmovdqu64 %%zmm31, %0" : "=m"(xv), "=c"(c) : "r"((unsigned)q), "c"(1000) #ifdef __AVX512F__ : "zmm31" #endif ); for (i = 0; i < 64; i++) { if (xv[i] != q) { fprintf(stderr, "mismatch[%x]: %x != %x\n", i, xv[i], q); return; } } q++; if (counter >= 100) { alarm(0); write(1, "x", 1); execl("/proc/self/exe", "/proc/self/exe", NULL); } } } static void alrm(int sig) { __asm__ volatile ("vpbroadcastb %0, %%zmm31" :: "r"(0x40) #ifdef __AVX512F__ : "zmm31" #endif ); write(1, ".", 1); counter++; } int main(void) { struct itimerval it; signal(SIGALRM, alrm); it.it_interval.tv_sec = 0; it.it_interval.tv_usec = 10000; it.it_value.tv_sec = 0; it.it_value.tv_usec = 10000; setitimer(ITIMER_REAL, &it, NULL); fn(); return 1; }