Lines Matching full:decode

51 #define EXEC_2OP_FLAGS_CMD(env, decode, cmd, FLAGS_FUNC, save_res) \  argument
53 fetch_operands(env, decode, 2, true, true, false); \
54 switch (decode->operand_size) { \
57 uint8_t v1 = (uint8_t)decode->op[0].val; \
58 uint8_t v2 = (uint8_t)decode->op[1].val; \
61 write_val_ext(env, decode->op[0].ptr, diff, 1); \
68 uint16_t v1 = (uint16_t)decode->op[0].val; \
69 uint16_t v2 = (uint16_t)decode->op[1].val; \
72 write_val_ext(env, decode->op[0].ptr, diff, 2); \
79 uint32_t v1 = (uint32_t)decode->op[0].val; \
80 uint32_t v2 = (uint32_t)decode->op[1].val; \
83 write_val_ext(env, decode->op[0].ptr, diff, 4); \
224 static void fetch_operands(CPUX86State *env, struct x86_decode *decode, in fetch_operands() argument
231 switch (decode->op[i].type) { in fetch_operands()
235 VM_PANIC_ON(!decode->op[i].ptr); in fetch_operands()
237 decode->op[i].val = read_val_from_reg(decode->op[i].ptr, in fetch_operands()
238 decode->operand_size); in fetch_operands()
242 calc_modrm_operand(env, decode, &decode->op[i]); in fetch_operands()
244 decode->op[i].val = read_val_ext(env, decode->op[i].ptr, in fetch_operands()
245 decode->operand_size); in fetch_operands()
249 decode->op[i].ptr = decode_linear_addr(env, decode, in fetch_operands()
250 decode->op[i].ptr, in fetch_operands()
253 decode->op[i].val = read_val_ext(env, decode->op[i].ptr, in fetch_operands()
254 decode->operand_size); in fetch_operands()
263 static void exec_mov(CPUX86State *env, struct x86_decode *decode) in exec_mov() argument
265 fetch_operands(env, decode, 2, false, true, false); in exec_mov()
266 write_val_ext(env, decode->op[0].ptr, decode->op[1].val, in exec_mov()
267 decode->operand_size); in exec_mov()
269 env->eip += decode->len; in exec_mov()
272 static void exec_add(CPUX86State *env, struct x86_decode *decode) in exec_add() argument
274 EXEC_2OP_FLAGS_CMD(env, decode, +, SET_FLAGS_OSZAPC_ADD, true); in exec_add()
275 env->eip += decode->len; in exec_add()
278 static void exec_or(CPUX86State *env, struct x86_decode *decode) in exec_or() argument
280 EXEC_2OP_FLAGS_CMD(env, decode, |, SET_FLAGS_OSZAPC_LOGIC, true); in exec_or()
281 env->eip += decode->len; in exec_or()
284 static void exec_adc(CPUX86State *env, struct x86_decode *decode) in exec_adc() argument
286 EXEC_2OP_FLAGS_CMD(env, decode, +get_CF(env)+, SET_FLAGS_OSZAPC_ADD, true); in exec_adc()
287 env->eip += decode->len; in exec_adc()
290 static void exec_sbb(CPUX86State *env, struct x86_decode *decode) in exec_sbb() argument
292 EXEC_2OP_FLAGS_CMD(env, decode, -get_CF(env)-, SET_FLAGS_OSZAPC_SUB, true); in exec_sbb()
293 env->eip += decode->len; in exec_sbb()
296 static void exec_and(CPUX86State *env, struct x86_decode *decode) in exec_and() argument
298 EXEC_2OP_FLAGS_CMD(env, decode, &, SET_FLAGS_OSZAPC_LOGIC, true); in exec_and()
299 env->eip += decode->len; in exec_and()
302 static void exec_sub(CPUX86State *env, struct x86_decode *decode) in exec_sub() argument
304 EXEC_2OP_FLAGS_CMD(env, decode, -, SET_FLAGS_OSZAPC_SUB, true); in exec_sub()
305 env->eip += decode->len; in exec_sub()
308 static void exec_xor(CPUX86State *env, struct x86_decode *decode) in exec_xor() argument
310 EXEC_2OP_FLAGS_CMD(env, decode, ^, SET_FLAGS_OSZAPC_LOGIC, true); in exec_xor()
311 env->eip += decode->len; in exec_xor()
314 static void exec_neg(CPUX86State *env, struct x86_decode *decode) in exec_neg() argument
316 /*EXEC_2OP_FLAGS_CMD(env, decode, -, SET_FLAGS_OSZAPC_SUB, false);*/ in exec_neg()
318 fetch_operands(env, decode, 2, true, true, false); in exec_neg()
320 val = 0 - sign(decode->op[1].val, decode->operand_size); in exec_neg()
321 write_val_ext(env, decode->op[1].ptr, val, decode->operand_size); in exec_neg()
323 if (4 == decode->operand_size) { in exec_neg()
325 } else if (2 == decode->operand_size) { in exec_neg()
327 } else if (1 == decode->operand_size) { in exec_neg()
334 env->eip += decode->len; in exec_neg()
337 static void exec_cmp(CPUX86State *env, struct x86_decode *decode) in exec_cmp() argument
339 EXEC_2OP_FLAGS_CMD(env, decode, -, SET_FLAGS_OSZAPC_SUB, false); in exec_cmp()
340 env->eip += decode->len; in exec_cmp()
343 static void exec_inc(CPUX86State *env, struct x86_decode *decode) in exec_inc() argument
345 decode->op[1].type = X86_VAR_IMMEDIATE; in exec_inc()
346 decode->op[1].val = 0; in exec_inc()
348 EXEC_2OP_FLAGS_CMD(env, decode, +1+, SET_FLAGS_OSZAP_ADD, true); in exec_inc()
350 env->eip += decode->len; in exec_inc()
353 static void exec_dec(CPUX86State *env, struct x86_decode *decode) in exec_dec() argument
355 decode->op[1].type = X86_VAR_IMMEDIATE; in exec_dec()
356 decode->op[1].val = 0; in exec_dec()
358 EXEC_2OP_FLAGS_CMD(env, decode, -1-, SET_FLAGS_OSZAP_SUB, true); in exec_dec()
359 env->eip += decode->len; in exec_dec()
362 static void exec_tst(CPUX86State *env, struct x86_decode *decode) in exec_tst() argument
364 EXEC_2OP_FLAGS_CMD(env, decode, &, SET_FLAGS_OSZAPC_LOGIC, false); in exec_tst()
365 env->eip += decode->len; in exec_tst()
368 static void exec_not(CPUX86State *env, struct x86_decode *decode) in exec_not() argument
370 fetch_operands(env, decode, 1, true, false, false); in exec_not()
372 write_val_ext(env, decode->op[0].ptr, ~decode->op[0].val, in exec_not()
373 decode->operand_size); in exec_not()
374 env->eip += decode->len; in exec_not()
377 void exec_movzx(CPUX86State *env, struct x86_decode *decode) in exec_movzx() argument
380 int op_size = decode->operand_size; in exec_movzx()
382 fetch_operands(env, decode, 1, false, false, false); in exec_movzx()
384 if (0xb6 == decode->opcode[1]) { in exec_movzx()
389 decode->operand_size = src_op_size; in exec_movzx()
390 calc_modrm_operand(env, decode, &decode->op[1]); in exec_movzx()
391 decode->op[1].val = read_val_ext(env, decode->op[1].ptr, src_op_size); in exec_movzx()
392 write_val_ext(env, decode->op[0].ptr, decode->op[1].val, op_size); in exec_movzx()
394 env->eip += decode->len; in exec_movzx()
397 static void exec_out(CPUX86State *env, struct x86_decode *decode) in exec_out() argument
399 switch (decode->opcode[0]) { in exec_out()
401 hvf_handle_io(env_cpu(env), decode->op[0].val, &AL(env), 1, 1, 1); in exec_out()
404 hvf_handle_io(env_cpu(env), decode->op[0].val, &RAX(env), 1, in exec_out()
405 decode->operand_size, 1); in exec_out()
412 decode->operand_size, 1); in exec_out()
418 env->eip += decode->len; in exec_out()
421 static void exec_in(CPUX86State *env, struct x86_decode *decode) in exec_in() argument
424 switch (decode->opcode[0]) { in exec_in()
426 hvf_handle_io(env_cpu(env), decode->op[0].val, &AL(env), 0, 1, 1); in exec_in()
429 hvf_handle_io(env_cpu(env), decode->op[0].val, &val, 0, in exec_in()
430 decode->operand_size, 1); in exec_in()
431 if (decode->operand_size == 2) { in exec_in()
441 hvf_handle_io(env_cpu(env), DX(env), &val, 0, decode->operand_size, 1); in exec_in()
442 if (decode->operand_size == 2) { in exec_in()
454 env->eip += decode->len; in exec_in()
458 struct x86_decode *decode) in string_increment_reg() argument
460 target_ulong val = read_reg(env, reg, decode->addressing_size); in string_increment_reg()
462 val -= decode->operand_size; in string_increment_reg()
464 val += decode->operand_size; in string_increment_reg()
466 write_reg(env, reg, val, decode->addressing_size); in string_increment_reg()
469 static inline void string_rep(CPUX86State *env, struct x86_decode *decode, in string_rep() argument
473 target_ulong rcx = read_reg(env, R_ECX, decode->addressing_size); in string_rep()
475 func(env, decode); in string_rep()
476 write_reg(env, R_ECX, rcx, decode->addressing_size); in string_rep()
486 static void exec_ins_single(CPUX86State *env, struct x86_decode *decode) in exec_ins_single() argument
489 decode->addressing_size, R_ES); in exec_ins_single()
492 decode->operand_size, 1); in exec_ins_single()
494 decode->operand_size); in exec_ins_single()
496 string_increment_reg(env, R_EDI, decode); in exec_ins_single()
499 static void exec_ins(CPUX86State *env, struct x86_decode *decode) in exec_ins() argument
501 if (decode->rep) { in exec_ins()
502 string_rep(env, decode, exec_ins_single, 0); in exec_ins()
504 exec_ins_single(env, decode); in exec_ins()
507 env->eip += decode->len; in exec_ins()
510 static void exec_outs_single(CPUX86State *env, struct x86_decode *decode) in exec_outs_single() argument
512 target_ulong addr = decode_linear_addr(env, decode, RSI(env), R_DS); in exec_outs_single()
515 decode->operand_size); in exec_outs_single()
517 decode->operand_size, 1); in exec_outs_single()
519 string_increment_reg(env, R_ESI, decode); in exec_outs_single()
522 static void exec_outs(CPUX86State *env, struct x86_decode *decode) in exec_outs() argument
524 if (decode->rep) { in exec_outs()
525 string_rep(env, decode, exec_outs_single, 0); in exec_outs()
527 exec_outs_single(env, decode); in exec_outs()
530 env->eip += decode->len; in exec_outs()
533 static void exec_movs_single(CPUX86State *env, struct x86_decode *decode) in exec_movs_single() argument
539 src_addr = decode_linear_addr(env, decode, RSI(env), R_DS); in exec_movs_single()
541 decode->addressing_size, R_ES); in exec_movs_single()
543 val = read_val_ext(env, src_addr, decode->operand_size); in exec_movs_single()
544 write_val_ext(env, dst_addr, val, decode->operand_size); in exec_movs_single()
546 string_increment_reg(env, R_ESI, decode); in exec_movs_single()
547 string_increment_reg(env, R_EDI, decode); in exec_movs_single()
550 static void exec_movs(CPUX86State *env, struct x86_decode *decode) in exec_movs() argument
552 if (decode->rep) { in exec_movs()
553 string_rep(env, decode, exec_movs_single, 0); in exec_movs()
555 exec_movs_single(env, decode); in exec_movs()
558 env->eip += decode->len; in exec_movs()
561 static void exec_cmps_single(CPUX86State *env, struct x86_decode *decode) in exec_cmps_single() argument
566 src_addr = decode_linear_addr(env, decode, RSI(env), R_DS); in exec_cmps_single()
568 decode->addressing_size, R_ES); in exec_cmps_single()
570 decode->op[0].type = X86_VAR_IMMEDIATE; in exec_cmps_single()
571 decode->op[0].val = read_val_ext(env, src_addr, decode->operand_size); in exec_cmps_single()
572 decode->op[1].type = X86_VAR_IMMEDIATE; in exec_cmps_single()
573 decode->op[1].val = read_val_ext(env, dst_addr, decode->operand_size); in exec_cmps_single()
575 EXEC_2OP_FLAGS_CMD(env, decode, -, SET_FLAGS_OSZAPC_SUB, false); in exec_cmps_single()
577 string_increment_reg(env, R_ESI, decode); in exec_cmps_single()
578 string_increment_reg(env, R_EDI, decode); in exec_cmps_single()
581 static void exec_cmps(CPUX86State *env, struct x86_decode *decode) in exec_cmps() argument
583 if (decode->rep) { in exec_cmps()
584 string_rep(env, decode, exec_cmps_single, decode->rep); in exec_cmps()
586 exec_cmps_single(env, decode); in exec_cmps()
588 env->eip += decode->len; in exec_cmps()
592 static void exec_stos_single(CPUX86State *env, struct x86_decode *decode) in exec_stos_single() argument
598 decode->addressing_size, R_ES); in exec_stos_single()
599 val = read_reg(env, R_EAX, decode->operand_size); in exec_stos_single()
600 vmx_write_mem(env_cpu(env), addr, &val, decode->operand_size); in exec_stos_single()
602 string_increment_reg(env, R_EDI, decode); in exec_stos_single()
606 static void exec_stos(CPUX86State *env, struct x86_decode *decode) in exec_stos() argument
608 if (decode->rep) { in exec_stos()
609 string_rep(env, decode, exec_stos_single, 0); in exec_stos()
611 exec_stos_single(env, decode); in exec_stos()
614 env->eip += decode->len; in exec_stos()
617 static void exec_scas_single(CPUX86State *env, struct x86_decode *decode) in exec_scas_single() argument
622 decode->addressing_size, R_ES); in exec_scas_single()
623 decode->op[1].type = X86_VAR_IMMEDIATE; in exec_scas_single()
624 vmx_read_mem(env_cpu(env), &decode->op[1].val, addr, decode->operand_size); in exec_scas_single()
626 EXEC_2OP_FLAGS_CMD(env, decode, -, SET_FLAGS_OSZAPC_SUB, false); in exec_scas_single()
627 string_increment_reg(env, R_EDI, decode); in exec_scas_single()
630 static void exec_scas(CPUX86State *env, struct x86_decode *decode) in exec_scas() argument
632 decode->op[0].type = X86_VAR_REG; in exec_scas()
633 decode->op[0].reg = R_EAX; in exec_scas()
634 if (decode->rep) { in exec_scas()
635 string_rep(env, decode, exec_scas_single, decode->rep); in exec_scas()
637 exec_scas_single(env, decode); in exec_scas()
640 env->eip += decode->len; in exec_scas()
643 static void exec_lods_single(CPUX86State *env, struct x86_decode *decode) in exec_lods_single() argument
648 addr = decode_linear_addr(env, decode, RSI(env), R_DS); in exec_lods_single()
649 vmx_read_mem(env_cpu(env), &val, addr, decode->operand_size); in exec_lods_single()
650 write_reg(env, R_EAX, val, decode->operand_size); in exec_lods_single()
652 string_increment_reg(env, R_ESI, decode); in exec_lods_single()
655 static void exec_lods(CPUX86State *env, struct x86_decode *decode) in exec_lods() argument
657 if (decode->rep) { in exec_lods()
658 string_rep(env, decode, exec_lods_single, 0); in exec_lods()
660 exec_lods_single(env, decode); in exec_lods()
663 env->eip += decode->len; in exec_lods()
781 static void exec_rdmsr(CPUX86State *env, struct x86_decode *decode) in exec_rdmsr() argument
784 env->eip += decode->len; in exec_rdmsr()
894 static void exec_wrmsr(CPUX86State *env, struct x86_decode *decode) in exec_wrmsr() argument
897 env->eip += decode->len; in exec_wrmsr()
904 static void do_bt(CPUX86State *env, struct x86_decode *decode, int flag) in do_bt() argument
909 int mask = (4 == decode->operand_size) ? 0x1f : 0xf; in do_bt()
911 VM_PANIC_ON(decode->rex.rex); in do_bt()
913 fetch_operands(env, decode, 2, false, true, false); in do_bt()
914 index = decode->op[1].val & mask; in do_bt()
916 if (decode->op[0].type != X86_VAR_REG) { in do_bt()
917 if (4 == decode->operand_size) { in do_bt()
918 displacement = ((int32_t) (decode->op[1].val & 0xffffffe0)) / 32; in do_bt()
919 decode->op[0].ptr += 4 * displacement; in do_bt()
920 } else if (2 == decode->operand_size) { in do_bt()
921 displacement = ((int16_t) (decode->op[1].val & 0xfff0)) / 16; in do_bt()
922 decode->op[0].ptr += 2 * displacement; in do_bt()
927 decode->op[0].val = read_val_ext(env, decode->op[0].ptr, in do_bt()
928 decode->operand_size); in do_bt()
929 cf = (decode->op[0].val >> index) & 0x01; in do_bt()
936 decode->op[0].val ^= (1u << index); in do_bt()
939 decode->op[0].val |= (1u << index); in do_bt()
942 decode->op[0].val &= ~(1u << index); in do_bt()
945 write_val_ext(env, decode->op[0].ptr, decode->op[0].val, in do_bt()
946 decode->operand_size); in do_bt()
950 static void exec_bt(CPUX86State *env, struct x86_decode *decode) in exec_bt() argument
952 do_bt(env, decode, 0); in exec_bt()
953 env->eip += decode->len; in exec_bt()
956 static void exec_btc(CPUX86State *env, struct x86_decode *decode) in exec_btc() argument
958 do_bt(env, decode, 1); in exec_btc()
959 env->eip += decode->len; in exec_btc()
962 static void exec_btr(CPUX86State *env, struct x86_decode *decode) in exec_btr() argument
964 do_bt(env, decode, 3); in exec_btr()
965 env->eip += decode->len; in exec_btr()
968 static void exec_bts(CPUX86State *env, struct x86_decode *decode) in exec_bts() argument
970 do_bt(env, decode, 2); in exec_bts()
971 env->eip += decode->len; in exec_bts()
974 void exec_shl(CPUX86State *env, struct x86_decode *decode) in exec_shl() argument
979 fetch_operands(env, decode, 2, true, true, false); in exec_shl()
981 count = decode->op[1].val; in exec_shl()
987 switch (decode->operand_size) { in exec_shl()
992 res = (decode->op[0].val << count); in exec_shl()
993 cf = (decode->op[0].val >> (8 - count)) & 0x1; in exec_shl()
997 write_val_ext(env, decode->op[0].ptr, res, 1); in exec_shl()
1008 res = (decode->op[0].val << count); in exec_shl()
1009 cf = (decode->op[0].val >> (16 - count)) & 0x1; in exec_shl()
1013 write_val_ext(env, decode->op[0].ptr, res, 2); in exec_shl()
1020 uint32_t res = decode->op[0].val << count; in exec_shl()
1022 write_val_ext(env, decode->op[0].ptr, res, 4); in exec_shl()
1024 cf = (decode->op[0].val >> (32 - count)) & 0x1; in exec_shl()
1035 env->eip += decode->len; in exec_shl()
1038 void exec_movsx(CPUX86State *env, struct x86_decode *decode) in exec_movsx() argument
1041 int op_size = decode->operand_size; in exec_movsx()
1043 fetch_operands(env, decode, 2, false, false, false); in exec_movsx()
1045 if (0xbe == decode->opcode[1]) { in exec_movsx()
1051 decode->operand_size = src_op_size; in exec_movsx()
1052 calc_modrm_operand(env, decode, &decode->op[1]); in exec_movsx()
1053 decode->op[1].val = sign(read_val_ext(env, decode->op[1].ptr, src_op_size), in exec_movsx()
1056 write_val_ext(env, decode->op[0].ptr, decode->op[1].val, op_size); in exec_movsx()
1058 env->eip += decode->len; in exec_movsx()
1061 void exec_ror(CPUX86State *env, struct x86_decode *decode) in exec_ror() argument
1065 fetch_operands(env, decode, 2, true, true, false); in exec_ror()
1066 count = decode->op[1].val; in exec_ror()
1068 switch (decode->operand_size) { in exec_ror()
1076 bit6 = ((uint8_t)decode->op[0].val >> 6) & 1; in exec_ror()
1077 bit7 = ((uint8_t)decode->op[0].val >> 7) & 1; in exec_ror()
1082 res = ((uint8_t)decode->op[0].val >> count) | in exec_ror()
1083 ((uint8_t)decode->op[0].val << (8 - count)); in exec_ror()
1084 write_val_ext(env, decode->op[0].ptr, res, 1); in exec_ror()
1099 bit14 = ((uint16_t)decode->op[0].val >> 14) & 1; in exec_ror()
1100 bit15 = ((uint16_t)decode->op[0].val >> 15) & 1; in exec_ror()
1106 res = ((uint16_t)decode->op[0].val >> count) | in exec_ror()
1107 ((uint16_t)decode->op[0].val << (16 - count)); in exec_ror()
1108 write_val_ext(env, decode->op[0].ptr, res, 2); in exec_ror()
1124 res = ((uint32_t)decode->op[0].val >> count) | in exec_ror()
1125 ((uint32_t)decode->op[0].val << (32 - count)); in exec_ror()
1126 write_val_ext(env, decode->op[0].ptr, res, 4); in exec_ror()
1136 env->eip += decode->len; in exec_ror()
1139 void exec_rol(CPUX86State *env, struct x86_decode *decode) in exec_rol() argument
1143 fetch_operands(env, decode, 2, true, true, false); in exec_rol()
1144 count = decode->op[1].val; in exec_rol()
1146 switch (decode->operand_size) { in exec_rol()
1154 bit0 = ((uint8_t)decode->op[0].val & 1); in exec_rol()
1155 bit7 = ((uint8_t)decode->op[0].val >> 7); in exec_rol()
1160 res = ((uint8_t)decode->op[0].val << count) | in exec_rol()
1161 ((uint8_t)decode->op[0].val >> (8 - count)); in exec_rol()
1163 write_val_ext(env, decode->op[0].ptr, res, 1); in exec_rol()
1180 bit0 = ((uint16_t)decode->op[0].val & 0x1); in exec_rol()
1181 bit15 = ((uint16_t)decode->op[0].val >> 15); in exec_rol()
1187 res = ((uint16_t)decode->op[0].val << count) | in exec_rol()
1188 ((uint16_t)decode->op[0].val >> (16 - count)); in exec_rol()
1190 write_val_ext(env, decode->op[0].ptr, res, 2); in exec_rol()
1205 res = ((uint32_t)decode->op[0].val << count) | in exec_rol()
1206 ((uint32_t)decode->op[0].val >> (32 - count)); in exec_rol()
1208 write_val_ext(env, decode->op[0].ptr, res, 4); in exec_rol()
1217 env->eip += decode->len; in exec_rol()
1221 void exec_rcl(CPUX86State *env, struct x86_decode *decode) in exec_rcl() argument
1226 fetch_operands(env, decode, 2, true, true, false); in exec_rcl()
1227 count = decode->op[1].val & 0x1f; in exec_rcl()
1229 switch (decode->operand_size) { in exec_rcl()
1232 uint8_t op1_8 = decode->op[0].val; in exec_rcl()
1246 write_val_ext(env, decode->op[0].ptr, res, 1); in exec_rcl()
1256 uint16_t op1_16 = decode->op[0].val; in exec_rcl()
1272 write_val_ext(env, decode->op[0].ptr, res, 2); in exec_rcl()
1282 uint32_t op1_32 = decode->op[0].val; in exec_rcl()
1295 write_val_ext(env, decode->op[0].ptr, res, 4); in exec_rcl()
1303 env->eip += decode->len; in exec_rcl()
1306 void exec_rcr(CPUX86State *env, struct x86_decode *decode) in exec_rcr() argument
1311 fetch_operands(env, decode, 2, true, true, false); in exec_rcr()
1312 count = decode->op[1].val & 0x1f; in exec_rcr()
1314 switch (decode->operand_size) { in exec_rcr()
1317 uint8_t op1_8 = decode->op[0].val; in exec_rcr()
1327 write_val_ext(env, decode->op[0].ptr, res, 1); in exec_rcr()
1336 uint16_t op1_16 = decode->op[0].val; in exec_rcr()
1346 write_val_ext(env, decode->op[0].ptr, res, 2); in exec_rcr()
1357 uint32_t op1_32 = decode->op[0].val; in exec_rcr()
1370 write_val_ext(env, decode->op[0].ptr, res, 4); in exec_rcr()
1378 env->eip += decode->len; in exec_rcr()
1381 static void exec_xchg(CPUX86State *env, struct x86_decode *decode) in exec_xchg() argument
1383 fetch_operands(env, decode, 2, true, true, false); in exec_xchg()
1385 write_val_ext(env, decode->op[0].ptr, decode->op[1].val, in exec_xchg()
1386 decode->operand_size); in exec_xchg()
1387 write_val_ext(env, decode->op[1].ptr, decode->op[0].val, in exec_xchg()
1388 decode->operand_size); in exec_xchg()
1390 env->eip += decode->len; in exec_xchg()
1393 static void exec_xadd(CPUX86State *env, struct x86_decode *decode) in exec_xadd() argument
1395 EXEC_2OP_FLAGS_CMD(env, decode, +, SET_FLAGS_OSZAPC_ADD, true); in exec_xadd()
1396 write_val_ext(env, decode->op[1].ptr, decode->op[0].val, in exec_xadd()
1397 decode->operand_size); in exec_xadd()
1399 env->eip += decode->len; in exec_xadd()