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