1 
2 #include <stdio.h>
3 
movzbw_1(void)4 static 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 
movzbw_2(void)17 static 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 
movzbl_1(void)30 static 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 
movzbl_2(void)43 static 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 
movzwl_1(void)56 static 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 
movzwl_2(void)69 static 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 
movsbw_1(void)82 static 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 
movsbw_2(void)95 static 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 
movsbl_1(void)108 static 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 
movsbl_2(void)121 static 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 
movswl_1(void)134 static 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 
movswl_2(void)147 static 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 
main(void)162 int 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