]> git.proxmox.com Git - qemu.git/blob - op_string.h
added nop test for exception
[qemu.git] / op_string.h
1
2 void OPPROTO glue(glue(op_movs, SUFFIX), STRING_SUFFIX)(void)
3 {
4 int v, inc;
5 v = glue(ldu, SUFFIX)(SI_ADDR);
6 glue(st, SUFFIX)(DI_ADDR, v);
7 inc = (DF << SHIFT);
8 INC_SI();
9 INC_DI();
10 }
11
12 void OPPROTO glue(glue(op_rep_movs, SUFFIX), STRING_SUFFIX)(void)
13 {
14 int v, inc;
15 inc = (DF << SHIFT);
16 while (CX != 0) {
17 v = glue(ldu, SUFFIX)(SI_ADDR);
18 glue(st, SUFFIX)(DI_ADDR, v);
19 INC_SI();
20 INC_DI();
21 DEC_CX();
22 }
23 FORCE_RET();
24 }
25
26 void OPPROTO glue(glue(op_stos, SUFFIX), STRING_SUFFIX)(void)
27 {
28 int inc;
29 glue(st, SUFFIX)(DI_ADDR, EAX);
30 inc = (DF << SHIFT);
31 INC_DI();
32 }
33
34 void OPPROTO glue(glue(op_rep_stos, SUFFIX), STRING_SUFFIX)(void)
35 {
36 int inc;
37 inc = (DF << SHIFT);
38 while (CX != 0) {
39 glue(st, SUFFIX)(DI_ADDR, EAX);
40 INC_DI();
41 DEC_CX();
42 }
43 FORCE_RET();
44 }
45
46 void OPPROTO glue(glue(op_lods, SUFFIX), STRING_SUFFIX)(void)
47 {
48 int v, inc;
49 v = glue(ldu, SUFFIX)(SI_ADDR);
50 #if SHIFT == 0
51 EAX = (EAX & ~0xff) | v;
52 #elif SHIFT == 1
53 EAX = (EAX & ~0xffff) | v;
54 #else
55 EAX = v;
56 #endif
57 inc = (DF << SHIFT);
58 INC_SI();
59 }
60
61 /* don't know if it is used */
62 void OPPROTO glue(glue(op_rep_lods, SUFFIX), STRING_SUFFIX)(void)
63 {
64 int v, inc;
65 inc = (DF << SHIFT);
66 while (CX != 0) {
67 v = glue(ldu, SUFFIX)(SI_ADDR);
68 #if SHIFT == 0
69 EAX = (EAX & ~0xff) | v;
70 #elif SHIFT == 1
71 EAX = (EAX & ~0xffff) | v;
72 #else
73 EAX = v;
74 #endif
75 INC_SI();
76 DEC_CX();
77 }
78 FORCE_RET();
79 }
80
81 void OPPROTO glue(glue(op_scas, SUFFIX), STRING_SUFFIX)(void)
82 {
83 int v, inc;
84
85 v = glue(ldu, SUFFIX)(DI_ADDR);
86 inc = (DF << SHIFT);
87 INC_DI();
88 CC_SRC = v;
89 CC_DST = EAX - v;
90 }
91
92 void OPPROTO glue(glue(op_repz_scas, SUFFIX), STRING_SUFFIX)(void)
93 {
94 int v1, v2, inc;
95
96 if (CX != 0) {
97 /* NOTE: the flags are not modified if CX == 0 */
98 v1 = EAX & DATA_MASK;
99 inc = (DF << SHIFT);
100 do {
101 v2 = glue(ldu, SUFFIX)(DI_ADDR);
102 INC_DI();
103 DEC_CX();
104 if (v1 != v2)
105 break;
106 } while (CX != 0);
107 CC_SRC = v2;
108 CC_DST = v1 - v2;
109 CC_OP = CC_OP_SUBB + SHIFT;
110 }
111 FORCE_RET();
112 }
113
114 void OPPROTO glue(glue(op_repnz_scas, SUFFIX), STRING_SUFFIX)(void)
115 {
116 int v1, v2, inc;
117
118 if (CX != 0) {
119 /* NOTE: the flags are not modified if CX == 0 */
120 v1 = EAX & DATA_MASK;
121 inc = (DF << SHIFT);
122 do {
123 v2 = glue(ldu, SUFFIX)(DI_ADDR);
124 INC_DI();
125 DEC_CX();
126 if (v1 == v2)
127 break;
128 } while (CX != 0);
129 CC_SRC = v2;
130 CC_DST = v1 - v2;
131 CC_OP = CC_OP_SUBB + SHIFT;
132 }
133 FORCE_RET();
134 }
135
136 void OPPROTO glue(glue(op_cmps, SUFFIX), STRING_SUFFIX)(void)
137 {
138 int v1, v2, inc;
139 v1 = glue(ldu, SUFFIX)(SI_ADDR);
140 v2 = glue(ldu, SUFFIX)(DI_ADDR);
141 inc = (DF << SHIFT);
142 INC_SI();
143 INC_DI();
144 CC_SRC = v2;
145 CC_DST = v1 - v2;
146 }
147
148 void OPPROTO glue(glue(op_repz_cmps, SUFFIX), STRING_SUFFIX)(void)
149 {
150 int v1, v2, inc;
151 if (CX != 0) {
152 inc = (DF << SHIFT);
153 do {
154 v1 = glue(ldu, SUFFIX)(SI_ADDR);
155 v2 = glue(ldu, SUFFIX)(DI_ADDR);
156 INC_SI();
157 INC_DI();
158 DEC_CX();
159 if (v1 != v2)
160 break;
161 } while (CX != 0);
162 CC_SRC = v2;
163 CC_DST = v1 - v2;
164 CC_OP = CC_OP_SUBB + SHIFT;
165 }
166 FORCE_RET();
167 }
168
169 void OPPROTO glue(glue(op_repnz_cmps, SUFFIX), STRING_SUFFIX)(void)
170 {
171 int v1, v2, inc;
172 if (CX != 0) {
173 inc = (DF << SHIFT);
174 do {
175 v1 = glue(ldu, SUFFIX)(SI_ADDR);
176 v2 = glue(ldu, SUFFIX)(DI_ADDR);
177 INC_SI();
178 INC_DI();
179 DEC_CX();
180 if (v1 == v2)
181 break;
182 } while (CX != 0);
183 CC_SRC = v2;
184 CC_DST = v1 - v2;
185 CC_OP = CC_OP_SUBB + SHIFT;
186 }
187 FORCE_RET();
188 }
189
190 void OPPROTO glue(glue(op_outs, SUFFIX), STRING_SUFFIX)(void)
191 {
192 int v, dx, inc;
193 dx = EDX & 0xffff;
194 v = glue(ldu, SUFFIX)(SI_ADDR);
195 glue(cpu_x86_out, SUFFIX)(env, dx, v);
196 inc = (DF << SHIFT);
197 INC_SI();
198 }
199
200 void OPPROTO glue(glue(op_rep_outs, SUFFIX), STRING_SUFFIX)(void)
201 {
202 int v, dx, inc;
203 inc = (DF << SHIFT);
204 dx = EDX & 0xffff;
205 while (CX != 0) {
206 v = glue(ldu, SUFFIX)(SI_ADDR);
207 glue(cpu_x86_out, SUFFIX)(env, dx, v);
208 INC_SI();
209 DEC_CX();
210 }
211 FORCE_RET();
212 }
213
214 void OPPROTO glue(glue(op_ins, SUFFIX), STRING_SUFFIX)(void)
215 {
216 int v, dx, inc;
217 dx = EDX & 0xffff;
218 v = glue(cpu_x86_in, SUFFIX)(env, dx);
219 glue(st, SUFFIX)(DI_ADDR, v);
220 inc = (DF << SHIFT);
221 INC_DI();
222 }
223
224 void OPPROTO glue(glue(op_rep_ins, SUFFIX), STRING_SUFFIX)(void)
225 {
226 int v, dx, inc;
227 inc = (DF << SHIFT);
228 dx = EDX & 0xffff;
229 while (CX != 0) {
230 v = glue(cpu_x86_in, SUFFIX)(env, dx);
231 glue(st, SUFFIX)(DI_ADDR, v);
232 INC_DI();
233 DEC_CX();
234 }
235 FORCE_RET();
236 }
237
238 #undef STRING_SUFFIX
239 #undef SI_ADDR
240 #undef DI_ADDR
241 #undef INC_SI
242 #undef INC_DI
243 #undef CX
244 #undef DEC_CX