aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>2011-07-30 05:01:26 -0400
committerAvi Kivity <avi@redhat.com>2011-09-25 12:17:59 -0400
commite85a10852c26d7d509ad17bac1a0d5264224b2d2 (patch)
tree34e4893940b0b6448f6b255f68e9b21842dcf9d2 /arch
parent807941b121cf77e70eec8db308b8c1f496cc79e9 (diff)
KVM: x86 emulator: Drop _size argument from insn_fetch()
_type is enough to know the size. Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kvm/emulate.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index ce48dc4e6ed0..d4cc8af67d95 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -702,9 +702,9 @@ static int do_insn_fetch(struct x86_emulate_ctxt *ctxt,
702} 702}
703 703
704/* Fetch next part of the instruction being emulated. */ 704/* Fetch next part of the instruction being emulated. */
705#define insn_fetch(_type, _size, _ctxt) \ 705#define insn_fetch(_type, _ctxt) \
706({ unsigned long _x; \ 706({ unsigned long _x; \
707 rc = do_insn_fetch(_ctxt, &_x, (_size)); \ 707 rc = do_insn_fetch(_ctxt, &_x, sizeof(_type)); \
708 if (rc != X86EMUL_CONTINUE) \ 708 if (rc != X86EMUL_CONTINUE) \
709 goto done; \ 709 goto done; \
710 (_type)_x; \ 710 (_type)_x; \
@@ -901,7 +901,7 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
901 ctxt->modrm_rm = base_reg = (ctxt->rex_prefix & 1) << 3; /* REG.B */ 901 ctxt->modrm_rm = base_reg = (ctxt->rex_prefix & 1) << 3; /* REG.B */
902 } 902 }
903 903
904 ctxt->modrm = insn_fetch(u8, 1, ctxt); 904 ctxt->modrm = insn_fetch(u8, ctxt);
905 ctxt->modrm_mod |= (ctxt->modrm & 0xc0) >> 6; 905 ctxt->modrm_mod |= (ctxt->modrm & 0xc0) >> 6;
906 ctxt->modrm_reg |= (ctxt->modrm & 0x38) >> 3; 906 ctxt->modrm_reg |= (ctxt->modrm & 0x38) >> 3;
907 ctxt->modrm_rm |= (ctxt->modrm & 0x07); 907 ctxt->modrm_rm |= (ctxt->modrm & 0x07);
@@ -935,13 +935,13 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
935 switch (ctxt->modrm_mod) { 935 switch (ctxt->modrm_mod) {
936 case 0: 936 case 0:
937 if (ctxt->modrm_rm == 6) 937 if (ctxt->modrm_rm == 6)
938 modrm_ea += insn_fetch(u16, 2, ctxt); 938 modrm_ea += insn_fetch(u16, ctxt);
939 break; 939 break;
940 case 1: 940 case 1:
941 modrm_ea += insn_fetch(s8, 1, ctxt); 941 modrm_ea += insn_fetch(s8, ctxt);
942 break; 942 break;
943 case 2: 943 case 2:
944 modrm_ea += insn_fetch(u16, 2, ctxt); 944 modrm_ea += insn_fetch(u16, ctxt);
945 break; 945 break;
946 } 946 }
947 switch (ctxt->modrm_rm) { 947 switch (ctxt->modrm_rm) {
@@ -978,13 +978,13 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
978 } else { 978 } else {
979 /* 32/64-bit ModR/M decode. */ 979 /* 32/64-bit ModR/M decode. */
980 if ((ctxt->modrm_rm & 7) == 4) { 980 if ((ctxt->modrm_rm & 7) == 4) {
981 sib = insn_fetch(u8, 1, ctxt); 981 sib = insn_fetch(u8, ctxt);
982 index_reg |= (sib >> 3) & 7; 982 index_reg |= (sib >> 3) & 7;
983 base_reg |= sib & 7; 983 base_reg |= sib & 7;
984 scale = sib >> 6; 984 scale = sib >> 6;
985 985
986 if ((base_reg & 7) == 5 && ctxt->modrm_mod == 0) 986 if ((base_reg & 7) == 5 && ctxt->modrm_mod == 0)
987 modrm_ea += insn_fetch(s32, 4, ctxt); 987 modrm_ea += insn_fetch(s32, ctxt);
988 else 988 else
989 modrm_ea += ctxt->regs[base_reg]; 989 modrm_ea += ctxt->regs[base_reg];
990 if (index_reg != 4) 990 if (index_reg != 4)
@@ -997,13 +997,13 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
997 switch (ctxt->modrm_mod) { 997 switch (ctxt->modrm_mod) {
998 case 0: 998 case 0:
999 if (ctxt->modrm_rm == 5) 999 if (ctxt->modrm_rm == 5)
1000 modrm_ea += insn_fetch(s32, 4, ctxt); 1000 modrm_ea += insn_fetch(s32, ctxt);
1001 break; 1001 break;
1002 case 1: 1002 case 1:
1003 modrm_ea += insn_fetch(s8, 1, ctxt); 1003 modrm_ea += insn_fetch(s8, ctxt);
1004 break; 1004 break;
1005 case 2: 1005 case 2:
1006 modrm_ea += insn_fetch(s32, 4, ctxt); 1006 modrm_ea += insn_fetch(s32, ctxt);
1007 break; 1007 break;
1008 } 1008 }
1009 } 1009 }
@@ -1020,13 +1020,13 @@ static int decode_abs(struct x86_emulate_ctxt *ctxt,
1020 op->type = OP_MEM; 1020 op->type = OP_MEM;
1021 switch (ctxt->ad_bytes) { 1021 switch (ctxt->ad_bytes) {
1022 case 2: 1022 case 2:
1023 op->addr.mem.ea = insn_fetch(u16, 2, ctxt); 1023 op->addr.mem.ea = insn_fetch(u16, ctxt);
1024 break; 1024 break;
1025 case 4: 1025 case 4:
1026 op->addr.mem.ea = insn_fetch(u32, 4, ctxt); 1026 op->addr.mem.ea = insn_fetch(u32, ctxt);
1027 break; 1027 break;
1028 case 8: 1028 case 8:
1029 op->addr.mem.ea = insn_fetch(u64, 8, ctxt); 1029 op->addr.mem.ea = insn_fetch(u64, ctxt);
1030 break; 1030 break;
1031 } 1031 }
1032done: 1032done:
@@ -3316,13 +3316,13 @@ static int decode_imm(struct x86_emulate_ctxt *ctxt, struct operand *op,
3316 /* NB. Immediates are sign-extended as necessary. */ 3316 /* NB. Immediates are sign-extended as necessary. */
3317 switch (op->bytes) { 3317 switch (op->bytes) {
3318 case 1: 3318 case 1:
3319 op->val = insn_fetch(s8, 1, ctxt); 3319 op->val = insn_fetch(s8, ctxt);
3320 break; 3320 break;
3321 case 2: 3321 case 2:
3322 op->val = insn_fetch(s16, 2, ctxt); 3322 op->val = insn_fetch(s16, ctxt);
3323 break; 3323 break;
3324 case 4: 3324 case 4:
3325 op->val = insn_fetch(s32, 4, ctxt); 3325 op->val = insn_fetch(s32, ctxt);
3326 break; 3326 break;
3327 } 3327 }
3328 if (!sign_extension) { 3328 if (!sign_extension) {
@@ -3381,7 +3381,7 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len)
3381 3381
3382 /* Legacy prefixes. */ 3382 /* Legacy prefixes. */
3383 for (;;) { 3383 for (;;) {
3384 switch (ctxt->b = insn_fetch(u8, 1, ctxt)) { 3384 switch (ctxt->b = insn_fetch(u8, ctxt)) {
3385 case 0x66: /* operand-size override */ 3385 case 0x66: /* operand-size override */
3386 op_prefix = true; 3386 op_prefix = true;
3387 /* switch between 2/4 bytes */ 3387 /* switch between 2/4 bytes */
@@ -3437,7 +3437,7 @@ done_prefixes:
3437 /* Two-byte opcode? */ 3437 /* Two-byte opcode? */
3438 if (ctxt->b == 0x0f) { 3438 if (ctxt->b == 0x0f) {
3439 ctxt->twobyte = 1; 3439 ctxt->twobyte = 1;
3440 ctxt->b = insn_fetch(u8, 1, ctxt); 3440 ctxt->b = insn_fetch(u8, ctxt);
3441 opcode = twobyte_table[ctxt->b]; 3441 opcode = twobyte_table[ctxt->b];
3442 } 3442 }
3443 ctxt->d = opcode.flags; 3443 ctxt->d = opcode.flags;
@@ -3445,13 +3445,13 @@ done_prefixes:
3445 while (ctxt->d & GroupMask) { 3445 while (ctxt->d & GroupMask) {
3446 switch (ctxt->d & GroupMask) { 3446 switch (ctxt->d & GroupMask) {
3447 case Group: 3447 case Group:
3448 ctxt->modrm = insn_fetch(u8, 1, ctxt); 3448 ctxt->modrm = insn_fetch(u8, ctxt);
3449 --ctxt->_eip; 3449 --ctxt->_eip;
3450 goffset = (ctxt->modrm >> 3) & 7; 3450 goffset = (ctxt->modrm >> 3) & 7;
3451 opcode = opcode.u.group[goffset]; 3451 opcode = opcode.u.group[goffset];
3452 break; 3452 break;
3453 case GroupDual: 3453 case GroupDual:
3454 ctxt->modrm = insn_fetch(u8, 1, ctxt); 3454 ctxt->modrm = insn_fetch(u8, ctxt);
3455 --ctxt->_eip; 3455 --ctxt->_eip;
3456 goffset = (ctxt->modrm >> 3) & 7; 3456 goffset = (ctxt->modrm >> 3) & 7;
3457 if ((ctxt->modrm >> 6) == 3) 3457 if ((ctxt->modrm >> 6) == 3)
@@ -3637,7 +3637,7 @@ done_prefixes:
3637 ctxt->dst.type = OP_IMM; 3637 ctxt->dst.type = OP_IMM;
3638 ctxt->dst.addr.mem.ea = ctxt->_eip; 3638 ctxt->dst.addr.mem.ea = ctxt->_eip;
3639 ctxt->dst.bytes = 1; 3639 ctxt->dst.bytes = 1;
3640 ctxt->dst.val = insn_fetch(u8, 1, ctxt); 3640 ctxt->dst.val = insn_fetch(u8, ctxt);
3641 break; 3641 break;
3642 case DstMem: 3642 case DstMem:
3643 case DstMem64: 3643 case DstMem64: