Revision 1b9d9ebb target-i386/helper.c

b/target-i386/helper.c
1879 1879

  
1880 1880
    eflags = cc_table[CC_OP].compute_all();
1881 1881
    d = ldq(a0);
1882
    if (d == (((uint64_t)EDX << 32) | EAX)) {
1883
        stq(a0, ((uint64_t)ECX << 32) | EBX);
1882
    if (d == (((uint64_t)EDX << 32) | (uint32_t)EAX)) {
1883
        stq(a0, ((uint64_t)ECX << 32) | (uint32_t)EBX);
1884 1884
        eflags |= CC_Z;
1885 1885
    } else {
1886 1886
        EDX = (uint32_t)(d >> 32);
......
1890 1890
    CC_SRC = eflags;
1891 1891
}
1892 1892

  
1893
#ifdef TARGET_X86_64
1894
void helper_cmpxchg16b(target_ulong a0)
1895
{
1896
    uint64_t d0, d1;
1897
    int eflags;
1898

  
1899
    eflags = cc_table[CC_OP].compute_all();
1900
    d0 = ldq(a0);
1901
    d1 = ldq(a0 + 8);
1902
    if (d0 == EAX && d1 == EDX) {
1903
        stq(a0, EBX);
1904
        stq(a0 + 8, ECX);
1905
        eflags |= CC_Z;
1906
    } else {
1907
        EDX = d1;
1908
        EAX = d0;
1909
        eflags &= ~CC_Z;
1910
    }
1911
    CC_SRC = eflags;
1912
}
1913
#endif
1914

  
1893 1915
void helper_single_step(void)
1894 1916
{
1895 1917
    env->dr[6] |= 0x4000;

Also available in: Unified diff