| |
| void OPPROTO glue(glue(op_repz_scas, SUFFIX), STRING_SUFFIX)(void) |
| { |
| int v1, v2, inc; |
| |
| if (CX != 0) { |
| /* NOTE: the flags are not modified if CX == 0 */ |
| v1 = EAX & DATA_MASK; |
| inc = (DF << SHIFT); |
| do { |
| v2 = glue(ldu, SUFFIX)(DI_ADDR); |
| INC_DI(); |
| DEC_CX(); |
| if (v1 != v2) |
| break; |
| } while (CX != 0); |
| CC_SRC = v2; |
| CC_DST = v1 - v2; |
| CC_OP = CC_OP_SUBB + SHIFT; |
| } |
| FORCE_RET(); |
| } |
| |
| void OPPROTO glue(glue(op_repnz_scas, SUFFIX), STRING_SUFFIX)(void) |
| { |
| int v1, v2, inc; |
| |
| if (CX != 0) { |
| /* NOTE: the flags are not modified if CX == 0 */ |
| v1 = EAX & DATA_MASK; |
| inc = (DF << SHIFT); |
| do { |
| v2 = glue(ldu, SUFFIX)(DI_ADDR); |
| INC_DI(); |
| DEC_CX(); |
| if (v1 == v2) |
| break; |
| } while (CX != 0); |
| CC_SRC = v2; |
| CC_DST = v1 - v2; |
| CC_OP = CC_OP_SUBB + SHIFT; |
| } |
| FORCE_RET(); |
| } |
| |
| void OPPROTO glue(glue(op_repz_cmps, SUFFIX), STRING_SUFFIX)(void) |
| { |
| int v1, v2, inc; |
| if (CX != 0) { |
| inc = (DF << SHIFT); |
| do { |
| v1 = glue(ldu, SUFFIX)(SI_ADDR); |
| v2 = glue(ldu, SUFFIX)(DI_ADDR); |
| INC_SI(); |
| INC_DI(); |
| DEC_CX(); |
| if (v1 != v2) |
| break; |
| } while (CX != 0); |
| CC_SRC = v2; |
| CC_DST = v1 - v2; |
| CC_OP = CC_OP_SUBB + SHIFT; |
| } |
| FORCE_RET(); |
| } |
| |
| void OPPROTO glue(glue(op_repnz_cmps, SUFFIX), STRING_SUFFIX)(void) |
| { |
| int v1, v2, inc; |
| if (CX != 0) { |
| inc = (DF << SHIFT); |
| do { |
| v1 = glue(ldu, SUFFIX)(SI_ADDR); |
| v2 = glue(ldu, SUFFIX)(DI_ADDR); |
| INC_SI(); |
| INC_DI(); |
| DEC_CX(); |
| if (v1 == v2) |
| break; |
| } while (CX != 0); |
| CC_SRC = v2; |
| CC_DST = v1 - v2; |
| CC_OP = CC_OP_SUBB + SHIFT; |
| } |
| FORCE_RET(); |
| } |
| |
| #undef STRING_SUFFIX |
| #undef SI_ADDR |
| #undef DI_ADDR |
| #undef INC_SI |
| #undef INC_DI |
| #undef CX |
| #undef DEC_CX |