1 /* Based on reproducer done by Dejan Jevtic */ 2 int main (void) 3 { 4 #if defined(VGA_amd64) 5 /* Note that small changes in the code below 6 caused the bug not to be triggered anymore. 7 E.g. removing the dec %%eax avoids the assert 8 while this removal causes one more loop to be 9 executed. */ 10 __asm__ __volatile__ 11 ("mov $30, %%eax\n\t" 12 "top:\n\t" 13 "mov $-4, %%ebx\n\t" 14 "add %%ebx, %%eax\n\t" 15 "dec %%eax\n\t" 16 "cmp $0x0,%%eax\n\t" 17 "jne top\n\t" 18 "mov $60, %%eax\n\t" 19 "mov $0, %%rdi\n\t" 20 "syscall\n\t" 21 : : : "eax", "ebx", "rdi" 22 ); 23 #elif defined(VGA_mips32) || defined(VGA_mips64) 24 __asm__ __volatile__ 25 ("li $t0, 42\n\t" 26 "top:\n\t" 27 "li $t1, -4\n\t" 28 "addu $t0, $t0, $t1\n\t" 29 "li $t2, -2\n\t" 30 "addu $t0, $t0, $t2\n\t" 31 "addiu $t0, $t0, -1\n\t" 32 "bnez $t0, top\n\t" 33 "nop\n\t" 34 : : : "t0", "t1" 35 ); 36 #endif 37 return 0; 38 } 39