Revision 1b9d9ebb target-i386/translate.c
b/target-i386/translate.c | ||
---|---|---|
4333 | 4333 |
mod = (modrm >> 6) & 3; |
4334 | 4334 |
if ((mod == 3) || ((modrm & 0x38) != 0x8)) |
4335 | 4335 |
goto illegal_op; |
4336 |
gen_jmp_im(pc_start - s->cs_base); |
|
4337 |
if (s->cc_op != CC_OP_DYNAMIC) |
|
4338 |
gen_op_set_cc_op(s->cc_op); |
|
4339 |
gen_lea_modrm(s, modrm, ®_addr, &offset_addr); |
|
4340 |
tcg_gen_helper_0_1(helper_cmpxchg8b, cpu_A0); |
|
4336 |
#ifdef TARGET_X86_64 |
|
4337 |
if (dflag == 2) { |
|
4338 |
if (!(s->cpuid_ext_features & CPUID_EXT_CX16)) |
|
4339 |
goto illegal_op; |
|
4340 |
gen_jmp_im(pc_start - s->cs_base); |
|
4341 |
if (s->cc_op != CC_OP_DYNAMIC) |
|
4342 |
gen_op_set_cc_op(s->cc_op); |
|
4343 |
gen_lea_modrm(s, modrm, ®_addr, &offset_addr); |
|
4344 |
tcg_gen_helper_0_1(helper_cmpxchg16b, cpu_A0); |
|
4345 |
} else |
|
4346 |
#endif |
|
4347 |
{ |
|
4348 |
if (!(s->cpuid_features & CPUID_CX8)) |
|
4349 |
goto illegal_op; |
|
4350 |
gen_jmp_im(pc_start - s->cs_base); |
|
4351 |
if (s->cc_op != CC_OP_DYNAMIC) |
|
4352 |
gen_op_set_cc_op(s->cc_op); |
|
4353 |
gen_lea_modrm(s, modrm, ®_addr, &offset_addr); |
|
4354 |
tcg_gen_helper_0_1(helper_cmpxchg8b, cpu_A0); |
|
4355 |
} |
|
4341 | 4356 |
s->cc_op = CC_OP_EFLAGS; |
4342 | 4357 |
break; |
4343 | 4358 |
|
Also available in: Unified diff