X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_xed.c;h=c82f107bb04b35bd6aba2bd586cd0514c82149c5;hb=191b42c70d34a064b6600784508e3a06040ec044;hp=35693fe9f8658647fe8f6205f4c43163a768e011;hpb=266af4b5b19da7bee8e7445288c7c1cb3ee194c7;p=palacios-OLD.git diff --git a/palacios/src/palacios/vmm_xed.c b/palacios/src/palacios/vmm_xed.c index 35693fe..c82f107 100644 --- a/palacios/src/palacios/vmm_xed.c +++ b/palacios/src/palacios/vmm_xed.c @@ -347,11 +347,10 @@ int v3_decode(struct guest_info * info, addr_t instr_ptr, struct x86_instr * ins instr->str_op_length = 0; } - instr->num_operands = xed_decoded_inst_noperands(&xed_instr); if (instr->num_operands > 3) { - PrintDebug("Special Case Not Handled\n"); + PrintDebug("Special Case Not Handled (more than 3 operands) (iform=%s)\n", xed_iform_enum_t2str(iform) return -1; // special case } else if (instr->num_operands == 3) { @@ -361,13 +360,11 @@ int v3_decode(struct guest_info * info, addr_t instr_ptr, struct x86_instr * ins if ((!xed_operand_is_register(op_enum)) || (!is_flags_reg(xed_decoded_inst_get_reg(&xed_instr, op_enum)))) { // special case - PrintError("Special Case not handled\n"); + PrintError("Special Case not handled (iform=%s)\n", xed_iform_enum_t2str(iform)); return -1; } } - - //PrintDebug("Number of operands: %d\n", instr->num_operands); //PrintDebug("INSTR length: %d\n", instr->instr_length); @@ -1266,12 +1263,14 @@ static v3_op_type_t get_opcode(xed_iform_enum_t iform) { // Write case XED_IFORM_MOV_MEMv_GPRv: case XED_IFORM_MOV_MEMb_GPR8: + case XED_IFORM_MOV_MEMv_OrAX: case XED_IFORM_MOV_MEMb_AL: case XED_IFORM_MOV_MEMv_IMM: case XED_IFORM_MOV_MEMb_IMM: // Read case XED_IFORM_MOV_GPRv_MEMv: case XED_IFORM_MOV_GPR8_MEMb: + case XED_IFORM_MOV_OrAX_MEMv: case XED_IFORM_MOV_AL_MEMb: return V3_OP_MOV;