]>
Commit | Line | Data |
---|---|---|
24f9e90b FB |
1 | |
2 | void OPPROTO glue(glue(op_movs, SUFFIX), STRING_SUFFIX)(void) | |
3 | { | |
4 | int v, inc; | |
24f9e90b FB |
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(); | |
5797fa5d | 88 | CC_SRC = v; |
24f9e90b FB |
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); | |
5797fa5d | 107 | CC_SRC = v2; |
24f9e90b FB |
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); | |
5797fa5d | 129 | CC_SRC = v2; |
24f9e90b FB |
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(); | |
5797fa5d | 144 | CC_SRC = v2; |
24f9e90b FB |
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); | |
5797fa5d | 162 | CC_SRC = v2; |
24f9e90b FB |
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); | |
5797fa5d | 183 | CC_SRC = v2; |
24f9e90b FB |
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); | |
bf7c65bd | 195 | glue(cpu_x86_out, SUFFIX)(env, dx, v); |
24f9e90b FB |
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); | |
bf7c65bd | 207 | glue(cpu_x86_out, SUFFIX)(env, dx, v); |
24f9e90b FB |
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; | |
bf7c65bd | 218 | v = glue(cpu_x86_in, SUFFIX)(env, dx); |
24f9e90b FB |
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) { | |
bf7c65bd | 230 | v = glue(cpu_x86_in, SUFFIX)(env, dx); |
24f9e90b FB |
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 |