Statistics
| Branch: | Revision:

root / op_string.h @ b67d5959

History | View | Annotate | Download (2.1 kB)

1 24f9e90b bellard
2 24f9e90b bellard
void OPPROTO glue(glue(op_repz_scas, SUFFIX), STRING_SUFFIX)(void)
3 24f9e90b bellard
{
4 24f9e90b bellard
    int v1, v2, inc;
5 24f9e90b bellard
6 24f9e90b bellard
    if (CX != 0) {
7 24f9e90b bellard
        /* NOTE: the flags are not modified if CX == 0 */
8 24f9e90b bellard
        v1 = EAX & DATA_MASK;
9 24f9e90b bellard
        inc = (DF << SHIFT);
10 24f9e90b bellard
        do {
11 24f9e90b bellard
            v2 = glue(ldu, SUFFIX)(DI_ADDR);
12 24f9e90b bellard
            INC_DI();
13 24f9e90b bellard
            DEC_CX();
14 24f9e90b bellard
            if (v1 != v2)
15 24f9e90b bellard
                break;
16 24f9e90b bellard
        } while (CX != 0);
17 5797fa5d bellard
        CC_SRC = v2;
18 24f9e90b bellard
        CC_DST = v1 - v2;
19 24f9e90b bellard
        CC_OP = CC_OP_SUBB + SHIFT;
20 24f9e90b bellard
    }
21 24f9e90b bellard
    FORCE_RET();
22 24f9e90b bellard
}
23 24f9e90b bellard
24 24f9e90b bellard
void OPPROTO glue(glue(op_repnz_scas, SUFFIX), STRING_SUFFIX)(void)
25 24f9e90b bellard
{
26 24f9e90b bellard
    int v1, v2, inc;
27 24f9e90b bellard
28 24f9e90b bellard
    if (CX != 0) {
29 24f9e90b bellard
        /* NOTE: the flags are not modified if CX == 0 */
30 24f9e90b bellard
        v1 = EAX & DATA_MASK;
31 24f9e90b bellard
        inc = (DF << SHIFT);
32 24f9e90b bellard
        do {
33 24f9e90b bellard
            v2 = glue(ldu, SUFFIX)(DI_ADDR);
34 24f9e90b bellard
            INC_DI();
35 24f9e90b bellard
            DEC_CX();
36 24f9e90b bellard
            if (v1 == v2)
37 24f9e90b bellard
                break;
38 24f9e90b bellard
        } while (CX != 0);
39 5797fa5d bellard
        CC_SRC = v2;
40 24f9e90b bellard
        CC_DST = v1 - v2;
41 24f9e90b bellard
        CC_OP = CC_OP_SUBB + SHIFT;
42 24f9e90b bellard
    }
43 24f9e90b bellard
    FORCE_RET();
44 24f9e90b bellard
}
45 24f9e90b bellard
46 24f9e90b bellard
void OPPROTO glue(glue(op_repz_cmps, SUFFIX), STRING_SUFFIX)(void)
47 24f9e90b bellard
{
48 24f9e90b bellard
    int v1, v2, inc;
49 24f9e90b bellard
    if (CX != 0) {
50 24f9e90b bellard
        inc = (DF << SHIFT);
51 24f9e90b bellard
        do {
52 24f9e90b bellard
            v1 = glue(ldu, SUFFIX)(SI_ADDR);
53 24f9e90b bellard
            v2 = glue(ldu, SUFFIX)(DI_ADDR);
54 24f9e90b bellard
            INC_SI();
55 24f9e90b bellard
            INC_DI();
56 24f9e90b bellard
            DEC_CX();
57 24f9e90b bellard
            if (v1 != v2)
58 24f9e90b bellard
                break;
59 24f9e90b bellard
        } while (CX != 0);
60 5797fa5d bellard
        CC_SRC = v2;
61 24f9e90b bellard
        CC_DST = v1 - v2;
62 24f9e90b bellard
        CC_OP = CC_OP_SUBB + SHIFT;
63 24f9e90b bellard
    }
64 24f9e90b bellard
    FORCE_RET();
65 24f9e90b bellard
}
66 24f9e90b bellard
67 24f9e90b bellard
void OPPROTO glue(glue(op_repnz_cmps, SUFFIX), STRING_SUFFIX)(void)
68 24f9e90b bellard
{
69 24f9e90b bellard
    int v1, v2, inc;
70 24f9e90b bellard
    if (CX != 0) {
71 24f9e90b bellard
        inc = (DF << SHIFT);
72 24f9e90b bellard
        do {
73 24f9e90b bellard
            v1 = glue(ldu, SUFFIX)(SI_ADDR);
74 24f9e90b bellard
            v2 = glue(ldu, SUFFIX)(DI_ADDR);
75 24f9e90b bellard
            INC_SI();
76 24f9e90b bellard
            INC_DI();
77 24f9e90b bellard
            DEC_CX();
78 24f9e90b bellard
            if (v1 == v2)
79 24f9e90b bellard
                break;
80 24f9e90b bellard
        } while (CX != 0);
81 5797fa5d bellard
        CC_SRC = v2;
82 24f9e90b bellard
        CC_DST = v1 - v2;
83 24f9e90b bellard
        CC_OP = CC_OP_SUBB + SHIFT;
84 24f9e90b bellard
    }
85 24f9e90b bellard
    FORCE_RET();
86 24f9e90b bellard
}
87 24f9e90b bellard
88 24f9e90b bellard
#undef STRING_SUFFIX
89 24f9e90b bellard
#undef SI_ADDR
90 24f9e90b bellard
#undef DI_ADDR
91 24f9e90b bellard
#undef INC_SI
92 24f9e90b bellard
#undef INC_DI
93 24f9e90b bellard
#undef CX
94 24f9e90b bellard
#undef DEC_CX