Revision e17a36ce target-i386/translate.c

b/target-i386/translate.c
1615 1615
    *offset_ptr = disp;
1616 1616
}
1617 1617

  
1618
static void gen_nop_modrm(DisasContext *s, int modrm)
1619
{
1620
    int mod, rm, base, code;
1621

  
1622
    mod = (modrm >> 6) & 3;
1623
    if (mod == 3)
1624
        return;
1625
    rm = modrm & 7;
1626

  
1627
    if (s->aflag) {
1628

  
1629
        base = rm;
1630
        
1631
        if (base == 4) {
1632
            code = ldub_code(s->pc++);
1633
            base = (code & 7);
1634
        }
1635
        
1636
        switch (mod) {
1637
        case 0:
1638
            if (base == 5) {
1639
                s->pc += 4;
1640
            }
1641
            break;
1642
        case 1:
1643
            s->pc++;
1644
            break;
1645
        default:
1646
        case 2:
1647
            s->pc += 4;
1648
            break;
1649
        }
1650
    } else {
1651
        switch (mod) {
1652
        case 0:
1653
            if (rm == 6) {
1654
                s->pc += 2;
1655
            }
1656
            break;
1657
        case 1:
1658
            s->pc++;
1659
            break;
1660
        default:
1661
        case 2:
1662
            s->pc += 2;
1663
            break;
1664
        }
1665
    }
1666
}
1667

  
1618 1668
/* used for LEA and MOV AX, mem */
1619 1669
static void gen_add_A0_ds_seg(DisasContext *s)
1620 1670
{
......
5791 5841
            gen_lea_modrm(s, modrm, &reg_addr, &offset_addr);
5792 5842
            /* nothing more to do */
5793 5843
            break;
5794
        default:
5795
            goto illegal_op;
5844
        default: /* nop (multi byte) */
5845
            gen_nop_modrm(s, modrm);
5846
            break;
5796 5847
        }
5797 5848
        break;
5849
    case 0x119 ... 0x11f: /* nop (multi byte) */
5850
        modrm = ldub_code(s->pc++);
5851
        gen_nop_modrm(s, modrm);
5852
        break;
5798 5853
    case 0x120: /* mov reg, crN */
5799 5854
    case 0x122: /* mov crN, reg */
5800 5855
        if (s->cpl != 0) {

Also available in: Unified diff