1
2 #include <stdio.h>
3
do_pushb_pos(void)4 void do_pushb_pos ( void )
5 {
6 unsigned int block[3];
7 __asm__ __volatile__ (
8 "movl %0, %%edx\n\t"
9 "pushl $0x55555555\n\t"
10 "movl %%esp, 0(%%edx)\n\t"
11 ".byte 0x6A,0x22\n\t"
12 "movl %%esp, 4(%%edx)\n\t"
13 "popl %%eax\n\t"
14 "movl %%eax,8(%%edx)\n\t"
15 "movl 0(%%edx),%%esp\n\t"
16 "addl $4, %%esp"
17 : : "r"(&block) : "eax","edx","cc","memory"
18 );
19 printf(" pushb_pos: delta %d, top32 0x%08x\n",
20 block[0] - block[1], block[2]);
21 }
22
do_pushb_neg(void)23 void do_pushb_neg ( void )
24 {
25 unsigned int block[3];
26 __asm__ __volatile__ (
27 "movl %0, %%edx\n\t"
28 "pushl $0x55555555\n\t"
29 "movl %%esp, 0(%%edx)\n\t"
30 ".byte 0x6A,0xEE\n\t"
31 "movl %%esp, 4(%%edx)\n\t"
32 "popl %%eax\n\t"
33 "movl %%eax,8(%%edx)\n\t"
34 "movl 0(%%edx),%%esp\n\t"
35 "addl $4, %%esp"
36 : : "r"(&block) : "eax","edx","cc","memory"
37 );
38 printf(" pushb_neg: delta %d, top32 0x%08x\n",
39 block[0] - block[1], block[2]);
40 }
41
do_pushw_pos(void)42 void do_pushw_pos ( void )
43 {
44 unsigned int block[3];
45 __asm__ __volatile__ (
46 "movl %0, %%edx\n\t"
47 "pushl $0x55555555\n\t"
48 "movl %%esp, 0(%%edx)\n\t"
49 "pushw $0x3344\n\t"
50 "movl %%esp, 4(%%edx)\n\t"
51 "popl %%eax\n\t"
52 "movl %%eax,8(%%edx)\n\t"
53 "movl 0(%%edx),%%esp\n\t"
54 "addl $4, %%esp"
55 : : "r"(&block) : "eax","edx","cc","memory"
56 );
57 printf(" pushw_neg: delta %d, top32 0x%08x\n",
58 block[0] - block[1], block[2]);
59 }
60
do_pushw_neg(void)61 void do_pushw_neg ( void )
62 {
63 unsigned int block[3];
64 __asm__ __volatile__ (
65 "movl %0, %%edx\n\t"
66 "pushl $0x55555555\n\t"
67 "movl %%esp, 0(%%edx)\n\t"
68 "pushw $0xDDCC\n\t"
69 "movl %%esp, 4(%%edx)\n\t"
70 "popl %%eax\n\t"
71 "movl %%eax,8(%%edx)\n\t"
72 "movl 0(%%edx),%%esp\n\t"
73 "addl $4, %%esp"
74 : : "r"(&block) : "eax","edx","cc","memory"
75 );
76 printf(" pushw_pos: delta %d, top32 0x%08x\n",
77 block[0] - block[1], block[2]);
78 }
79
do_pushl_pos(void)80 void do_pushl_pos ( void )
81 {
82 unsigned int block[3];
83 __asm__ __volatile__ (
84 "movl %0, %%edx\n\t"
85 "pushl $0x55555555\n\t"
86 "movl %%esp, 0(%%edx)\n\t"
87 "pushl $0x67675656\n\t"
88 "movl %%esp, 4(%%edx)\n\t"
89 "popl %%eax\n\t"
90 "movl %%eax,8(%%edx)\n\t"
91 "movl 0(%%edx),%%esp\n\t"
92 "addl $4, %%esp"
93 : : "r"(&block) : "eax","edx","cc","memory"
94 );
95 printf(" pushl_pos: delta %d, top32 0x%08x\n",
96 block[0] - block[1], block[2]);
97 }
98
do_pushl_neg(void)99 void do_pushl_neg ( void )
100 {
101 unsigned int block[3];
102 __asm__ __volatile__ (
103 "movl %0, %%edx\n\t"
104 "pushl $0x55555555\n\t"
105 "movl %%esp, 0(%%edx)\n\t"
106 "pushl $0x98988787\n\t"
107 "movl %%esp, 4(%%edx)\n\t"
108 "popl %%eax\n\t"
109 "movl %%eax,8(%%edx)\n\t"
110 "movl 0(%%edx),%%esp\n\t"
111 "addl $4, %%esp"
112 : : "r"(&block) : "eax","edx","cc","memory"
113 );
114 printf(" pushl_neg: delta %d, top32 0x%08x\n",
115 block[0] - block[1], block[2]);
116 }
117
118
do_66pushb_pos(void)119 void do_66pushb_pos ( void )
120 {
121 unsigned int block[3];
122 __asm__ __volatile__ (
123 "movl %0, %%edx\n\t"
124 "pushl $0x55555555\n\t"
125 "movl %%esp, 0(%%edx)\n\t"
126 ".byte 0x66,0x6A,0x22\n\t"
127 "movl %%esp, 4(%%edx)\n\t"
128 "popl %%eax\n\t"
129 "movl %%eax,8(%%edx)\n\t"
130 "movl 0(%%edx),%%esp\n\t"
131 "addl $4, %%esp"
132 : : "r"(&block) : "eax","edx","cc","memory"
133 );
134 printf("66pushb_pos: delta %d, top32 0x%08x\n",
135 block[0] - block[1], block[2]);
136 }
137
do_66pushb_neg(void)138 void do_66pushb_neg ( void )
139 {
140 unsigned int block[3];
141 __asm__ __volatile__ (
142 "movl %0, %%edx\n\t"
143 "pushl $0x55555555\n\t"
144 "movl %%esp, 0(%%edx)\n\t"
145 ".byte 0x66,0x6A,0xEE\n\t"
146 "movl %%esp, 4(%%edx)\n\t"
147 "popl %%eax\n\t"
148 "movl %%eax,8(%%edx)\n\t"
149 "movl 0(%%edx),%%esp\n\t"
150 "addl $4, %%esp"
151 : : "r"(&block) : "eax","edx","cc","memory"
152 );
153 printf("66pushb_neg: delta %d, top32 0x%08x\n",
154 block[0] - block[1], block[2]);
155 }
156
157
main(void)158 int main ( void )
159 {
160 do_pushb_pos();
161 do_pushb_neg();
162 do_pushw_pos();
163 do_pushw_neg();
164 do_pushl_pos();
165 do_pushl_neg();
166
167 do_66pushb_pos();
168 do_66pushb_neg();
169 return 0;
170 }
171