1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "tests/asm.h"
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint arg = 0;
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint res = 0;
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void loop_plain ( void );
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown".text\n"
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownVG_SYM(loop_plain) ":\n"
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushl %ecx\n"
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl $999, %eax\n"
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl " VG_SYM(arg) ", %ecx\n"
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"0:\n"
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tloop 0b\n"
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl %eax, " VG_SYM(res) "\n"
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopl %ecx\n"
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void loop_ne ( void );
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown".text\n"
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownVG_SYM(loop_ne) ":\n"
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushl %ecx\n"
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl $999, %eax\n"
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl " VG_SYM(arg) ", %ecx\n"
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"0:\n"
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tloopne 0b\n"
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl %eax, " VG_SYM(res) "\n"
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopl %ecx\n"
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void loop_e ( void );
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n"
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown".text\n"
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownVG_SYM(loop_e) ":\n"
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushl %ecx\n"
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl $999, %eax\n"
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl " VG_SYM(arg) ", %ecx\n"
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"0:\n"
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tdecl %eax\n"
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* invert the Z flag */
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpushfl\n"
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\txorl $64, 0(%esp)\n"
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopfl\n"
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tloope 0b\n"
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tmovl %eax, " VG_SYM(res) "\n"
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tpopl %ecx\n"
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret\n"
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown);
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void )
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res = 0; arg = 10;  loop_plain(); printf("res = %d\n", res);
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res = 0; arg = 10;  loop_ne();    printf("res = %d\n", res);
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res = 0; arg = 500; loop_ne();    printf("res = %d\n", res);
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res = 0; arg = 10;  loop_e();    printf("res = %d\n", res);
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   res = 0; arg = 500; loop_e();    printf("res = %d\n", res);
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
80