Statistics
| Branch: | Revision:

root / op_string.h @ a412ac57

History | View | Annotate | Download (5.1 kB)

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