1
2#include <stdio.h>
3
4static int movzbw_1 ( void )
5{
6   int res;
7   __asm__ __volatile__(
8      "movl $0x12345678, %%eax\n\t"
9      "movb $0x22, %%al\n\t"
10      "movzbw %%al,%%ax\n\t"
11      "mov %%eax, %0"
12      : "=r"(res) : : "eax"
13   );
14   return res;
15}
16
17static int movzbw_2 ( void )
18{
19   int res;
20   __asm__ __volatile__(
21      "movl $0x12345678, %%eax\n\t"
22      "movb $0x99, %%al\n\t"
23      "movzbw %%al,%%ax\n\t"
24      "mov %%eax, %0"
25      : "=r"(res) : : "eax"
26   );
27   return res;
28}
29
30static int movzbl_1 ( void )
31{
32   int res;
33   __asm__ __volatile__(
34      "movl $0x12345678, %%eax\n\t"
35      "movb $0x22, %%al\n\t"
36      "movzbl %%al,%%eax\n\t"
37      "mov %%eax, %0"
38      : "=r"(res) : : "eax"
39   );
40   return res;
41}
42
43static int movzbl_2 ( void )
44{
45   int res;
46   __asm__ __volatile__(
47      "movl $0x12345678, %%eax\n\t"
48      "movb $0x99, %%al\n\t"
49      "movzbl %%al,%%eax\n\t"
50      "mov %%eax, %0"
51      : "=r"(res) : : "eax"
52   );
53   return res;
54}
55
56static int movzwl_1 ( void )
57{
58   int res;
59   __asm__ __volatile__(
60      "movl $0x12345678, %%eax\n\t"
61      "movw $0x2222, %%ax\n\t"
62      "movzwl %%ax,%%eax\n\t"
63      "mov %%eax, %0"
64      : "=r"(res) : : "eax"
65   );
66   return res;
67}
68
69static int movzwl_2 ( void )
70{
71   int res;
72   __asm__ __volatile__(
73      "movl $0x12345678, %%eax\n\t"
74      "movw $0x9999, %%ax\n\t"
75      "movzwl %%ax,%%eax\n\t"
76      "mov %%eax, %0"
77      : "=r"(res) : : "eax"
78   );
79   return res;
80}
81
82static int movsbw_1 ( void )
83{
84   int res;
85   __asm__ __volatile__(
86      "movl $0x12345678, %%eax\n\t"
87      "movb $0x22, %%al\n\t"
88      "movsbw %%al,%%ax\n\t"
89      "mov %%eax, %0"
90      : "=r"(res) : : "eax"
91   );
92   return res;
93}
94
95static int movsbw_2 ( void )
96{
97   int res;
98   __asm__ __volatile__(
99      "movl $0x12345678, %%eax\n\t"
100      "movb $0x99, %%al\n\t"
101      "movsbw %%al,%%ax\n\t"
102      "mov %%eax, %0"
103      : "=r"(res) : : "eax"
104   );
105   return res;
106}
107
108static int movsbl_1 ( void )
109{
110   int res;
111   __asm__ __volatile__(
112      "movl $0x12345678, %%eax\n\t"
113      "movb $0x22, %%al\n\t"
114      "movsbl %%al,%%eax\n\t"
115      "mov %%eax, %0"
116      : "=r"(res) : : "eax"
117   );
118   return res;
119}
120
121static int movsbl_2 ( void )
122{
123   int res;
124   __asm__ __volatile__(
125      "movl $0x12345678, %%eax\n\t"
126      "movb $0x99, %%al\n\t"
127      "movsbl %%al,%%eax\n\t"
128      "mov %%eax, %0"
129      : "=r"(res) : : "eax"
130   );
131   return res;
132}
133
134static int movswl_1 ( void )
135{
136   int res;
137   __asm__ __volatile__(
138      "movl $0x12345678, %%eax\n\t"
139      "movw $0x2222, %%ax\n\t"
140      "movswl %%ax,%%eax\n\t"
141      "mov %%eax, %0"
142      : "=r"(res) : : "eax"
143   );
144   return res;
145}
146
147static int movswl_2 ( void )
148{
149   int res;
150   __asm__ __volatile__(
151      "movl $0x12345678, %%eax\n\t"
152      "movw $0x9999, %%ax\n\t"
153      "movswl %%ax,%%eax\n\t"
154      "mov %%eax, %0"
155      : "=r"(res) : : "eax"
156   );
157   return res;
158}
159
160
161
162int main ( void )
163{
164   printf("%8s 0x%08x\n", "movzbw_1", movzbw_1());
165   printf("%8s 0x%08x\n", "movzbw_2", movzbw_2());
166   printf("%8s 0x%08x\n", "movzbl_1", movzbl_1());
167   printf("%8s 0x%08x\n", "movzbl_2", movzbl_2());
168   printf("%8s 0x%08x\n", "movzwl_1", movzwl_1());
169   printf("%8s 0x%08x\n", "movzwl_2", movzwl_2());
170   printf("%8s 0x%08x\n", "movsbw_1", movsbw_1());
171   printf("%8s 0x%08x\n", "movsbw_2", movsbw_2());
172   printf("%8s 0x%08x\n", "movsbl_1", movsbl_1());
173   printf("%8s 0x%08x\n", "movsbl_2", movsbl_2());
174   printf("%8s 0x%08x\n", "movswl_1", movswl_1());
175   printf("%8s 0x%08x\n", "movswl_2", movswl_2());
176   return 0;
177}
178