Bug 385411 s390x: Tests and internals for z13 vector FP support
[valgrind.git] / none / tests / x86 / looper.c
blob60554ec7637d68e405406ce11cb53e5f31696b90
1 #include "tests/asm.h"
2 #include <stdio.h>
4 int arg = 0;
5 int res = 0;
7 extern void loop_plain ( void );
8 asm("\n"
9 ".text\n"
10 VG_SYM(loop_plain) ":\n"
11 "\tpushl %ecx\n"
12 "\tmovl $999, %eax\n"
13 "\tmovl " VG_SYM(arg) ", %ecx\n"
15 "0:\n"
16 "\tdecl %eax\n"
17 "\tdecl %eax\n"
18 "\tdecl %eax\n"
19 "\tloop 0b\n"
21 "\tmovl %eax, " VG_SYM(res) "\n"
22 "\tpopl %ecx\n"
23 "\tret\n"
26 extern void loop_ne ( void );
27 asm("\n"
28 ".text\n"
29 VG_SYM(loop_ne) ":\n"
30 "\tpushl %ecx\n"
31 "\tmovl $999, %eax\n"
32 "\tmovl " VG_SYM(arg) ", %ecx\n"
34 "0:\n"
35 "\tdecl %eax\n"
36 "\tdecl %eax\n"
37 "\tdecl %eax\n"
38 "\tloopne 0b\n"
40 "\tmovl %eax, " VG_SYM(res) "\n"
41 "\tpopl %ecx\n"
42 "\tret\n"
45 extern void loop_e ( void );
46 asm("\n"
47 ".text\n"
48 VG_SYM(loop_e) ":\n"
49 "\tpushl %ecx\n"
50 "\tmovl $999, %eax\n"
51 "\tmovl " VG_SYM(arg) ", %ecx\n"
53 "0:\n"
54 "\tdecl %eax\n"
55 "\tdecl %eax\n"
56 "\tdecl %eax\n"
57 /* invert the Z flag */
58 "\tpushfl\n"
59 "\txorl $64, 0(%esp)\n"
60 "\tpopfl\n"
61 "\tloope 0b\n"
63 "\tmovl %eax, " VG_SYM(res) "\n"
64 "\tpopl %ecx\n"
65 "\tret\n"
68 int main ( void )
70 res = 0; arg = 10; loop_plain(); printf("res = %d\n", res);
72 res = 0; arg = 10; loop_ne(); printf("res = %d\n", res);
73 res = 0; arg = 500; loop_ne(); printf("res = %d\n", res);
75 res = 0; arg = 10; loop_e(); printf("res = %d\n", res);
76 res = 0; arg = 500; loop_e(); printf("res = %d\n", res);
78 return 0;