Revision 1a9353d2 ops_template.h

b/ops_template.h
277 277
    FORCE_RET();
278 278
}
279 279

  
280
/* oldies */
281

  
282
#if DATA_BITS >= 16
283

  
284
void OPPROTO glue(op_loopnz, SUFFIX)(void)
285
{
286
    unsigned int tmp;
287
    int eflags;
288
    eflags = cc_table[CC_OP].compute_all();
289
    tmp = (ECX - 1) & DATA_MASK;
290
    ECX = (ECX & ~DATA_MASK) | tmp;
291
    if (tmp != 0 && !(eflags & CC_Z))
292
        PC = PARAM1;
293
    else
294
        PC = PARAM2;
295
    FORCE_RET();
296
}
297

  
298
void OPPROTO glue(op_loopz, SUFFIX)(void)
299
{
300
    unsigned int tmp;
301
    int eflags;
302
    eflags = cc_table[CC_OP].compute_all();
303
    tmp = (ECX - 1) & DATA_MASK;
304
    ECX = (ECX & ~DATA_MASK) | tmp;
305
    if (tmp != 0 && (eflags & CC_Z))
306
        PC = PARAM1;
307
    else
308
        PC = PARAM2;
309
    FORCE_RET();
310
}
311

  
312
void OPPROTO glue(op_loop, SUFFIX)(void)
313
{
314
    unsigned int tmp;
315
    tmp = (ECX - 1) & DATA_MASK;
316
    ECX = (ECX & ~DATA_MASK) | tmp;
317
    if (tmp != 0)
318
        PC = PARAM1;
319
    else
320
        PC = PARAM2;
321
    FORCE_RET();
322
}
323

  
324
void OPPROTO glue(op_jecxz, SUFFIX)(void)
325
{
326
    if ((DATA_TYPE)ECX == 0)
327
        PC = PARAM1;
328
    else
329
        PC = PARAM2;
330
    FORCE_RET();
331
}
332

  
333
#endif
334

  
280 335
/* various optimized set cases */
281 336

  
282 337
void OPPROTO glue(op_setb_T0_sub, SUFFIX)(void)
......
599 654
    CC_OP = CC_OP_SUBB + SHIFT + cf * 3;
600 655
}
601 656

  
657
void OPPROTO glue(glue(op_cmpxchg, SUFFIX), _T0_T1_EAX_cc)(void)
658
{
659
    CC_SRC = EAX;
660
    CC_DST = EAX - T0;
661
    if ((DATA_TYPE)CC_DST == 0) {
662
        T0 = T1;
663
    } else {
664
        EAX = (EAX & ~DATA_MASK) | (T0 & DATA_MASK);
665
    }
666
    FORCE_RET();
667
}
668

  
602 669
/* bit operations */
603 670
#if DATA_BITS >= 16
604 671

  

Also available in: Unified diff