Changeset 98880 in vbox
- Timestamp:
- Mar 9, 2023 1:23:15 AM (21 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r98873 r98880 7099 7099 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7100 7100 IEM_MC_PREPARE_FPU_USAGE(); 7101 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) 7101 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 7102 7102 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 7103 7103 IEM_MC_STORE_FPU_RESULT(FpuRes, 0); 7104 IEM_MC_ELSE()7104 } IEM_MC_ELSE() { 7105 7105 IEM_MC_FPU_STACK_UNDERFLOW(0); 7106 IEM_MC_ENDIF();7106 } IEM_MC_ENDIF(); 7107 7107 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7108 7108 … … 7131 7131 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7132 7132 IEM_MC_PREPARE_FPU_USAGE(); 7133 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) 7133 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 7134 7134 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pu16Fsw, pr80Value1, pr80Value2); 7135 7135 IEM_MC_UPDATE_FSW(u16Fsw); 7136 IEM_MC_ELSE()7136 } IEM_MC_ELSE() { 7137 7137 IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX); 7138 IEM_MC_ENDIF();7138 } IEM_MC_ENDIF(); 7139 7139 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7140 7140 … … 7163 7163 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7164 7164 IEM_MC_PREPARE_FPU_USAGE(); 7165 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) 7165 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 7166 7166 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pu16Fsw, pr80Value1, pr80Value2); 7167 7167 IEM_MC_UPDATE_FSW_THEN_POP(u16Fsw); 7168 IEM_MC_ELSE()7168 } IEM_MC_ELSE() { 7169 7169 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(UINT8_MAX); 7170 IEM_MC_ENDIF();7170 } IEM_MC_ENDIF(); 7171 7171 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7172 7172 … … 7264 7264 7265 7265 IEM_MC_PREPARE_FPU_USAGE(); 7266 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 7266 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 7267 7267 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr32Val2); 7268 7268 IEM_MC_STORE_FPU_RESULT(FpuRes, 0); 7269 IEM_MC_ELSE()7269 } IEM_MC_ELSE() { 7270 7270 IEM_MC_FPU_STACK_UNDERFLOW(0); 7271 IEM_MC_ENDIF();7271 } IEM_MC_ENDIF(); 7272 7272 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7273 7273 … … 7313 7313 7314 7314 IEM_MC_PREPARE_FPU_USAGE(); 7315 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 7315 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 7316 7316 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r32, pu16Fsw, pr80Value1, pr32Val2); 7317 7317 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 7318 IEM_MC_ELSE()7318 } IEM_MC_ELSE() { 7319 7319 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 7320 IEM_MC_ENDIF();7320 } IEM_MC_ENDIF(); 7321 7321 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7322 7322 … … 7346 7346 7347 7347 IEM_MC_PREPARE_FPU_USAGE(); 7348 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 7348 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 7349 7349 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r32, pu16Fsw, pr80Value1, pr32Val2); 7350 7350 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 7351 IEM_MC_ELSE()7351 } IEM_MC_ELSE() { 7352 7352 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 7353 IEM_MC_ENDIF();7353 } IEM_MC_ENDIF(); 7354 7354 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7355 7355 … … 7452 7452 7453 7453 IEM_MC_PREPARE_FPU_USAGE(); 7454 IEM_MC_IF_FPUREG_IS_EMPTY(7) 7454 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 7455 7455 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r32, pFpuRes, pr32Val); 7456 7456 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 7457 IEM_MC_ELSE()7457 } IEM_MC_ELSE() { 7458 7458 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 7459 IEM_MC_ENDIF();7459 } IEM_MC_ENDIF(); 7460 7460 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7461 7461 … … 7482 7482 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 7483 7483 IEM_MC_PREPARE_FPU_USAGE(); 7484 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 7484 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 7485 7485 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 7486 7486 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw); 7487 7487 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 7488 IEM_MC_ELSE()7489 IEM_MC_IF_FCW_IM() 7488 } IEM_MC_ELSE() { 7489 IEM_MC_IF_FCW_IM() { 7490 7490 IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(pr32Dst); 7491 7491 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 7492 IEM_MC_ENDIF();7492 } IEM_MC_ENDIF(); 7493 7493 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 7494 IEM_MC_ENDIF();7494 } IEM_MC_ENDIF(); 7495 7495 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7496 7496 … … 7517 7517 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 7518 7518 IEM_MC_PREPARE_FPU_USAGE(); 7519 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 7519 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 7520 7520 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value); 7521 7521 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw); 7522 7522 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 7523 IEM_MC_ELSE()7524 IEM_MC_IF_FCW_IM() 7523 } IEM_MC_ELSE() { 7524 IEM_MC_IF_FCW_IM() { 7525 7525 IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(pr32Dst); 7526 7526 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 7527 IEM_MC_ENDIF();7527 } IEM_MC_ENDIF(); 7528 7528 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 7529 IEM_MC_ENDIF();7529 } IEM_MC_ENDIF(); 7530 7530 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7531 7531 … … 7638 7638 7639 7639 IEM_MC_PREPARE_FPU_USAGE(); 7640 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, IEM_GET_MODRM_RM_8(bRm)) 7640 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, IEM_GET_MODRM_RM_8(bRm)) { 7641 7641 IEM_MC_SET_FPU_RESULT(FpuRes, 0 /*FSW*/, pr80Value); 7642 7642 IEM_MC_PUSH_FPU_RESULT(FpuRes); 7643 IEM_MC_ELSE()7643 } IEM_MC_ELSE() { 7644 7644 IEM_MC_FPU_STACK_PUSH_UNDERFLOW(); 7645 IEM_MC_ENDIF();7645 } IEM_MC_ENDIF(); 7646 7646 7647 7647 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7667 7667 7668 7668 IEM_MC_PREPARE_FPU_USAGE(); 7669 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) 7669 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, IEM_GET_MODRM_RM_8(bRm)) { 7670 7670 IEM_MC_SET_FPU_RESULT(FpuRes, X86_FSW_C1, pr80Value2); 7671 7671 IEM_MC_STORE_FPUREG_R80_SRC_REF(IEM_GET_MODRM_RM_8(bRm), pr80Value1); 7672 7672 IEM_MC_STORE_FPU_RESULT(FpuRes, 0); 7673 IEM_MC_ELSE()7673 } IEM_MC_ELSE() { 7674 7674 IEM_MC_CALL_CIMPL_1(iemCImpl_fxch_underflow, iStReg); 7675 IEM_MC_ENDIF();7675 } IEM_MC_ENDIF(); 7676 7676 7677 7677 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7696 7696 7697 7697 IEM_MC_PREPARE_FPU_USAGE(); 7698 IEM_MC_IF_FPUREG_NOT_EMPTY(0) 7698 IEM_MC_IF_FPUREG_NOT_EMPTY(0) { 7699 7699 IEM_MC_UPDATE_FSW_THEN_POP(u16Fsw); 7700 IEM_MC_ELSE()7700 } IEM_MC_ELSE() { 7701 7701 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(0); 7702 IEM_MC_ENDIF();7702 } IEM_MC_ENDIF(); 7703 7703 7704 7704 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7714 7714 7715 7715 IEM_MC_PREPARE_FPU_USAGE(); 7716 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 7716 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 7717 7717 IEM_MC_SET_FPU_RESULT(FpuRes, 0 /*FSW*/, pr80Value); 7718 7718 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, iDstReg); 7719 IEM_MC_ELSE()7719 } IEM_MC_ELSE() { 7720 7720 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(iDstReg); 7721 IEM_MC_ENDIF();7721 } IEM_MC_ENDIF(); 7722 7722 7723 7723 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 7745 7745 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7746 7746 IEM_MC_PREPARE_FPU_USAGE(); 7747 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 7747 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 7748 7748 IEM_MC_CALL_FPU_AIMPL_2(pfnAImpl, pFpuRes, pr80Value); 7749 7749 IEM_MC_STORE_FPU_RESULT(FpuRes, 0); 7750 IEM_MC_ELSE()7750 } IEM_MC_ELSE() { 7751 7751 IEM_MC_FPU_STACK_UNDERFLOW(0); 7752 IEM_MC_ENDIF();7752 } IEM_MC_ENDIF(); 7753 7753 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7754 7754 … … 7787 7787 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7788 7788 IEM_MC_PREPARE_FPU_USAGE(); 7789 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 7789 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 7790 7790 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_ftst_r80, pu16Fsw, pr80Value); 7791 7791 IEM_MC_UPDATE_FSW(u16Fsw); 7792 IEM_MC_ELSE()7792 } IEM_MC_ELSE() { 7793 7793 IEM_MC_FPU_STACK_UNDERFLOW(UINT8_MAX); 7794 IEM_MC_ENDIF();7794 } IEM_MC_ENDIF(); 7795 7795 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7796 7796 … … 7838 7838 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7839 7839 IEM_MC_PREPARE_FPU_USAGE(); 7840 IEM_MC_IF_FPUREG_IS_EMPTY(7) 7840 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 7841 7841 IEM_MC_CALL_FPU_AIMPL_1(pfnAImpl, pFpuRes); 7842 7842 IEM_MC_PUSH_FPU_RESULT(FpuRes); 7843 IEM_MC_ELSE()7843 } IEM_MC_ELSE() { 7844 7844 IEM_MC_FPU_STACK_PUSH_OVERFLOW(); 7845 IEM_MC_ENDIF();7845 } IEM_MC_ENDIF(); 7846 7846 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7847 7847 … … 7940 7940 7941 7941 IEM_MC_PREPARE_FPU_USAGE(); 7942 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) 7942 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) { 7943 7943 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 7944 7944 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, IEM_GET_MODRM_RM_8(bRm)); 7945 IEM_MC_ELSE()7945 } IEM_MC_ELSE() { 7946 7946 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(IEM_GET_MODRM_RM_8(bRm)); 7947 IEM_MC_ENDIF();7947 } IEM_MC_ENDIF(); 7948 7948 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7949 7949 … … 7978 7978 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 7979 7979 IEM_MC_PREPARE_FPU_USAGE(); 7980 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 7980 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 7981 7981 IEM_MC_CALL_FPU_AIMPL_2(pfnAImpl, pFpuResTwo, pr80Value); 7982 7982 IEM_MC_PUSH_FPU_RESULT_TWO(FpuResTwo); 7983 IEM_MC_ELSE()7983 } IEM_MC_ELSE() { 7984 7984 IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO(); 7985 IEM_MC_ENDIF();7985 } IEM_MC_ENDIF(); 7986 7986 IEM_MC_ADVANCE_RIP_AND_FINISH(); 7987 7987 … … 8229 8229 8230 8230 IEM_MC_PREPARE_FPU_USAGE(); 8231 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8232 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) 8231 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8232 IEM_MC_IF_EFL_BIT_SET(X86_EFL_CF) { 8233 8233 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8234 IEM_MC_ENDIF();8234 } IEM_MC_ENDIF(); 8235 8235 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8236 IEM_MC_ELSE()8236 } IEM_MC_ELSE() { 8237 8237 IEM_MC_FPU_STACK_UNDERFLOW(0); 8238 IEM_MC_ENDIF();8238 } IEM_MC_ENDIF(); 8239 8239 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8240 8240 … … 8256 8256 8257 8257 IEM_MC_PREPARE_FPU_USAGE(); 8258 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8259 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) 8258 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8259 IEM_MC_IF_EFL_BIT_SET(X86_EFL_ZF) { 8260 8260 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8261 IEM_MC_ENDIF();8261 } IEM_MC_ENDIF(); 8262 8262 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8263 IEM_MC_ELSE()8263 } IEM_MC_ELSE() { 8264 8264 IEM_MC_FPU_STACK_UNDERFLOW(0); 8265 IEM_MC_ENDIF();8265 } IEM_MC_ENDIF(); 8266 8266 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8267 8267 … … 8283 8283 8284 8284 IEM_MC_PREPARE_FPU_USAGE(); 8285 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8286 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) 8285 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8286 IEM_MC_IF_EFL_ANY_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 8287 8287 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8288 IEM_MC_ENDIF();8288 } IEM_MC_ENDIF(); 8289 8289 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8290 IEM_MC_ELSE()8290 } IEM_MC_ELSE() { 8291 8291 IEM_MC_FPU_STACK_UNDERFLOW(0); 8292 IEM_MC_ENDIF();8292 } IEM_MC_ENDIF(); 8293 8293 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8294 8294 … … 8310 8310 8311 8311 IEM_MC_PREPARE_FPU_USAGE(); 8312 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8313 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) 8312 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8313 IEM_MC_IF_EFL_BIT_SET(X86_EFL_PF) { 8314 8314 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8315 IEM_MC_ENDIF();8315 } IEM_MC_ENDIF(); 8316 8316 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8317 IEM_MC_ELSE()8317 } IEM_MC_ELSE() { 8318 8318 IEM_MC_FPU_STACK_UNDERFLOW(0); 8319 IEM_MC_ENDIF();8319 } IEM_MC_ENDIF(); 8320 8320 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8321 8321 … … 8344 8344 8345 8345 IEM_MC_PREPARE_FPU_USAGE(); 8346 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, 1) 8346 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, 1) { 8347 8347 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pu16Fsw, pr80Value1, pr80Value2); 8348 8348 IEM_MC_UPDATE_FSW_THEN_POP_POP(u16Fsw); 8349 IEM_MC_ELSE()8349 } IEM_MC_ELSE() { 8350 8350 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP(); 8351 IEM_MC_ENDIF();8351 } IEM_MC_ENDIF(); 8352 8352 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8353 8353 … … 8389 8389 8390 8390 IEM_MC_PREPARE_FPU_USAGE(); 8391 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 8391 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 8392 8392 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pi32Val2); 8393 8393 IEM_MC_STORE_FPU_RESULT(FpuRes, 0); 8394 IEM_MC_ELSE()8394 } IEM_MC_ELSE() { 8395 8395 IEM_MC_FPU_STACK_UNDERFLOW(0); 8396 IEM_MC_ENDIF();8396 } IEM_MC_ENDIF(); 8397 8397 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8398 8398 … … 8438 8438 8439 8439 IEM_MC_PREPARE_FPU_USAGE(); 8440 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 8440 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 8441 8441 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2); 8442 8442 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8443 IEM_MC_ELSE()8443 } IEM_MC_ELSE() { 8444 8444 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8445 IEM_MC_ENDIF();8445 } IEM_MC_ENDIF(); 8446 8446 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8447 8447 … … 8471 8471 8472 8472 IEM_MC_PREPARE_FPU_USAGE(); 8473 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 8473 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 8474 8474 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2); 8475 8475 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8476 IEM_MC_ELSE()8476 } IEM_MC_ELSE() { 8477 8477 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8478 IEM_MC_ENDIF();8478 } IEM_MC_ENDIF(); 8479 8479 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8480 8480 … … 8578 8578 8579 8579 IEM_MC_PREPARE_FPU_USAGE(); 8580 IEM_MC_IF_FPUREG_IS_EMPTY(7) 8580 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 8581 8581 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_r80_from_i32, pFpuRes, pi32Val); 8582 8582 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8583 IEM_MC_ELSE()8583 } IEM_MC_ELSE() { 8584 8584 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8585 IEM_MC_ENDIF();8585 } IEM_MC_ENDIF(); 8586 8586 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8587 8587 … … 8608 8608 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 8609 8609 IEM_MC_PREPARE_FPU_USAGE(); 8610 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 8610 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8611 8611 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 8612 8612 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 8613 8613 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8614 IEM_MC_ELSE()8615 IEM_MC_IF_FCW_IM() 8614 } IEM_MC_ELSE() { 8615 IEM_MC_IF_FCW_IM() { 8616 8616 IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */); 8617 8617 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 8618 IEM_MC_ENDIF();8618 } IEM_MC_ENDIF(); 8619 8619 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8620 IEM_MC_ENDIF();8620 } IEM_MC_ENDIF(); 8621 8621 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8622 8622 … … 8643 8643 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 8644 8644 IEM_MC_PREPARE_FPU_USAGE(); 8645 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 8645 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8646 8646 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 8647 8647 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 8648 8648 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8649 IEM_MC_ELSE()8650 IEM_MC_IF_FCW_IM() 8649 } IEM_MC_ELSE() { 8650 IEM_MC_IF_FCW_IM() { 8651 8651 IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */); 8652 8652 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 8653 IEM_MC_ENDIF();8653 } IEM_MC_ENDIF(); 8654 8654 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8655 IEM_MC_ENDIF();8655 } IEM_MC_ENDIF(); 8656 8656 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8657 8657 … … 8678 8678 IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 8679 8679 IEM_MC_PREPARE_FPU_USAGE(); 8680 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 8680 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8681 8681 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value); 8682 8682 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw); 8683 8683 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8684 IEM_MC_ELSE()8685 IEM_MC_IF_FCW_IM() 8684 } IEM_MC_ELSE() { 8685 IEM_MC_IF_FCW_IM() { 8686 8686 IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */); 8687 8687 IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W); 8688 IEM_MC_ENDIF();8688 } IEM_MC_ENDIF(); 8689 8689 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8690 IEM_MC_ENDIF();8690 } IEM_MC_ENDIF(); 8691 8691 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8692 8692 … … 8715 8715 8716 8716 IEM_MC_PREPARE_FPU_USAGE(); 8717 IEM_MC_IF_FPUREG_IS_EMPTY(7) 8717 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 8718 8718 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r80, pFpuRes, pr80Val); 8719 8719 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8720 IEM_MC_ELSE()8720 } IEM_MC_ELSE() { 8721 8721 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 8722 IEM_MC_ENDIF();8722 } IEM_MC_ENDIF(); 8723 8723 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8724 8724 … … 8745 8745 IEM_MC_MEM_MAP_EX(pr80Dst, IEM_ACCESS_DATA_W, sizeof(*pr80Dst), pVCpu->iem.s.iEffSeg, GCPtrEffDst, 7 /*cbAlign*/, 1 /*arg*/); 8746 8746 IEM_MC_PREPARE_FPU_USAGE(); 8747 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 8747 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 8748 8748 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r80, pu16Fsw, pr80Dst, pr80Value); 8749 8749 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr80Dst, IEM_ACCESS_DATA_W, u16Fsw); 8750 8750 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8751 IEM_MC_ELSE()8752 IEM_MC_IF_FCW_IM() 8751 } IEM_MC_ELSE() { 8752 IEM_MC_IF_FCW_IM() { 8753 8753 IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF(pr80Dst); 8754 8754 IEM_MC_MEM_COMMIT_AND_UNMAP(pr80Dst, IEM_ACCESS_DATA_W); 8755 IEM_MC_ENDIF();8755 } IEM_MC_ENDIF(); 8756 8756 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 8757 IEM_MC_ENDIF();8757 } IEM_MC_ENDIF(); 8758 8758 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8759 8759 … … 8775 8775 8776 8776 IEM_MC_PREPARE_FPU_USAGE(); 8777 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8778 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_CF) 8777 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8778 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_CF) { 8779 8779 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8780 IEM_MC_ENDIF();8780 } IEM_MC_ENDIF(); 8781 8781 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8782 IEM_MC_ELSE()8782 } IEM_MC_ELSE() { 8783 8783 IEM_MC_FPU_STACK_UNDERFLOW(0); 8784 IEM_MC_ENDIF();8784 } IEM_MC_ENDIF(); 8785 8785 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8786 8786 … … 8802 8802 8803 8803 IEM_MC_PREPARE_FPU_USAGE(); 8804 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8805 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) 8804 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8805 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { 8806 8806 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8807 IEM_MC_ENDIF();8807 } IEM_MC_ENDIF(); 8808 8808 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8809 IEM_MC_ELSE()8809 } IEM_MC_ELSE() { 8810 8810 IEM_MC_FPU_STACK_UNDERFLOW(0); 8811 IEM_MC_ENDIF();8811 } IEM_MC_ENDIF(); 8812 8812 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8813 8813 … … 8829 8829 8830 8830 IEM_MC_PREPARE_FPU_USAGE(); 8831 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8832 IEM_MC_IF_EFL_NO_BITS_SET(X86_EFL_CF | X86_EFL_ZF) 8831 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8832 IEM_MC_IF_EFL_NO_BITS_SET(X86_EFL_CF | X86_EFL_ZF) { 8833 8833 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8834 IEM_MC_ENDIF();8834 } IEM_MC_ENDIF(); 8835 8835 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8836 IEM_MC_ELSE()8836 } IEM_MC_ELSE() { 8837 8837 IEM_MC_FPU_STACK_UNDERFLOW(0); 8838 IEM_MC_ENDIF();8838 } IEM_MC_ENDIF(); 8839 8839 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8840 8840 … … 8856 8856 8857 8857 IEM_MC_PREPARE_FPU_USAGE(); 8858 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) 8859 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_PF) 8858 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(pr80ValueN, IEM_GET_MODRM_RM_8(bRm), 0) { 8859 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_PF) { 8860 8860 IEM_MC_STORE_FPUREG_R80_SRC_REF(0, pr80ValueN); 8861 IEM_MC_ENDIF();8861 } IEM_MC_ENDIF(); 8862 8862 IEM_MC_UPDATE_FPU_OPCODE_IP(); 8863 IEM_MC_ELSE()8863 } IEM_MC_ELSE() { 8864 8864 IEM_MC_FPU_STACK_UNDERFLOW(0); 8865 IEM_MC_ENDIF();8865 } IEM_MC_ENDIF(); 8866 8866 IEM_MC_ADVANCE_RIP_AND_FINISH(); 8867 8867 … … 9037 9037 9038 9038 IEM_MC_PREPARE_FPU_USAGE(); 9039 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) 9039 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, IEM_GET_MODRM_RM_8(bRm), pr80Value2, 0) { 9040 9040 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 9041 9041 IEM_MC_STORE_FPU_RESULT(FpuRes, IEM_GET_MODRM_RM_8(bRm)); 9042 IEM_MC_ELSE()9042 } IEM_MC_ELSE() { 9043 9043 IEM_MC_FPU_STACK_UNDERFLOW(IEM_GET_MODRM_RM_8(bRm)); 9044 IEM_MC_ENDIF();9044 } IEM_MC_ENDIF(); 9045 9045 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9046 9046 … … 9121 9121 IEM_MC_FETCH_MEM_R64(r64Factor2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9122 9122 IEM_MC_PREPARE_FPU_USAGE(); 9123 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Factor1, 0) 9123 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Factor1, 0) { 9124 9124 IEM_MC_CALL_FPU_AIMPL_3(pfnImpl, pFpuRes, pr80Factor1, pr64Factor2); 9125 9125 IEM_MC_STORE_FPU_RESULT_MEM_OP(FpuRes, 0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9126 IEM_MC_ELSE()9126 } IEM_MC_ELSE() { 9127 9127 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(0, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9128 IEM_MC_ENDIF();9128 } IEM_MC_ENDIF(); 9129 9129 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9130 9130 … … 9170 9170 9171 9171 IEM_MC_PREPARE_FPU_USAGE(); 9172 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 9172 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9173 9173 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r64, pu16Fsw, pr80Value1, pr64Val2); 9174 9174 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9175 IEM_MC_ELSE()9175 } IEM_MC_ELSE() { 9176 9176 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9177 IEM_MC_ENDIF();9177 } IEM_MC_ENDIF(); 9178 9178 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9179 9179 … … 9203 9203 9204 9204 IEM_MC_PREPARE_FPU_USAGE(); 9205 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 9205 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9206 9206 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fcom_r80_by_r64, pu16Fsw, pr80Value1, pr64Val2); 9207 9207 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9208 IEM_MC_ELSE()9208 } IEM_MC_ELSE() { 9209 9209 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9210 IEM_MC_ENDIF();9210 } IEM_MC_ENDIF(); 9211 9211 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9212 9212 … … 9307 9307 IEM_MC_FETCH_MEM_R64(r64Val, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9308 9308 IEM_MC_PREPARE_FPU_USAGE(); 9309 IEM_MC_IF_FPUREG_IS_EMPTY(7) 9309 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 9310 9310 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_r64, pFpuRes, pr64Val); 9311 9311 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9312 IEM_MC_ELSE()9312 } IEM_MC_ELSE() { 9313 9313 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9314 IEM_MC_ENDIF();9314 } IEM_MC_ENDIF(); 9315 9315 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9316 9316 … … 9337 9337 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 9338 9338 IEM_MC_PREPARE_FPU_USAGE(); 9339 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 9339 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9340 9340 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 9341 9341 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw); 9342 9342 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9343 IEM_MC_ELSE()9344 IEM_MC_IF_FCW_IM() 9343 } IEM_MC_ELSE() { 9344 IEM_MC_IF_FCW_IM() { 9345 9345 IEM_MC_STORE_MEM_I64_CONST_BY_REF(pi64Dst, INT64_MIN /* (integer indefinite) */); 9346 9346 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 9347 IEM_MC_ENDIF();9347 } IEM_MC_ENDIF(); 9348 9348 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9349 IEM_MC_ENDIF();9349 } IEM_MC_ENDIF(); 9350 9350 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9351 9351 … … 9372 9372 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 9373 9373 IEM_MC_PREPARE_FPU_USAGE(); 9374 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 9374 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9375 9375 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value); 9376 9376 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw); 9377 9377 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9378 IEM_MC_ELSE()9379 IEM_MC_IF_FCW_IM() 9378 } IEM_MC_ELSE() { 9379 IEM_MC_IF_FCW_IM() { 9380 9380 IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF(pr64Dst); 9381 9381 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 9382 IEM_MC_ENDIF();9382 } IEM_MC_ENDIF(); 9383 9383 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9384 IEM_MC_ENDIF();9384 } IEM_MC_ENDIF(); 9385 9385 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9386 9386 … … 9409 9409 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 9410 9410 IEM_MC_PREPARE_FPU_USAGE(); 9411 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 9411 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9412 9412 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value); 9413 9413 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw); 9414 9414 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9415 IEM_MC_ELSE()9416 IEM_MC_IF_FCW_IM() 9415 } IEM_MC_ELSE() { 9416 IEM_MC_IF_FCW_IM() { 9417 9417 IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF(pr64Dst); 9418 9418 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 9419 IEM_MC_ENDIF();9419 } IEM_MC_ENDIF(); 9420 9420 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9421 IEM_MC_ENDIF();9421 } IEM_MC_ENDIF(); 9422 9422 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9423 9423 … … 9521 9521 9522 9522 IEM_MC_PREPARE_FPU_USAGE(); 9523 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 9523 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9524 9524 IEM_MC_SET_FPU_RESULT(FpuRes, 0 /*FSW*/, pr80Value); 9525 9525 IEM_MC_STORE_FPU_RESULT(FpuRes, IEM_GET_MODRM_RM_8(bRm)); 9526 IEM_MC_ELSE()9526 } IEM_MC_ELSE() { 9527 9527 IEM_MC_FPU_STACK_UNDERFLOW(IEM_GET_MODRM_RM_8(bRm)); 9528 IEM_MC_ENDIF();9528 } IEM_MC_ENDIF(); 9529 9529 9530 9530 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 9670 9670 9671 9671 IEM_MC_PREPARE_FPU_USAGE(); 9672 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 9672 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9673 9673 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pi16Val2); 9674 9674 IEM_MC_STORE_FPU_RESULT(FpuRes, 0); 9675 IEM_MC_ELSE()9675 } IEM_MC_ELSE() { 9676 9676 IEM_MC_FPU_STACK_UNDERFLOW(0); 9677 IEM_MC_ENDIF();9677 } IEM_MC_ENDIF(); 9678 9678 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9679 9679 … … 9719 9719 9720 9720 IEM_MC_PREPARE_FPU_USAGE(); 9721 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 9721 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9722 9722 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i16, pu16Fsw, pr80Value1, pi16Val2); 9723 9723 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9724 IEM_MC_ELSE()9724 } IEM_MC_ELSE() { 9725 9725 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9726 IEM_MC_ENDIF();9726 } IEM_MC_ENDIF(); 9727 9727 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9728 9728 … … 9752 9752 9753 9753 IEM_MC_PREPARE_FPU_USAGE(); 9754 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) 9754 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0) { 9755 9755 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i16, pu16Fsw, pr80Value1, pi16Val2); 9756 9756 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9757 IEM_MC_ELSE()9757 } IEM_MC_ELSE() { 9758 9758 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9759 IEM_MC_ENDIF();9759 } IEM_MC_ENDIF(); 9760 9760 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9761 9761 … … 9913 9913 9914 9914 IEM_MC_PREPARE_FPU_USAGE(); 9915 IEM_MC_IF_FPUREG_IS_EMPTY(7) 9915 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 9916 9916 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_r80_from_i16, pFpuRes, pi16Val); 9917 9917 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9918 IEM_MC_ELSE()9918 } IEM_MC_ELSE() { 9919 9919 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 9920 IEM_MC_ENDIF();9920 } IEM_MC_ENDIF(); 9921 9921 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9922 9922 … … 9943 9943 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 9944 9944 IEM_MC_PREPARE_FPU_USAGE(); 9945 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 9945 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9946 9946 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 9947 9947 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 9948 9948 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9949 IEM_MC_ELSE()9950 IEM_MC_IF_FCW_IM() 9949 } IEM_MC_ELSE() { 9950 IEM_MC_IF_FCW_IM() { 9951 9951 IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */); 9952 9952 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 9953 IEM_MC_ENDIF();9953 } IEM_MC_ENDIF(); 9954 9954 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9955 IEM_MC_ENDIF();9955 } IEM_MC_ENDIF(); 9956 9956 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9957 9957 … … 9978 9978 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 9979 9979 IEM_MC_PREPARE_FPU_USAGE(); 9980 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 9980 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 9981 9981 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 9982 9982 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 9983 9983 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9984 IEM_MC_ELSE()9985 IEM_MC_IF_FCW_IM() 9984 } IEM_MC_ELSE() { 9985 IEM_MC_IF_FCW_IM() { 9986 9986 IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */); 9987 9987 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 9988 IEM_MC_ENDIF();9988 } IEM_MC_ENDIF(); 9989 9989 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 9990 IEM_MC_ENDIF();9990 } IEM_MC_ENDIF(); 9991 9991 IEM_MC_ADVANCE_RIP_AND_FINISH(); 9992 9992 … … 10013 10013 IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 10014 10014 IEM_MC_PREPARE_FPU_USAGE(); 10015 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 10015 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10016 10016 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value); 10017 10017 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw); 10018 10018 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10019 IEM_MC_ELSE()10020 IEM_MC_IF_FCW_IM() 10019 } IEM_MC_ELSE() { 10020 IEM_MC_IF_FCW_IM() { 10021 10021 IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */); 10022 10022 IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W); 10023 IEM_MC_ENDIF();10023 } IEM_MC_ENDIF(); 10024 10024 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10025 IEM_MC_ENDIF();10025 } IEM_MC_ENDIF(); 10026 10026 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10027 10027 … … 10050 10050 10051 10051 IEM_MC_PREPARE_FPU_USAGE(); 10052 IEM_MC_IF_FPUREG_IS_EMPTY(7) 10052 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 10053 10053 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fld_r80_from_d80, pFpuRes, pd80Val); 10054 10054 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 10055 IEM_MC_ELSE()10055 } IEM_MC_ELSE() { 10056 10056 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 10057 IEM_MC_ENDIF();10057 } IEM_MC_ENDIF(); 10058 10058 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10059 10059 … … 10082 10082 10083 10083 IEM_MC_PREPARE_FPU_USAGE(); 10084 IEM_MC_IF_FPUREG_IS_EMPTY(7) 10084 IEM_MC_IF_FPUREG_IS_EMPTY(7) { 10085 10085 IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_r80_from_i64, pFpuRes, pi64Val); 10086 10086 IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 10087 IEM_MC_ELSE()10087 } IEM_MC_ELSE() { 10088 10088 IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 10089 IEM_MC_ENDIF();10089 } IEM_MC_ENDIF(); 10090 10090 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10091 10091 … … 10112 10112 IEM_MC_MEM_MAP_EX(pd80Dst, IEM_ACCESS_DATA_W, sizeof(*pd80Dst), pVCpu->iem.s.iEffSeg, GCPtrEffDst, 7 /*cbAlign*/, 1 /*arg*/); 10113 10113 IEM_MC_PREPARE_FPU_USAGE(); 10114 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 10114 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10115 10115 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_d80, pu16Fsw, pd80Dst, pr80Value); 10116 10116 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pd80Dst, IEM_ACCESS_DATA_W, u16Fsw); 10117 10117 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10118 IEM_MC_ELSE()10119 IEM_MC_IF_FCW_IM() 10118 } IEM_MC_ELSE() { 10119 IEM_MC_IF_FCW_IM() { 10120 10120 IEM_MC_STORE_MEM_INDEF_D80_BY_REF(pd80Dst); 10121 10121 IEM_MC_MEM_COMMIT_AND_UNMAP(pd80Dst, IEM_ACCESS_DATA_W); 10122 IEM_MC_ENDIF();10122 } IEM_MC_ENDIF(); 10123 10123 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10124 IEM_MC_ENDIF();10124 } IEM_MC_ENDIF(); 10125 10125 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10126 10126 … … 10147 10147 IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pVCpu->iem.s.iEffSeg, GCPtrEffDst, 1 /*arg*/); 10148 10148 IEM_MC_PREPARE_FPU_USAGE(); 10149 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 10149 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) { 10150 10150 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i64, pu16Fsw, pi64Dst, pr80Value); 10151 10151 IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw); 10152 10152 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10153 IEM_MC_ELSE()10154 IEM_MC_IF_FCW_IM() 10153 } IEM_MC_ELSE() { 10154 IEM_MC_IF_FCW_IM() { 10155 10155 IEM_MC_STORE_MEM_I64_CONST_BY_REF(pi64Dst, INT64_MIN /* (integer indefinite) */); 10156 10156 IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W); 10157 IEM_MC_ENDIF();10157 } IEM_MC_ENDIF(); 10158 10158 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10159 IEM_MC_ENDIF();10159 } IEM_MC_ENDIF(); 10160 10160 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10161 10161 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r98873 r98880 1740 1740 1741 1741 1742 class McStmt(object): 1743 """ 1744 Statement in a microcode block. 1745 """ 1746 1747 def __init__(self, sName, asParams): 1748 self.sName = sName; ##< 'IEM_MC_XXX' or 'C++'. 1749 self.asParams = asParams; 1750 self.oUser = None; 1751 1752 def renderCode(self, cchIndent = 0): 1753 """ 1754 Renders the code for the statement. 1755 """ 1756 return ' ' * cchIndent + self.sName + '(' + ', '.join(self.asParams) + ');'; 1757 1758 class McStmtCond(McStmt): 1759 """ Base class for conditional statements (IEM_MC_IF_XXX). """ 1760 1761 def __init__(self, sName, asParams): 1762 McStmt.__init__(self, sName, asParams); 1763 self.aoIfBranch = []; 1764 self.aoElseBranch = []; 1765 1766 def renderCode(self, cchIndent = 0): 1767 sRet = ' ' * cchIndent + self.sName + '(' + ', '.join(self.asParams) + ') {\n'; 1768 for oStmt in self.aoIfBranch: 1769 sRet += oStmt.renderCode(cchIndent + 4); 1770 if self.aoElseBranch: 1771 sRet += ' ' * cchIndent + '} IEM_MC_ELSE() {\n'; 1772 for oStmt in self.aoElseBranch: 1773 sRet += oStmt.renderCode(cchIndent + 4); 1774 sRet += ' ' * cchIndent + '} IEM_MC_ENDIF();'; 1775 return sRet; 1776 1777 class McCppGeneric(McStmt): 1778 """ 1779 Generic C++/C statement. 1780 """ 1781 1782 def __init__(self, sCode): 1783 McStmt.__init__(self, 'C++', [sCode,]); 1784 1785 def renderCode(self, cchIndent = 0): 1786 return ' ' * cchIndent + self.asParams[0]; 1787 1788 #class McLocalVar(McStmt): 1789 # 1790 # def __init__(self, sRaw, , ): 1791 1742 1792 1743 1793 class McBlock(object): … … 1755 1805 self.iInFunction = iInFunction; ##< The block number wihtin the function. 1756 1806 self.asLines = [] # type: list(str) ##< The raw lines the block is made up of. 1807 ## Decoded statements in the block. 1808 self.aoStmts = [] # type: list(McStmt) 1757 1809 1758 1810 def complete(self, iEndLine, offEndLine, asLines): … … 1765 1817 self.asLines = asLines; 1766 1818 1819 def raiseDecodeError(self, sRawCode, off, sMessage): 1820 """ Raises a decoding error. """ 1821 offStartOfLine = sRawCode.rfind('\n', 0, off) + 1; 1822 iLine = sRawCode.count('\n', 0, off); 1823 raise ParserException('%s:%d:%d: parsing error: %s' 1824 % (self.sSrcFile, self.iBeginLine + iLine, off - offStartOfLine + 1, sMessage,)); 1825 @staticmethod 1826 def parseMcGeneric(oSelf, sName, asParams): 1827 """ Generic parser that returns a plain McStmt object. """ 1828 _ = oSelf; 1829 return McStmt(sName, asParams); 1830 1831 @staticmethod 1832 def parseMcGenericCond(oSelf, sName, asParams): 1833 """ Generic parser that returns a plain McStmtCond object. """ 1834 _ = oSelf; 1835 return McStmtCond(sName, asParams); 1836 1837 @staticmethod 1838 def parseMcBegin(oSelf, sName, asParams): 1839 """ IEM_MC_BEGIN """ 1840 return McBlock.parseMcGeneric(oSelf, sName, asParams); 1841 1842 @staticmethod 1843 def stripComments(sCode): 1844 """ Returns sCode with comments removed. """ 1845 off = 0; 1846 while off < len(sCode): 1847 off = sCode.find('/', off); 1848 if off < 0 or off + 1 >= len(sCode): 1849 break; 1850 1851 if sCode[off + 1] == '/': 1852 # C++ comment. 1853 offEnd = sCode.find('\n', off + 2); 1854 if offEnd < 0: 1855 return sCode[:off].rstrip(); 1856 sCode = sCode[ : off] + sCode[offEnd : ]; 1857 off += 1; 1858 1859 elif sCode[off + 1] == '*': 1860 # C comment 1861 offEnd = sCode.find('*/', off + 2); 1862 if offEnd < 0: 1863 return sCode[:off].rstrip(); 1864 sSep = ' '; 1865 if (off > 0 and sCode[off - 1].isspace()) or (offEnd + 2 < len(sCode) and sCode[offEnd + 2].isspace()): 1866 sSep = ''; 1867 sCode = sCode[ : off] + sSep + sCode[offEnd + 2 : ]; 1868 off += len(sSep); 1869 1870 else: 1871 # Not a comment. 1872 off += 1; 1873 return sCode; 1874 1875 @staticmethod 1876 def extractParam(sCode, offParam): 1877 """ 1878 Extracts the parameter value at offParam in sCode. 1879 Returns stripped value and the end offset of the terminating ',' or ')'. 1880 """ 1881 # Extract it. 1882 cNesting = 0; 1883 offStart = offParam; 1884 while offParam < len(sCode): 1885 ch = sCode[offParam]; 1886 if ch == '(': 1887 cNesting += 1; 1888 elif ch == ')': 1889 if cNesting == 0: 1890 break; 1891 cNesting -= 1; 1892 elif ch == ',' and cNesting == 0: 1893 break; 1894 offParam += 1; 1895 return (sCode[offStart : offParam].strip(), offParam); 1896 1897 @staticmethod 1898 def extractParams(sCode, offOpenParen): 1899 """ 1900 Parses a parameter list. 1901 Returns the list of parameter values and the offset of the closing parentheses. 1902 Returns (None, len(sCode)) on if no closing parentheses was found. 1903 """ 1904 assert sCode[offOpenParen] == '('; 1905 asParams = []; 1906 off = offOpenParen + 1; 1907 while off < len(sCode): 1908 ch = sCode[off]; 1909 if ch.isspace(): 1910 off += 1; 1911 elif ch != ')': 1912 (sParam, off) = McBlock.extractParam(sCode, off); 1913 asParams.append(sParam); 1914 assert off < len(sCode), 'off=%s sCode=%s:"%s"' % (off, len(sCode), sCode,); 1915 if sCode[off] == ',': 1916 off += 1; 1917 else: 1918 return (asParams, off); 1919 return (None, off); 1920 1921 @staticmethod 1922 def findClosingBraces(sCode, off, offStop): 1923 """ 1924 Finds the matching '}' for the '{' at off in sCode. 1925 Returns offset of the matching '}' on success, otherwise -1. 1926 1927 Note! Does not take comments into account. 1928 """ 1929 cDepth = 1; 1930 off += 1; 1931 while off < offStop: 1932 offClose = sCode.find('}', off, offStop); 1933 if offClose < 0: 1934 break; 1935 cDepth += sCode.count('{', off, offClose); 1936 cDepth -= 1; 1937 if cDepth == 0: 1938 return offClose; 1939 off = offClose + 1; 1940 return -1; 1941 1942 @staticmethod 1943 def countSpacesAt(sCode, off, offStop): 1944 """ Returns the number of space characters at off in sCode. """ 1945 offStart = off; 1946 while off < offStop and sCode[off].isspace(): 1947 off += 1; 1948 return off - offStart; 1949 1950 @staticmethod 1951 def skipSpacesAt(sCode, off, offStop): 1952 """ Returns first offset at or after off for a non-space character. """ 1953 return off + McBlock.countSpacesAt(sCode, off, offStop); 1954 1955 @staticmethod 1956 def isSubstrAt(sStr, off, sSubStr): 1957 """ Returns true of sSubStr is found at off in sStr. """ 1958 return sStr[off : off + len(sSubStr)] == sSubStr; 1959 1960 def decodeCode(self, sRawCode, off = 0, offStop = -1, iLevel = 0): 1961 """ 1962 Decodes sRawCode[off : offStop]. 1963 1964 Returns list of McStmt instances. 1965 Raises ParserException on failure. 1966 """ 1967 if offStop < 0: 1968 offStop = len(sRawCode); 1969 aoStmts = []; 1970 while off < offStop: 1971 ch = sRawCode[off]; 1972 1973 # 1974 # Skip spaces and comments. 1975 # 1976 if ch.isspace(): 1977 off += 1; 1978 1979 elif ch == '/': 1980 ch = sRawCode[off + 1]; 1981 if ch == '/': # C++ comment. 1982 off = sRawCode.find('\n', off + 2); 1983 if off < 0: 1984 break; 1985 off += 1; 1986 elif ch == '*': # C comment. 1987 off = sRawCode.find('*/', off + 2); 1988 if off < 0: 1989 break; 1990 off += 2; 1991 else: 1992 self.raiseDecodeError(sRawCode, off, 'Unexpected "/"'); 1993 1994 # 1995 # Is it a MC statement. 1996 # 1997 elif ch == 'I' and sRawCode[off : off + len('IEM_MC_')] == 'IEM_MC_': 1998 # All MC statements ends with a semicolon, except for conditionals which ends with a '{'. 1999 # Extract it and strip comments from it. 2000 if not self.isSubstrAt(sRawCode, off, 'IEM_MC_IF_'): 2001 offEnd = sRawCode.find(';', off + len('IEM_MC_')); 2002 if offEnd <= off: 2003 self.raiseDecodeError(sRawCode, off, 'MC statement without a ";"'); 2004 else: 2005 offEnd = sRawCode.find('{', off + len('IEM_MC_IF_')); 2006 if offEnd <= off: 2007 self.raiseDecodeError(sRawCode, off, 'MC conditional statement without a "{"'); 2008 if sRawCode.find(';', off + len('IEM_MC_IF_'), offEnd) > off: 2009 self.raiseDecodeError(sRawCode, off, 'MC conditional statement without an immediate "{"'); 2010 offEnd -= 1; 2011 while offEnd > off and sRawCode[offEnd - 1].isspace(): 2012 offEnd -= 1; 2013 2014 sRawStmt = self.stripComments(sRawCode[off : offEnd]); 2015 2016 # Isolate the statement name. 2017 offOpenParen = sRawStmt.find('('); 2018 if offOpenParen < 0: 2019 self.raiseDecodeError(sRawCode, off, 'MC statement without a "("'); 2020 sName = sRawStmt[: offOpenParen].strip(); 2021 2022 # Extract the parameters. 2023 (asParams, offCloseParen) = self.extractParams(sRawStmt, offOpenParen); 2024 if asParams is None: 2025 self.raiseDecodeError(sRawCode, off, 'MC statement without a closing parenthesis'); 2026 if offCloseParen + 1 != len(sRawStmt): 2027 self.raiseDecodeError(sRawCode, off, 2028 'Unexpected code following MC statement: %s' % (sRawStmt[offCloseParen + 1:])); 2029 2030 # Hand it to the handler. 2031 fnParser = g_dMcStmtParsers.get(sName); 2032 if not fnParser: 2033 self.raiseDecodeError(sRawCode, off, 'Unknown MC statement: %s' % (sName,)); 2034 oStmt = fnParser(self, sName, asParams); 2035 aoStmts.append(oStmt); 2036 2037 # 2038 # If conditional, we need to parse the whole statement. 2039 # 2040 # For reasons of simplicity, we assume the following structure 2041 # and parse each branch in a recursive call: 2042 # IEM_MC_IF_XXX() { 2043 # IEM_MC_WHATEVER(); 2044 # } IEM_MC_ELSE() { 2045 # IEM_MC_WHATEVER(); 2046 # } IEM_MC_ENDIF(); 2047 # 2048 if sName.startswith('IEM_MC_IF_'): 2049 if iLevel > 1: 2050 self.raiseDecodeError(sRawCode, off, 'Too deep nesting of conditionals.'); 2051 2052 # Find start of the IF block: 2053 offBlock1 = self.skipSpacesAt(sRawCode, offEnd, offStop); 2054 if sRawCode[offBlock1] != '{': 2055 self.raiseDecodeError(sRawCode, offBlock1, 'Expected "{" following %s' % (sName,)); 2056 2057 # Find the end of it. 2058 offBlock1End = self.findClosingBraces(sRawCode, offBlock1, offStop); 2059 if offBlock1End < 0: 2060 self.raiseDecodeError(sRawCode, offBlock1, 'No matching "}" closing IF block of %s' % (sName,)); 2061 2062 oStmt.aoIfBranch = self.decodeCode(sRawCode, offBlock1 + 1, offBlock1End, iLevel + 1); 2063 2064 # Is there an else section? 2065 off = self.skipSpacesAt(sRawCode, offBlock1End + 1, offStop); 2066 if self.isSubstrAt(sRawCode, off, 'IEM_MC_ELSE'): 2067 off = self.skipSpacesAt(sRawCode, off + len('IEM_MC_ELSE'), offStop); 2068 if sRawCode[off] != '(': 2069 self.raiseDecodeError(sRawCode, off, 'Expected "(" following IEM_MC_ELSE"'); 2070 off = self.skipSpacesAt(sRawCode, off + 1, offStop); 2071 if sRawCode[off] != ')': 2072 self.raiseDecodeError(sRawCode, off, 'Expected ")" following IEM_MC_ELSE("'); 2073 2074 # Find start of the ELSE block. 2075 offBlock2 = self.skipSpacesAt(sRawCode, off + 1, offStop); 2076 if sRawCode[offBlock2] != '{': 2077 self.raiseDecodeError(sRawCode, offBlock2, 'Expected "{" following IEM_MC_ELSE()"'); 2078 2079 # Find the end of it. 2080 offBlock2End = self.findClosingBraces(sRawCode, offBlock2, offStop); 2081 if offBlock2End < 0: 2082 self.raiseDecodeError(sRawCode, offBlock2, 'No matching "}" closing ELSE block of %s' % (sName,)); 2083 2084 oStmt.aoElseBranch = self.decodeCode(sRawCode, offBlock2 + 1, offBlock2End, iLevel + 1); 2085 off = self.skipSpacesAt(sRawCode, offBlock2End + 1, offStop); 2086 2087 # Parse past the endif statement. 2088 if not self.isSubstrAt(sRawCode, off, 'IEM_MC_ENDIF'): 2089 self.raiseDecodeError(sRawCode, off, 'Expected IEM_MC_ENDIF for closing %s' % (sName,)); 2090 off = self.skipSpacesAt(sRawCode, off + len('IEM_MC_ENDIF'), offStop); 2091 if sRawCode[off] != '(': 2092 self.raiseDecodeError(sRawCode, off, 'Expected "(" following IEM_MC_ENDIF"'); 2093 off = self.skipSpacesAt(sRawCode, off + 1, offStop); 2094 if sRawCode[off] != ')': 2095 self.raiseDecodeError(sRawCode, off, 'Expected ")" following IEM_MC_ENDIF("'); 2096 off = self.skipSpacesAt(sRawCode, off + 1, offStop); 2097 if sRawCode[off] != ';': 2098 self.raiseDecodeError(sRawCode, off, 'Expected ";" following IEM_MC_ENDIF()"'); 2099 off += 1; 2100 2101 else: 2102 # Advance. 2103 off = offEnd + 1; 2104 2105 # 2106 # Otherwise it must be a C/C++ statement of sorts. 2107 # 2108 else: 2109 offEnd = sRawCode.find(';', off); 2110 if offEnd < 0: 2111 self.raiseDecodeError(sRawCode, off, 'C++ statement without a ";"'); 2112 aoStmts.append(McCppGeneric(sRawCode[off : offEnd + 1])); 2113 off = offEnd + 1; 2114 return aoStmts; 2115 2116 2117 def decode(self): 2118 """ 2119 Decodes the block, populating self.aoStmts. 2120 Returns the statement list. 2121 Raises ParserException on failure. 2122 """ 2123 self.aoStmts = self.decodeCode(''.join(self.asLines)); 2124 return self.aoStmts; 2125 2126 2127 ## IEM_MC_XXX -> parser dictionary. 2128 # The raw table was generated via the following command 2129 # sed -n -e "s/^# *define *\(IEM_MC_[A-Z_0-9]*\)[ (].*$/ '\1': McBlock.parseMcGeneric,/p" include/IEMMc.h \ 2130 # | sort | uniq | gawk "{printf """ %%-60s %%s\n""", $1, $2}" 2131 g_dMcStmtParsers = { 2132 'IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE': McBlock.parseMcGeneric, 2133 'IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ': McBlock.parseMcGeneric, 2134 'IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE': McBlock.parseMcGeneric, 2135 'IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ': McBlock.parseMcGeneric, 2136 'IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE': McBlock.parseMcGeneric, 2137 'IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ': McBlock.parseMcGeneric, 2138 'IEM_MC_ADD_GREG_U16': McBlock.parseMcGeneric, 2139 'IEM_MC_ADD_GREG_U16_TO_LOCAL': McBlock.parseMcGeneric, 2140 'IEM_MC_ADD_GREG_U32': McBlock.parseMcGeneric, 2141 'IEM_MC_ADD_GREG_U32_TO_LOCAL': McBlock.parseMcGeneric, 2142 'IEM_MC_ADD_GREG_U64': McBlock.parseMcGeneric, 2143 'IEM_MC_ADD_GREG_U64_TO_LOCAL': McBlock.parseMcGeneric, 2144 'IEM_MC_ADD_GREG_U8': McBlock.parseMcGeneric, 2145 'IEM_MC_ADD_GREG_U8_TO_LOCAL': McBlock.parseMcGeneric, 2146 'IEM_MC_ADD_LOCAL_S16_TO_EFF_ADDR': McBlock.parseMcGeneric, 2147 'IEM_MC_ADD_LOCAL_S32_TO_EFF_ADDR': McBlock.parseMcGeneric, 2148 'IEM_MC_ADD_LOCAL_S64_TO_EFF_ADDR': McBlock.parseMcGeneric, 2149 'IEM_MC_ADVANCE_RIP_AND_FINISH': McBlock.parseMcGeneric, 2150 'IEM_MC_AND_2LOCS_U32': McBlock.parseMcGeneric, 2151 'IEM_MC_AND_ARG_U16': McBlock.parseMcGeneric, 2152 'IEM_MC_AND_ARG_U32': McBlock.parseMcGeneric, 2153 'IEM_MC_AND_ARG_U64': McBlock.parseMcGeneric, 2154 'IEM_MC_AND_GREG_U16': McBlock.parseMcGeneric, 2155 'IEM_MC_AND_GREG_U32': McBlock.parseMcGeneric, 2156 'IEM_MC_AND_GREG_U64': McBlock.parseMcGeneric, 2157 'IEM_MC_AND_GREG_U8': McBlock.parseMcGeneric, 2158 'IEM_MC_AND_LOCAL_U16': McBlock.parseMcGeneric, 2159 'IEM_MC_AND_LOCAL_U32': McBlock.parseMcGeneric, 2160 'IEM_MC_AND_LOCAL_U64': McBlock.parseMcGeneric, 2161 'IEM_MC_AND_LOCAL_U8': McBlock.parseMcGeneric, 2162 'IEM_MC_ARG': McBlock.parseMcGeneric, 2163 'IEM_MC_ARG_CONST': McBlock.parseMcGeneric, 2164 'IEM_MC_ARG_LOCAL_EFLAGS': McBlock.parseMcGeneric, 2165 'IEM_MC_ARG_LOCAL_REF': McBlock.parseMcGeneric, 2166 'IEM_MC_ASSIGN': McBlock.parseMcGeneric, 2167 'IEM_MC_ASSIGN_TO_SMALLER': McBlock.parseMcGeneric, 2168 'IEM_MC_BEGIN': McBlock.parseMcGeneric, 2169 'IEM_MC_BSWAP_LOCAL_U16': McBlock.parseMcGeneric, 2170 'IEM_MC_BSWAP_LOCAL_U32': McBlock.parseMcGeneric, 2171 'IEM_MC_BSWAP_LOCAL_U64': McBlock.parseMcGeneric, 2172 'IEM_MC_CALC_RM_EFF_ADDR': McBlock.parseMcGeneric, 2173 'IEM_MC_CALL_AIMPL_3': McBlock.parseMcGeneric, 2174 'IEM_MC_CALL_AIMPL_4': McBlock.parseMcGeneric, 2175 'IEM_MC_CALL_AVX_AIMPL_2': McBlock.parseMcGeneric, 2176 'IEM_MC_CALL_AVX_AIMPL_3': McBlock.parseMcGeneric, 2177 'IEM_MC_CALL_CIMPL_0': McBlock.parseMcGeneric, 2178 'IEM_MC_CALL_CIMPL_1': McBlock.parseMcGeneric, 2179 'IEM_MC_CALL_CIMPL_2': McBlock.parseMcGeneric, 2180 'IEM_MC_CALL_CIMPL_3': McBlock.parseMcGeneric, 2181 'IEM_MC_CALL_CIMPL_4': McBlock.parseMcGeneric, 2182 'IEM_MC_CALL_CIMPL_5': McBlock.parseMcGeneric, 2183 'IEM_MC_CALL_FPU_AIMPL_1': McBlock.parseMcGeneric, 2184 'IEM_MC_CALL_FPU_AIMPL_2': McBlock.parseMcGeneric, 2185 'IEM_MC_CALL_FPU_AIMPL_3': McBlock.parseMcGeneric, 2186 'IEM_MC_CALL_MMX_AIMPL_2': McBlock.parseMcGeneric, 2187 'IEM_MC_CALL_MMX_AIMPL_3': McBlock.parseMcGeneric, 2188 'IEM_MC_CALL_SSE_AIMPL_2': McBlock.parseMcGeneric, 2189 'IEM_MC_CALL_SSE_AIMPL_3': McBlock.parseMcGeneric, 2190 'IEM_MC_CALL_VOID_AIMPL_0': McBlock.parseMcGeneric, 2191 'IEM_MC_CALL_VOID_AIMPL_1': McBlock.parseMcGeneric, 2192 'IEM_MC_CALL_VOID_AIMPL_2': McBlock.parseMcGeneric, 2193 'IEM_MC_CALL_VOID_AIMPL_3': McBlock.parseMcGeneric, 2194 'IEM_MC_CALL_VOID_AIMPL_4': McBlock.parseMcGeneric, 2195 'IEM_MC_CLEAR_EFL_BIT': McBlock.parseMcGeneric, 2196 'IEM_MC_CLEAR_FSW_EX': McBlock.parseMcGeneric, 2197 'IEM_MC_CLEAR_HIGH_GREG_U64': McBlock.parseMcGeneric, 2198 'IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF': McBlock.parseMcGeneric, 2199 'IEM_MC_CLEAR_XREG_U32_MASK': McBlock.parseMcGeneric, 2200 'IEM_MC_CLEAR_YREG_128_UP': McBlock.parseMcGeneric, 2201 'IEM_MC_COMMIT_EFLAGS': McBlock.parseMcGeneric, 2202 'IEM_MC_COPY_XREG_U128': McBlock.parseMcGeneric, 2203 'IEM_MC_COPY_YREG_U128_ZX_VLMAX': McBlock.parseMcGeneric, 2204 'IEM_MC_COPY_YREG_U256_ZX_VLMAX': McBlock.parseMcGeneric, 2205 'IEM_MC_COPY_YREG_U64_ZX_VLMAX': McBlock.parseMcGeneric, 2206 'IEM_MC_DEFER_TO_CIMPL_0': McBlock.parseMcGeneric, 2207 'IEM_MC_DEFER_TO_CIMPL_1': McBlock.parseMcGeneric, 2208 'IEM_MC_DEFER_TO_CIMPL_2': McBlock.parseMcGeneric, 2209 'IEM_MC_DEFER_TO_CIMPL_3': McBlock.parseMcGeneric, 2210 'IEM_MC_END': McBlock.parseMcGeneric, 2211 'IEM_MC_FETCH_EFLAGS': McBlock.parseMcGeneric, 2212 'IEM_MC_FETCH_EFLAGS_U8': McBlock.parseMcGeneric, 2213 'IEM_MC_FETCH_FCW': McBlock.parseMcGeneric, 2214 'IEM_MC_FETCH_FSW': McBlock.parseMcGeneric, 2215 'IEM_MC_FETCH_GREG_U16': McBlock.parseMcGeneric, 2216 'IEM_MC_FETCH_GREG_U16_SX_U32': McBlock.parseMcGeneric, 2217 'IEM_MC_FETCH_GREG_U16_SX_U64': McBlock.parseMcGeneric, 2218 'IEM_MC_FETCH_GREG_U16_ZX_U32': McBlock.parseMcGeneric, 2219 'IEM_MC_FETCH_GREG_U16_ZX_U64': McBlock.parseMcGeneric, 2220 'IEM_MC_FETCH_GREG_U32': McBlock.parseMcGeneric, 2221 'IEM_MC_FETCH_GREG_U32_SX_U64': McBlock.parseMcGeneric, 2222 'IEM_MC_FETCH_GREG_U32_ZX_U64': McBlock.parseMcGeneric, 2223 'IEM_MC_FETCH_GREG_U64': McBlock.parseMcGeneric, 2224 'IEM_MC_FETCH_GREG_U64_ZX_U64': McBlock.parseMcGeneric, 2225 'IEM_MC_FETCH_GREG_U8': McBlock.parseMcGeneric, 2226 'IEM_MC_FETCH_GREG_U8_SX_U16': McBlock.parseMcGeneric, 2227 'IEM_MC_FETCH_GREG_U8_SX_U32': McBlock.parseMcGeneric, 2228 'IEM_MC_FETCH_GREG_U8_SX_U64': McBlock.parseMcGeneric, 2229 'IEM_MC_FETCH_GREG_U8_ZX_U16': McBlock.parseMcGeneric, 2230 'IEM_MC_FETCH_GREG_U8_ZX_U32': McBlock.parseMcGeneric, 2231 'IEM_MC_FETCH_GREG_U8_ZX_U64': McBlock.parseMcGeneric, 2232 'IEM_MC_FETCH_MEM_D80': McBlock.parseMcGeneric, 2233 'IEM_MC_FETCH_MEM_I16': McBlock.parseMcGeneric, 2234 'IEM_MC_FETCH_MEM_I32': McBlock.parseMcGeneric, 2235 'IEM_MC_FETCH_MEM_I64': McBlock.parseMcGeneric, 2236 'IEM_MC_FETCH_MEM_R32': McBlock.parseMcGeneric, 2237 'IEM_MC_FETCH_MEM_R64': McBlock.parseMcGeneric, 2238 'IEM_MC_FETCH_MEM_R80': McBlock.parseMcGeneric, 2239 'IEM_MC_FETCH_MEM_S32_SX_U64': McBlock.parseMcGeneric, 2240 'IEM_MC_FETCH_MEM_U128': McBlock.parseMcGeneric, 2241 'IEM_MC_FETCH_MEM_U128_ALIGN_SSE': McBlock.parseMcGeneric, 2242 'IEM_MC_FETCH_MEM_U128_NO_AC': McBlock.parseMcGeneric, 2243 'IEM_MC_FETCH_MEM_U16': McBlock.parseMcGeneric, 2244 'IEM_MC_FETCH_MEM_U16_DISP': McBlock.parseMcGeneric, 2245 'IEM_MC_FETCH_MEM_U16_SX_U32': McBlock.parseMcGeneric, 2246 'IEM_MC_FETCH_MEM_U16_SX_U64': McBlock.parseMcGeneric, 2247 'IEM_MC_FETCH_MEM_U16_ZX_U32': McBlock.parseMcGeneric, 2248 'IEM_MC_FETCH_MEM_U16_ZX_U64': McBlock.parseMcGeneric, 2249 'IEM_MC_FETCH_MEM_U256': McBlock.parseMcGeneric, 2250 'IEM_MC_FETCH_MEM_U256_ALIGN_AVX': McBlock.parseMcGeneric, 2251 'IEM_MC_FETCH_MEM_U256_NO_AC': McBlock.parseMcGeneric, 2252 'IEM_MC_FETCH_MEM_U32': McBlock.parseMcGeneric, 2253 'IEM_MC_FETCH_MEM_U32_DISP': McBlock.parseMcGeneric, 2254 'IEM_MC_FETCH_MEM_U32_SX_U64': McBlock.parseMcGeneric, 2255 'IEM_MC_FETCH_MEM_U32_ZX_U64': McBlock.parseMcGeneric, 2256 'IEM_MC_FETCH_MEM_U64': McBlock.parseMcGeneric, 2257 'IEM_MC_FETCH_MEM_U64_ALIGN_U128': McBlock.parseMcGeneric, 2258 'IEM_MC_FETCH_MEM_U64_DISP': McBlock.parseMcGeneric, 2259 'IEM_MC_FETCH_MEM_U8': McBlock.parseMcGeneric, 2260 'IEM_MC_FETCH_MEM_U8_SX_U16': McBlock.parseMcGeneric, 2261 'IEM_MC_FETCH_MEM_U8_SX_U32': McBlock.parseMcGeneric, 2262 'IEM_MC_FETCH_MEM_U8_SX_U64': McBlock.parseMcGeneric, 2263 'IEM_MC_FETCH_MEM_U8_ZX_U16': McBlock.parseMcGeneric, 2264 'IEM_MC_FETCH_MEM_U8_ZX_U32': McBlock.parseMcGeneric, 2265 'IEM_MC_FETCH_MEM_U8_ZX_U64': McBlock.parseMcGeneric, 2266 'IEM_MC_FETCH_MEM_XMM': McBlock.parseMcGeneric, 2267 'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE': McBlock.parseMcGeneric, 2268 'IEM_MC_FETCH_MEM_XMM_NO_AC': McBlock.parseMcGeneric, 2269 'IEM_MC_FETCH_MEM_XMM_U32': McBlock.parseMcGeneric, 2270 'IEM_MC_FETCH_MEM_XMM_U64': McBlock.parseMcGeneric, 2271 'IEM_MC_FETCH_MEM_YMM': McBlock.parseMcGeneric, 2272 'IEM_MC_FETCH_MEM_YMM_ALIGN_AVX': McBlock.parseMcGeneric, 2273 'IEM_MC_FETCH_MEM_YMM_NO_AC': McBlock.parseMcGeneric, 2274 'IEM_MC_FETCH_MEM16_U8': McBlock.parseMcGeneric, 2275 'IEM_MC_FETCH_MEM32_U8': McBlock.parseMcGeneric, 2276 'IEM_MC_FETCH_MREG_U32': McBlock.parseMcGeneric, 2277 'IEM_MC_FETCH_MREG_U64': McBlock.parseMcGeneric, 2278 'IEM_MC_FETCH_SREG_BASE_U32': McBlock.parseMcGeneric, 2279 'IEM_MC_FETCH_SREG_BASE_U64': McBlock.parseMcGeneric, 2280 'IEM_MC_FETCH_SREG_U16': McBlock.parseMcGeneric, 2281 'IEM_MC_FETCH_SREG_ZX_U32': McBlock.parseMcGeneric, 2282 'IEM_MC_FETCH_SREG_ZX_U64': McBlock.parseMcGeneric, 2283 'IEM_MC_FETCH_XREG_U128': McBlock.parseMcGeneric, 2284 'IEM_MC_FETCH_XREG_U16': McBlock.parseMcGeneric, 2285 'IEM_MC_FETCH_XREG_U32': McBlock.parseMcGeneric, 2286 'IEM_MC_FETCH_XREG_U64': McBlock.parseMcGeneric, 2287 'IEM_MC_FETCH_XREG_U8': McBlock.parseMcGeneric, 2288 'IEM_MC_FETCH_XREG_XMM': McBlock.parseMcGeneric, 2289 'IEM_MC_FETCH_YREG_2ND_U64': McBlock.parseMcGeneric, 2290 'IEM_MC_FETCH_YREG_U128': McBlock.parseMcGeneric, 2291 'IEM_MC_FETCH_YREG_U256': McBlock.parseMcGeneric, 2292 'IEM_MC_FETCH_YREG_U32': McBlock.parseMcGeneric, 2293 'IEM_MC_FETCH_YREG_U64': McBlock.parseMcGeneric, 2294 'IEM_MC_FLIP_EFL_BIT': McBlock.parseMcGeneric, 2295 'IEM_MC_FPU_FROM_MMX_MODE': McBlock.parseMcGeneric, 2296 'IEM_MC_FPU_STACK_DEC_TOP': McBlock.parseMcGeneric, 2297 'IEM_MC_FPU_STACK_FREE': McBlock.parseMcGeneric, 2298 'IEM_MC_FPU_STACK_INC_TOP': McBlock.parseMcGeneric, 2299 'IEM_MC_FPU_STACK_PUSH_OVERFLOW': McBlock.parseMcGeneric, 2300 'IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP': McBlock.parseMcGeneric, 2301 'IEM_MC_FPU_STACK_PUSH_UNDERFLOW': McBlock.parseMcGeneric, 2302 'IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO': McBlock.parseMcGeneric, 2303 'IEM_MC_FPU_STACK_UNDERFLOW': McBlock.parseMcGeneric, 2304 'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP': McBlock.parseMcGeneric, 2305 'IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP': McBlock.parseMcGeneric, 2306 'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP': McBlock.parseMcGeneric, 2307 'IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP': McBlock.parseMcGeneric, 2308 'IEM_MC_FPU_TO_MMX_MODE': McBlock.parseMcGeneric, 2309 'IEM_MC_IF_CX_IS_NZ': McBlock.parseMcGenericCond, 2310 'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond, 2311 'IEM_MC_IF_CX_IS_NZ_AND_EFL_BIT_SET': McBlock.parseMcGenericCond, 2312 'IEM_MC_IF_ECX_IS_NZ': McBlock.parseMcGenericCond, 2313 'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond, 2314 'IEM_MC_IF_ECX_IS_NZ_AND_EFL_BIT_SET': McBlock.parseMcGenericCond, 2315 'IEM_MC_IF_EFL_ANY_BITS_SET': McBlock.parseMcGenericCond, 2316 'IEM_MC_IF_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond, 2317 'IEM_MC_IF_EFL_BIT_NOT_SET_AND_BITS_EQ': McBlock.parseMcGenericCond, 2318 'IEM_MC_IF_EFL_BIT_SET': McBlock.parseMcGenericCond, 2319 'IEM_MC_IF_EFL_BIT_SET_OR_BITS_NE': McBlock.parseMcGenericCond, 2320 'IEM_MC_IF_EFL_BITS_EQ': McBlock.parseMcGenericCond, 2321 'IEM_MC_IF_EFL_BITS_NE': McBlock.parseMcGenericCond, 2322 'IEM_MC_IF_EFL_NO_BITS_SET': McBlock.parseMcGenericCond, 2323 'IEM_MC_IF_FCW_IM': McBlock.parseMcGenericCond, 2324 'IEM_MC_IF_FPUREG_IS_EMPTY': McBlock.parseMcGenericCond, 2325 'IEM_MC_IF_FPUREG_NOT_EMPTY': McBlock.parseMcGenericCond, 2326 'IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80': McBlock.parseMcGenericCond, 2327 'IEM_MC_IF_GREG_BIT_SET': McBlock.parseMcGenericCond, 2328 'IEM_MC_IF_LOCAL_IS_Z': McBlock.parseMcGenericCond, 2329 'IEM_MC_IF_MXCSR_XCPT_PENDING': McBlock.parseMcGenericCond, 2330 'IEM_MC_IF_RCX_IS_NZ': McBlock.parseMcGenericCond, 2331 'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_NOT_SET': McBlock.parseMcGenericCond, 2332 'IEM_MC_IF_RCX_IS_NZ_AND_EFL_BIT_SET': McBlock.parseMcGenericCond, 2333 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80': McBlock.parseMcGenericCond, 2334 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST': McBlock.parseMcGenericCond, 2335 'IEM_MC_IMPLICIT_AVX_AIMPL_ARGS': McBlock.parseMcGeneric, 2336 'IEM_MC_INT_CLEAR_ZMM_256_UP': McBlock.parseMcGeneric, 2337 'IEM_MC_LOCAL': McBlock.parseMcGeneric, 2338 'IEM_MC_LOCAL_CONST': McBlock.parseMcGeneric, 2339 'IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT': McBlock.parseMcGeneric, 2340 'IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT': McBlock.parseMcGeneric, 2341 'IEM_MC_MAYBE_RAISE_AVX2_RELATED_XCPT': McBlock.parseMcGeneric, 2342 'IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE': McBlock.parseMcGeneric, 2343 'IEM_MC_MAYBE_RAISE_FPU_XCPT': McBlock.parseMcGeneric, 2344 'IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT': McBlock.parseMcGeneric, 2345 'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT': McBlock.parseMcGeneric, 2346 'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_CHECK_SSE_OR_MMXEXT': McBlock.parseMcGeneric, 2347 'IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT_EX': McBlock.parseMcGeneric, 2348 'IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0': McBlock.parseMcGeneric, 2349 'IEM_MC_MAYBE_RAISE_PCLMUL_RELATED_XCPT': McBlock.parseMcGeneric, 2350 'IEM_MC_MAYBE_RAISE_SHA_RELATED_XCPT': McBlock.parseMcGeneric, 2351 'IEM_MC_MAYBE_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT': McBlock.parseMcGeneric, 2352 'IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT': McBlock.parseMcGeneric, 2353 'IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT': McBlock.parseMcGeneric, 2354 'IEM_MC_MAYBE_RAISE_SSE3_RELATED_XCPT': McBlock.parseMcGeneric, 2355 'IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT': McBlock.parseMcGeneric, 2356 'IEM_MC_MAYBE_RAISE_SSE42_RELATED_XCPT': McBlock.parseMcGeneric, 2357 'IEM_MC_MAYBE_RAISE_SSSE3_RELATED_XCPT': McBlock.parseMcGeneric, 2358 'IEM_MC_MAYBE_RAISE_WAIT_DEVICE_NOT_AVAILABLE': McBlock.parseMcGeneric, 2359 'IEM_MC_MEM_COMMIT_AND_UNMAP': McBlock.parseMcGeneric, 2360 'IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE': McBlock.parseMcGeneric, 2361 'IEM_MC_MEM_MAP': McBlock.parseMcGeneric, 2362 'IEM_MC_MEM_MAP_EX': McBlock.parseMcGeneric, 2363 'IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX': McBlock.parseMcGeneric, 2364 'IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX': McBlock.parseMcGeneric, 2365 'IEM_MC_MERGE_YREG_U64HI_U64HI_ZX_VLMAX': McBlock.parseMcGeneric, 2366 'IEM_MC_MERGE_YREG_U64LO_U64LO_ZX_VLMAX': McBlock.parseMcGeneric, 2367 'IEM_MC_MERGE_YREG_U64LO_U64LOCAL_ZX_VLMAX': McBlock.parseMcGeneric, 2368 'IEM_MC_MERGE_YREG_U64LOCAL_U64HI_ZX_VLMAX': McBlock.parseMcGeneric, 2369 'IEM_MC_MODIFIED_MREG': McBlock.parseMcGeneric, 2370 'IEM_MC_MODIFIED_MREG_BY_REF': McBlock.parseMcGeneric, 2371 'IEM_MC_OR_2LOCS_U32': McBlock.parseMcGeneric, 2372 'IEM_MC_OR_GREG_U16': McBlock.parseMcGeneric, 2373 'IEM_MC_OR_GREG_U32': McBlock.parseMcGeneric, 2374 'IEM_MC_OR_GREG_U64': McBlock.parseMcGeneric, 2375 'IEM_MC_OR_GREG_U8': McBlock.parseMcGeneric, 2376 'IEM_MC_OR_LOCAL_U16': McBlock.parseMcGeneric, 2377 'IEM_MC_OR_LOCAL_U32': McBlock.parseMcGeneric, 2378 'IEM_MC_OR_LOCAL_U8': McBlock.parseMcGeneric, 2379 'IEM_MC_POP_U16': McBlock.parseMcGeneric, 2380 'IEM_MC_POP_U32': McBlock.parseMcGeneric, 2381 'IEM_MC_POP_U64': McBlock.parseMcGeneric, 2382 'IEM_MC_PREPARE_AVX_USAGE': McBlock.parseMcGeneric, 2383 'IEM_MC_PREPARE_FPU_USAGE': McBlock.parseMcGeneric, 2384 'IEM_MC_PREPARE_SSE_USAGE': McBlock.parseMcGeneric, 2385 'IEM_MC_PUSH_FPU_RESULT': McBlock.parseMcGeneric, 2386 'IEM_MC_PUSH_FPU_RESULT_MEM_OP': McBlock.parseMcGeneric, 2387 'IEM_MC_PUSH_FPU_RESULT_TWO': McBlock.parseMcGeneric, 2388 'IEM_MC_PUSH_U16': McBlock.parseMcGeneric, 2389 'IEM_MC_PUSH_U32': McBlock.parseMcGeneric, 2390 'IEM_MC_PUSH_U32_SREG': McBlock.parseMcGeneric, 2391 'IEM_MC_PUSH_U64': McBlock.parseMcGeneric, 2392 'IEM_MC_RAISE_DIVIDE_ERROR': McBlock.parseMcGeneric, 2393 'IEM_MC_RAISE_GP0_IF_CPL_NOT_ZERO': McBlock.parseMcGeneric, 2394 'IEM_MC_RAISE_GP0_IF_EFF_ADDR_UNALIGNED': McBlock.parseMcGeneric, 2395 'IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT': McBlock.parseMcGeneric, 2396 'IEM_MC_REF_EFLAGS': McBlock.parseMcGeneric, 2397 'IEM_MC_REF_FPUREG': McBlock.parseMcGeneric, 2398 'IEM_MC_REF_GREG_I32': McBlock.parseMcGeneric, 2399 'IEM_MC_REF_GREG_I32_CONST': McBlock.parseMcGeneric, 2400 'IEM_MC_REF_GREG_I64': McBlock.parseMcGeneric, 2401 'IEM_MC_REF_GREG_I64_CONST': McBlock.parseMcGeneric, 2402 'IEM_MC_REF_GREG_U16': McBlock.parseMcGeneric, 2403 'IEM_MC_REF_GREG_U32': McBlock.parseMcGeneric, 2404 'IEM_MC_REF_GREG_U64': McBlock.parseMcGeneric, 2405 'IEM_MC_REF_GREG_U8': McBlock.parseMcGeneric, 2406 'IEM_MC_REF_LOCAL': McBlock.parseMcGeneric, 2407 'IEM_MC_REF_MREG_U32_CONST': McBlock.parseMcGeneric, 2408 'IEM_MC_REF_MREG_U64': McBlock.parseMcGeneric, 2409 'IEM_MC_REF_MREG_U64_CONST': McBlock.parseMcGeneric, 2410 'IEM_MC_REF_MXCSR': McBlock.parseMcGeneric, 2411 'IEM_MC_REF_XREG_R32_CONST': McBlock.parseMcGeneric, 2412 'IEM_MC_REF_XREG_R64_CONST': McBlock.parseMcGeneric, 2413 'IEM_MC_REF_XREG_U128': McBlock.parseMcGeneric, 2414 'IEM_MC_REF_XREG_U128_CONST': McBlock.parseMcGeneric, 2415 'IEM_MC_REF_XREG_U32_CONST': McBlock.parseMcGeneric, 2416 'IEM_MC_REF_XREG_U64_CONST': McBlock.parseMcGeneric, 2417 'IEM_MC_REF_XREG_XMM_CONST': McBlock.parseMcGeneric, 2418 'IEM_MC_REF_YREG_U128': McBlock.parseMcGeneric, 2419 'IEM_MC_REF_YREG_U128_CONST': McBlock.parseMcGeneric, 2420 'IEM_MC_REF_YREG_U64_CONST': McBlock.parseMcGeneric, 2421 'IEM_MC_REL_JMP_S16_AND_FINISH': McBlock.parseMcGeneric, 2422 'IEM_MC_REL_JMP_S32_AND_FINISH': McBlock.parseMcGeneric, 2423 'IEM_MC_REL_JMP_S8_AND_FINISH': McBlock.parseMcGeneric, 2424 'IEM_MC_RETURN_ON_FAILURE': McBlock.parseMcGeneric, 2425 'IEM_MC_SAR_LOCAL_S16': McBlock.parseMcGeneric, 2426 'IEM_MC_SAR_LOCAL_S32': McBlock.parseMcGeneric, 2427 'IEM_MC_SAR_LOCAL_S64': McBlock.parseMcGeneric, 2428 'IEM_MC_SET_EFL_BIT': McBlock.parseMcGeneric, 2429 'IEM_MC_SET_FPU_RESULT': McBlock.parseMcGeneric, 2430 'IEM_MC_SET_RIP_U16_AND_FINISH': McBlock.parseMcGeneric, 2431 'IEM_MC_SET_RIP_U32_AND_FINISH': McBlock.parseMcGeneric, 2432 'IEM_MC_SET_RIP_U64_AND_FINISH': McBlock.parseMcGeneric, 2433 'IEM_MC_SHL_LOCAL_S16': McBlock.parseMcGeneric, 2434 'IEM_MC_SHL_LOCAL_S32': McBlock.parseMcGeneric, 2435 'IEM_MC_SHL_LOCAL_S64': McBlock.parseMcGeneric, 2436 'IEM_MC_SHR_LOCAL_U8': McBlock.parseMcGeneric, 2437 'IEM_MC_SSE_UPDATE_MXCSR': McBlock.parseMcGeneric, 2438 'IEM_MC_STORE_FPU_RESULT': McBlock.parseMcGeneric, 2439 'IEM_MC_STORE_FPU_RESULT_MEM_OP': McBlock.parseMcGeneric, 2440 'IEM_MC_STORE_FPU_RESULT_THEN_POP': McBlock.parseMcGeneric, 2441 'IEM_MC_STORE_FPU_RESULT_WITH_MEM_OP_THEN_POP': McBlock.parseMcGeneric, 2442 'IEM_MC_STORE_FPUREG_R80_SRC_REF': McBlock.parseMcGeneric, 2443 'IEM_MC_STORE_GREG_I64': McBlock.parseMcGeneric, 2444 'IEM_MC_STORE_GREG_U16': McBlock.parseMcGeneric, 2445 'IEM_MC_STORE_GREG_U16_CONST': McBlock.parseMcGeneric, 2446 'IEM_MC_STORE_GREG_U32': McBlock.parseMcGeneric, 2447 'IEM_MC_STORE_GREG_U32_CONST': McBlock.parseMcGeneric, 2448 'IEM_MC_STORE_GREG_U64': McBlock.parseMcGeneric, 2449 'IEM_MC_STORE_GREG_U64_CONST': McBlock.parseMcGeneric, 2450 'IEM_MC_STORE_GREG_U8': McBlock.parseMcGeneric, 2451 'IEM_MC_STORE_GREG_U8_CONST': McBlock.parseMcGeneric, 2452 'IEM_MC_STORE_MEM_I16_CONST_BY_REF': McBlock.parseMcGeneric, 2453 'IEM_MC_STORE_MEM_I32_CONST_BY_REF': McBlock.parseMcGeneric, 2454 'IEM_MC_STORE_MEM_I64_CONST_BY_REF': McBlock.parseMcGeneric, 2455 'IEM_MC_STORE_MEM_I8_CONST_BY_REF': McBlock.parseMcGeneric, 2456 'IEM_MC_STORE_MEM_INDEF_D80_BY_REF': McBlock.parseMcGeneric, 2457 'IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF': McBlock.parseMcGeneric, 2458 'IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF': McBlock.parseMcGeneric, 2459 'IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF': McBlock.parseMcGeneric, 2460 'IEM_MC_STORE_MEM_U128': McBlock.parseMcGeneric, 2461 'IEM_MC_STORE_MEM_U128_ALIGN_SSE': McBlock.parseMcGeneric, 2462 'IEM_MC_STORE_MEM_U16': McBlock.parseMcGeneric, 2463 'IEM_MC_STORE_MEM_U16_CONST': McBlock.parseMcGeneric, 2464 'IEM_MC_STORE_MEM_U256': McBlock.parseMcGeneric, 2465 'IEM_MC_STORE_MEM_U256_ALIGN_AVX': McBlock.parseMcGeneric, 2466 'IEM_MC_STORE_MEM_U32': McBlock.parseMcGeneric, 2467 'IEM_MC_STORE_MEM_U32_CONST': McBlock.parseMcGeneric, 2468 'IEM_MC_STORE_MEM_U64': McBlock.parseMcGeneric, 2469 'IEM_MC_STORE_MEM_U64_CONST': McBlock.parseMcGeneric, 2470 'IEM_MC_STORE_MEM_U8': McBlock.parseMcGeneric, 2471 'IEM_MC_STORE_MEM_U8_CONST': McBlock.parseMcGeneric, 2472 'IEM_MC_STORE_MREG_U32_ZX_U64': McBlock.parseMcGeneric, 2473 'IEM_MC_STORE_MREG_U64': McBlock.parseMcGeneric, 2474 'IEM_MC_STORE_SREG_BASE_U32': McBlock.parseMcGeneric, 2475 'IEM_MC_STORE_SREG_BASE_U64': McBlock.parseMcGeneric, 2476 'IEM_MC_STORE_SSE_RESULT': McBlock.parseMcGeneric, 2477 'IEM_MC_STORE_XREG_HI_U64': McBlock.parseMcGeneric, 2478 'IEM_MC_STORE_XREG_R32': McBlock.parseMcGeneric, 2479 'IEM_MC_STORE_XREG_R64': McBlock.parseMcGeneric, 2480 'IEM_MC_STORE_XREG_U128': McBlock.parseMcGeneric, 2481 'IEM_MC_STORE_XREG_U16': McBlock.parseMcGeneric, 2482 'IEM_MC_STORE_XREG_U32': McBlock.parseMcGeneric, 2483 'IEM_MC_STORE_XREG_U32_U128': McBlock.parseMcGeneric, 2484 'IEM_MC_STORE_XREG_U32_ZX_U128': McBlock.parseMcGeneric, 2485 'IEM_MC_STORE_XREG_U64': McBlock.parseMcGeneric, 2486 'IEM_MC_STORE_XREG_U64_ZX_U128': McBlock.parseMcGeneric, 2487 'IEM_MC_STORE_XREG_U8': McBlock.parseMcGeneric, 2488 'IEM_MC_STORE_XREG_XMM': McBlock.parseMcGeneric, 2489 'IEM_MC_STORE_XREG_XMM_U32': McBlock.parseMcGeneric, 2490 'IEM_MC_STORE_XREG_XMM_U64': McBlock.parseMcGeneric, 2491 'IEM_MC_STORE_YREG_U128_ZX_VLMAX': McBlock.parseMcGeneric, 2492 'IEM_MC_STORE_YREG_U256_ZX_VLMAX': McBlock.parseMcGeneric, 2493 'IEM_MC_STORE_YREG_U32_ZX_VLMAX': McBlock.parseMcGeneric, 2494 'IEM_MC_STORE_YREG_U64_ZX_VLMAX': McBlock.parseMcGeneric, 2495 'IEM_MC_SUB_GREG_U16': McBlock.parseMcGeneric, 2496 'IEM_MC_SUB_GREG_U32': McBlock.parseMcGeneric, 2497 'IEM_MC_SUB_GREG_U64': McBlock.parseMcGeneric, 2498 'IEM_MC_SUB_GREG_U8': McBlock.parseMcGeneric, 2499 'IEM_MC_SUB_LOCAL_U16': McBlock.parseMcGeneric, 2500 'IEM_MC_UPDATE_FPU_OPCODE_IP': McBlock.parseMcGeneric, 2501 'IEM_MC_UPDATE_FSW': McBlock.parseMcGeneric, 2502 'IEM_MC_UPDATE_FSW_CONST': McBlock.parseMcGeneric, 2503 'IEM_MC_UPDATE_FSW_THEN_POP': McBlock.parseMcGeneric, 2504 'IEM_MC_UPDATE_FSW_THEN_POP_POP': McBlock.parseMcGeneric, 2505 'IEM_MC_UPDATE_FSW_WITH_MEM_OP': McBlock.parseMcGeneric, 2506 'IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP': McBlock.parseMcGeneric, 2507 }; 1767 2508 1768 2509 ## List of microcode blocks. -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r98797 r98880 3627 3627 3628 3628 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2ps_u128, pfMxcsr, pDst, u64Src); 3629 IEM_MC_IF_MXCSR_XCPT_PENDING() 3629 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3630 3630 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3631 IEM_MC_ELSE()3631 } IEM_MC_ELSE() { 3632 3632 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 3633 IEM_MC_ENDIF();3633 } IEM_MC_ENDIF(); 3634 3634 3635 3635 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3659 3659 3660 3660 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2ps_u128, pfMxcsr, pDst, u64Src); 3661 IEM_MC_IF_MXCSR_XCPT_PENDING() 3661 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3662 3662 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3663 IEM_MC_ELSE()3663 } IEM_MC_ELSE() { 3664 3664 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 3665 IEM_MC_ENDIF();3665 } IEM_MC_ENDIF(); 3666 3666 3667 3667 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3697 3697 3698 3698 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2pd_u128, pfMxcsr, pDst, u64Src); 3699 IEM_MC_IF_MXCSR_XCPT_PENDING() 3699 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3700 3700 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3701 IEM_MC_ELSE()3701 } IEM_MC_ELSE() { 3702 3702 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 3703 IEM_MC_ENDIF();3703 } IEM_MC_ENDIF(); 3704 3704 3705 3705 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3729 3729 3730 3730 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2pd_u128, pfMxcsr, pDst, u64Src); 3731 IEM_MC_IF_MXCSR_XCPT_PENDING() 3731 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3732 3732 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3733 IEM_MC_ELSE()3733 } IEM_MC_ELSE() { 3734 3734 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 3735 IEM_MC_ENDIF();3735 } IEM_MC_ENDIF(); 3736 3736 3737 3737 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3766 3766 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2ss_r32_i64, pfMxcsr, pr32Dst, pi64Src); 3767 3767 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3768 IEM_MC_IF_MXCSR_XCPT_PENDING() 3768 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3769 3769 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3770 IEM_MC_ELSE()3770 } IEM_MC_ELSE() { 3771 3771 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst); 3772 IEM_MC_ENDIF();3772 } IEM_MC_ENDIF(); 3773 3773 3774 3774 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3795 3795 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2ss_r32_i64, pfMxcsr, pr32Dst, pi64Src); 3796 3796 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3797 IEM_MC_IF_MXCSR_XCPT_PENDING() 3797 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3798 3798 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3799 IEM_MC_ELSE()3799 } IEM_MC_ELSE() { 3800 3800 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst); 3801 IEM_MC_ENDIF();3801 } IEM_MC_ENDIF(); 3802 3802 3803 3803 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3824 3824 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2ss_r32_i32, pfMxcsr, pr32Dst, pi32Src); 3825 3825 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3826 IEM_MC_IF_MXCSR_XCPT_PENDING() 3826 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3827 3827 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3828 IEM_MC_ELSE()3828 } IEM_MC_ELSE() { 3829 3829 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst); 3830 IEM_MC_ENDIF();3830 } IEM_MC_ENDIF(); 3831 3831 3832 3832 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3853 3853 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2ss_r32_i32, pfMxcsr, pr32Dst, pi32Src); 3854 3854 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3855 IEM_MC_IF_MXCSR_XCPT_PENDING() 3855 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3856 3856 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3857 IEM_MC_ELSE()3857 } IEM_MC_ELSE() { 3858 3858 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst); 3859 IEM_MC_ENDIF();3859 } IEM_MC_ENDIF(); 3860 3860 3861 3861 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3891 3891 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2sd_r64_i64, pfMxcsr, pr64Dst, pi64Src); 3892 3892 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3893 IEM_MC_IF_MXCSR_XCPT_PENDING() 3893 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3894 3894 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3895 IEM_MC_ELSE()3895 } IEM_MC_ELSE() { 3896 3896 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst); 3897 IEM_MC_ENDIF();3897 } IEM_MC_ENDIF(); 3898 3898 3899 3899 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3920 3920 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2sd_r64_i64, pfMxcsr, pr64Dst, pi64Src); 3921 3921 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3922 IEM_MC_IF_MXCSR_XCPT_PENDING() 3922 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3923 3923 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3924 IEM_MC_ELSE()3924 } IEM_MC_ELSE() { 3925 3925 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst); 3926 IEM_MC_ENDIF();3926 } IEM_MC_ENDIF(); 3927 3927 3928 3928 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3949 3949 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2sd_r64_i32, pfMxcsr, pr64Dst, pi32Src); 3950 3950 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3951 IEM_MC_IF_MXCSR_XCPT_PENDING() 3951 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3952 3952 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3953 IEM_MC_ELSE()3953 } IEM_MC_ELSE() { 3954 3954 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst); 3955 IEM_MC_ENDIF();3955 } IEM_MC_ENDIF(); 3956 3956 3957 3957 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 3978 3978 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2sd_r64_i32, pfMxcsr, pr64Dst, pi32Src); 3979 3979 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 3980 IEM_MC_IF_MXCSR_XCPT_PENDING() 3980 IEM_MC_IF_MXCSR_XCPT_PENDING() { 3981 3981 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 3982 IEM_MC_ELSE()3982 } IEM_MC_ELSE() { 3983 3983 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst); 3984 IEM_MC_ENDIF();3984 } IEM_MC_ENDIF(); 3985 3985 3986 3986 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4097 4097 4098 4098 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttps2pi_u128, pfMxcsr, pu64Dst, u64Src); 4099 IEM_MC_IF_MXCSR_XCPT_PENDING() 4099 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4100 4100 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4101 IEM_MC_ELSE()4101 } IEM_MC_ELSE() { 4102 4102 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4103 IEM_MC_ENDIF();4103 } IEM_MC_ENDIF(); 4104 4104 4105 4105 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4128 4128 4129 4129 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttps2pi_u128, pfMxcsr, pu64Dst, u64Src); 4130 IEM_MC_IF_MXCSR_XCPT_PENDING() 4130 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4131 4131 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4132 IEM_MC_ELSE()4132 } IEM_MC_ELSE() { 4133 4133 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4134 IEM_MC_ENDIF();4134 } IEM_MC_ENDIF(); 4135 4135 4136 4136 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4165 4165 4166 4166 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttpd2pi_u128, pfMxcsr, pu64Dst, pSrc); 4167 IEM_MC_IF_MXCSR_XCPT_PENDING() 4167 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4168 4168 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4169 IEM_MC_ELSE()4169 } IEM_MC_ELSE() { 4170 4170 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4171 IEM_MC_ENDIF();4171 } IEM_MC_ENDIF(); 4172 4172 4173 4173 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4198 4198 4199 4199 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttpd2pi_u128, pfMxcsr, pu64Dst, pSrc); 4200 IEM_MC_IF_MXCSR_XCPT_PENDING() 4200 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4201 4201 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4202 IEM_MC_ELSE()4202 } IEM_MC_ELSE() { 4203 4203 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4204 IEM_MC_ENDIF();4204 } IEM_MC_ENDIF(); 4205 4205 4206 4206 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4235 4235 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttss2si_i64_r32, pfMxcsr, pi64Dst, pu32Src); 4236 4236 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4237 IEM_MC_IF_MXCSR_XCPT_PENDING() 4237 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4238 4238 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4239 IEM_MC_ELSE()4239 } IEM_MC_ELSE() { 4240 4240 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4241 IEM_MC_ENDIF();4241 } IEM_MC_ENDIF(); 4242 4242 4243 4243 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4264 4264 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttss2si_i64_r32, pfMxcsr, pi64Dst, pu32Src); 4265 4265 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4266 IEM_MC_IF_MXCSR_XCPT_PENDING() 4266 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4267 4267 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4268 IEM_MC_ELSE()4268 } IEM_MC_ELSE() { 4269 4269 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4270 IEM_MC_ENDIF();4270 } IEM_MC_ENDIF(); 4271 4271 4272 4272 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4293 4293 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttss2si_i32_r32, pfMxcsr, pi32Dst, pu32Src); 4294 4294 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4295 IEM_MC_IF_MXCSR_XCPT_PENDING() 4295 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4296 4296 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4297 IEM_MC_ELSE()4297 } IEM_MC_ELSE() { 4298 4298 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4299 IEM_MC_ENDIF();4299 } IEM_MC_ENDIF(); 4300 4300 4301 4301 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4322 4322 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttss2si_i32_r32, pfMxcsr, pi32Dst, pu32Src); 4323 4323 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4324 IEM_MC_IF_MXCSR_XCPT_PENDING() 4324 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4325 4325 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4326 IEM_MC_ELSE()4326 } IEM_MC_ELSE() { 4327 4327 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4328 IEM_MC_ENDIF();4328 } IEM_MC_ENDIF(); 4329 4329 4330 4330 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4360 4360 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttsd2si_i64_r64, pfMxcsr, pi64Dst, pu64Src); 4361 4361 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4362 IEM_MC_IF_MXCSR_XCPT_PENDING() 4362 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4363 4363 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4364 IEM_MC_ELSE()4364 } IEM_MC_ELSE() { 4365 4365 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4366 IEM_MC_ENDIF();4366 } IEM_MC_ENDIF(); 4367 4367 4368 4368 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4389 4389 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttsd2si_i64_r64, pfMxcsr, pi64Dst, pu64Src); 4390 4390 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4391 IEM_MC_IF_MXCSR_XCPT_PENDING() 4391 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4392 4392 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4393 IEM_MC_ELSE()4393 } IEM_MC_ELSE() { 4394 4394 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4395 IEM_MC_ENDIF();4395 } IEM_MC_ENDIF(); 4396 4396 4397 4397 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4418 4418 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttsd2si_i32_r64, pfMxcsr, pi32Dst, pu64Src); 4419 4419 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4420 IEM_MC_IF_MXCSR_XCPT_PENDING() 4420 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4421 4421 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4422 IEM_MC_ELSE()4422 } IEM_MC_ELSE() { 4423 4423 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4424 IEM_MC_ENDIF();4424 } IEM_MC_ENDIF(); 4425 4425 4426 4426 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4447 4447 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvttsd2si_i32_r64, pfMxcsr, pi32Dst, pu64Src); 4448 4448 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4449 IEM_MC_IF_MXCSR_XCPT_PENDING() 4449 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4450 4450 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4451 IEM_MC_ELSE()4451 } IEM_MC_ELSE() { 4452 4452 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4453 IEM_MC_ENDIF();4453 } IEM_MC_ENDIF(); 4454 4454 4455 4455 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4485 4485 4486 4486 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtps2pi_u128, pfMxcsr, pu64Dst, u64Src); 4487 IEM_MC_IF_MXCSR_XCPT_PENDING() 4487 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4488 4488 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4489 IEM_MC_ELSE()4489 } IEM_MC_ELSE() { 4490 4490 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4491 IEM_MC_ENDIF();4491 } IEM_MC_ENDIF(); 4492 4492 4493 4493 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4516 4516 4517 4517 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtps2pi_u128, pfMxcsr, pu64Dst, u64Src); 4518 IEM_MC_IF_MXCSR_XCPT_PENDING() 4518 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4519 4519 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4520 IEM_MC_ELSE()4520 } IEM_MC_ELSE() { 4521 4521 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4522 IEM_MC_ENDIF();4522 } IEM_MC_ENDIF(); 4523 4523 4524 4524 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4553 4553 4554 4554 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpd2pi_u128, pfMxcsr, pu64Dst, pSrc); 4555 IEM_MC_IF_MXCSR_XCPT_PENDING() 4555 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4556 4556 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4557 IEM_MC_ELSE()4557 } IEM_MC_ELSE() { 4558 4558 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4559 IEM_MC_ENDIF();4559 } IEM_MC_ENDIF(); 4560 4560 4561 4561 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4586 4586 4587 4587 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpd2pi_u128, pfMxcsr, pu64Dst, pSrc); 4588 IEM_MC_IF_MXCSR_XCPT_PENDING() 4588 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4589 4589 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4590 IEM_MC_ELSE()4590 } IEM_MC_ELSE() { 4591 4591 IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), u64Dst); 4592 IEM_MC_ENDIF();4592 } IEM_MC_ENDIF(); 4593 4593 4594 4594 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4623 4623 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtss2si_i64_r32, pfMxcsr, pi64Dst, pu32Src); 4624 4624 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4625 IEM_MC_IF_MXCSR_XCPT_PENDING() 4625 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4626 4626 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4627 IEM_MC_ELSE()4627 } IEM_MC_ELSE() { 4628 4628 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4629 IEM_MC_ENDIF();4629 } IEM_MC_ENDIF(); 4630 4630 4631 4631 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4652 4652 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtss2si_i64_r32, pfMxcsr, pi64Dst, pu32Src); 4653 4653 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4654 IEM_MC_IF_MXCSR_XCPT_PENDING() 4654 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4655 4655 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4656 IEM_MC_ELSE()4656 } IEM_MC_ELSE() { 4657 4657 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4658 IEM_MC_ENDIF();4658 } IEM_MC_ENDIF(); 4659 4659 4660 4660 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4681 4681 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtss2si_i32_r32, pfMxcsr, pi32Dst, pu32Src); 4682 4682 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4683 IEM_MC_IF_MXCSR_XCPT_PENDING() 4683 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4684 4684 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4685 IEM_MC_ELSE()4685 } IEM_MC_ELSE() { 4686 4686 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4687 IEM_MC_ENDIF();4687 } IEM_MC_ENDIF(); 4688 4688 4689 4689 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4710 4710 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtss2si_i32_r32, pfMxcsr, pi32Dst, pu32Src); 4711 4711 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4712 IEM_MC_IF_MXCSR_XCPT_PENDING() 4712 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4713 4713 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4714 IEM_MC_ELSE()4714 } IEM_MC_ELSE() { 4715 4715 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4716 IEM_MC_ENDIF();4716 } IEM_MC_ENDIF(); 4717 4717 4718 4718 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4748 4748 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsd2si_i64_r64, pfMxcsr, pi64Dst, pu64Src); 4749 4749 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4750 IEM_MC_IF_MXCSR_XCPT_PENDING() 4750 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4751 4751 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4752 IEM_MC_ELSE()4752 } IEM_MC_ELSE() { 4753 4753 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4754 IEM_MC_ENDIF();4754 } IEM_MC_ENDIF(); 4755 4755 4756 4756 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4777 4777 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsd2si_i64_r64, pfMxcsr, pi64Dst, pu64Src); 4778 4778 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4779 IEM_MC_IF_MXCSR_XCPT_PENDING() 4779 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4780 4780 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4781 IEM_MC_ELSE()4781 } IEM_MC_ELSE() { 4782 4782 IEM_MC_STORE_GREG_I64(IEM_GET_MODRM_REG(pVCpu, bRm), i64Dst); 4783 IEM_MC_ENDIF();4783 } IEM_MC_ENDIF(); 4784 4784 4785 4785 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4806 4806 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsd2si_i32_r64, pfMxcsr, pi32Dst, pu64Src); 4807 4807 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4808 IEM_MC_IF_MXCSR_XCPT_PENDING() 4808 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4809 4809 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4810 IEM_MC_ELSE()4810 } IEM_MC_ELSE() { 4811 4811 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4812 IEM_MC_ENDIF();4812 } IEM_MC_ENDIF(); 4813 4813 4814 4814 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4835 4835 IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsd2si_i32_r64, pfMxcsr, pi32Dst, pu64Src); 4836 4836 IEM_MC_SSE_UPDATE_MXCSR(fMxcsr); 4837 IEM_MC_IF_MXCSR_XCPT_PENDING() 4837 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4838 4838 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4839 IEM_MC_ELSE()4839 } IEM_MC_ELSE() { 4840 4840 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), i32Dst); 4841 IEM_MC_ENDIF();4841 } IEM_MC_ENDIF(); 4842 4842 4843 4843 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4872 4872 IEM_MC_REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 4873 4873 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_ucomiss_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 4874 IEM_MC_IF_MXCSR_XCPT_PENDING() 4874 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4875 4875 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4876 IEM_MC_ELSE()4876 } IEM_MC_ELSE() { 4877 4877 IEM_MC_COMMIT_EFLAGS(fEFlags); 4878 IEM_MC_ENDIF();4878 } IEM_MC_ENDIF(); 4879 4879 4880 4880 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4905 4905 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 4906 4906 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_ucomiss_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 4907 IEM_MC_IF_MXCSR_XCPT_PENDING() 4907 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4908 4908 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4909 IEM_MC_ELSE()4909 } IEM_MC_ELSE() { 4910 4910 IEM_MC_COMMIT_EFLAGS(fEFlags); 4911 IEM_MC_ENDIF();4911 } IEM_MC_ENDIF(); 4912 4912 4913 4913 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4941 4941 IEM_MC_REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 4942 4942 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_ucomisd_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 4943 IEM_MC_IF_MXCSR_XCPT_PENDING() 4943 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4944 4944 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4945 IEM_MC_ELSE()4945 } IEM_MC_ELSE() { 4946 4946 IEM_MC_COMMIT_EFLAGS(fEFlags); 4947 IEM_MC_ENDIF();4947 } IEM_MC_ENDIF(); 4948 4948 4949 4949 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 4974 4974 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 4975 4975 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_ucomisd_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 4976 IEM_MC_IF_MXCSR_XCPT_PENDING() 4976 IEM_MC_IF_MXCSR_XCPT_PENDING() { 4977 4977 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 4978 IEM_MC_ELSE()4978 } IEM_MC_ELSE() { 4979 4979 IEM_MC_COMMIT_EFLAGS(fEFlags); 4980 IEM_MC_ENDIF();4980 } IEM_MC_ENDIF(); 4981 4981 4982 4982 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5014 5014 IEM_MC_REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 5015 5015 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_comiss_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 5016 IEM_MC_IF_MXCSR_XCPT_PENDING() 5016 IEM_MC_IF_MXCSR_XCPT_PENDING() { 5017 5017 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 5018 IEM_MC_ELSE()5018 } IEM_MC_ELSE() { 5019 5019 IEM_MC_COMMIT_EFLAGS(fEFlags); 5020 IEM_MC_ENDIF();5020 } IEM_MC_ENDIF(); 5021 5021 5022 5022 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5047 5047 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 5048 5048 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_comiss_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 5049 IEM_MC_IF_MXCSR_XCPT_PENDING() 5049 IEM_MC_IF_MXCSR_XCPT_PENDING() { 5050 5050 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 5051 IEM_MC_ELSE()5051 } IEM_MC_ELSE() { 5052 5052 IEM_MC_COMMIT_EFLAGS(fEFlags); 5053 IEM_MC_ENDIF();5053 } IEM_MC_ENDIF(); 5054 5054 5055 5055 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5083 5083 IEM_MC_REF_XREG_XMM_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 5084 5084 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_comisd_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 5085 IEM_MC_IF_MXCSR_XCPT_PENDING() 5085 IEM_MC_IF_MXCSR_XCPT_PENDING() { 5086 5086 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 5087 IEM_MC_ELSE()5087 } IEM_MC_ELSE() { 5088 5088 IEM_MC_COMMIT_EFLAGS(fEFlags); 5089 IEM_MC_ENDIF();5089 } IEM_MC_ENDIF(); 5090 5090 5091 5091 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 5116 5116 IEM_MC_REF_XREG_XMM_CONST(puSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 5117 5117 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_comisd_u128, pfMxcsr, pEFlags, puSrc1, puSrc2); 5118 IEM_MC_IF_MXCSR_XCPT_PENDING() 5118 IEM_MC_IF_MXCSR_XCPT_PENDING() { 5119 5119 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 5120 IEM_MC_ELSE()5120 } IEM_MC_ELSE() { 5121 5121 IEM_MC_COMMIT_EFLAGS(fEFlags); 5122 IEM_MC_ENDIF();5122 } IEM_MC_ENDIF(); 5123 5123 5124 5124 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10207 10207 IEM_MC_COMMIT_EFLAGS(EFlags); 10208 10208 10209 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) 10209 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { 10210 10210 IEM_MC_STORE_GREG_U32(X86_GREG_xAX, u32Eax); 10211 IEM_MC_ENDIF();10211 } IEM_MC_ENDIF(); 10212 10212 10213 10213 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 10797 10797 IEM_MC_REF_EFLAGS(pEFlags); 10798 10798 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 10799 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) 10799 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { 10800 10800 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); 10801 IEM_MC_ENDIF();10801 } IEM_MC_ENDIF(); 10802 10802 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10803 10803 IEM_MC_END(); … … 10861 10861 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 10862 10862 10863 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) 10863 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { 10864 10864 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); 10865 IEM_MC_ENDIF();10865 } IEM_MC_ENDIF(); 10866 10866 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10867 10867 IEM_MC_END(); … … 11367 11367 IEM_MC_FETCH_XREG_XMM(Src.uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 11368 11368 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpps_u128, pfMxcsr, pDst, pSrc, bImmArg); 11369 IEM_MC_IF_MXCSR_XCPT_PENDING() 11369 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11370 11370 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11371 IEM_MC_ELSE()11371 } IEM_MC_ELSE() { 11372 11372 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 11373 IEM_MC_ENDIF();11373 } IEM_MC_ENDIF(); 11374 11374 11375 11375 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11400 11400 IEM_MC_FETCH_XREG_XMM(Src.uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 11401 11401 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpps_u128, pfMxcsr, pDst, pSrc, bImmArg); 11402 IEM_MC_IF_MXCSR_XCPT_PENDING() 11402 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11403 11403 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11404 IEM_MC_ELSE()11404 } IEM_MC_ELSE() { 11405 11405 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 11406 IEM_MC_ENDIF();11406 } IEM_MC_ENDIF(); 11407 11407 11408 11408 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11438 11438 IEM_MC_FETCH_XREG_XMM(Src.uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 11439 11439 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmppd_u128, pfMxcsr, pDst, pSrc, bImmArg); 11440 IEM_MC_IF_MXCSR_XCPT_PENDING() 11440 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11441 11441 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11442 IEM_MC_ELSE()11442 } IEM_MC_ELSE() { 11443 11443 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 11444 IEM_MC_ENDIF();11444 } IEM_MC_ENDIF(); 11445 11445 11446 11446 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11471 11471 IEM_MC_FETCH_XREG_XMM(Src.uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 11472 11472 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmppd_u128, pfMxcsr, pDst, pSrc, bImmArg); 11473 IEM_MC_IF_MXCSR_XCPT_PENDING() 11473 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11474 11474 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11475 IEM_MC_ELSE()11475 } IEM_MC_ELSE() { 11476 11476 IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst); 11477 IEM_MC_ENDIF();11477 } IEM_MC_ENDIF(); 11478 11478 11479 11479 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11509 11509 IEM_MC_FETCH_XREG_XMM(Src.uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 11510 11510 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpss_u128, pfMxcsr, pDst, pSrc, bImmArg); 11511 IEM_MC_IF_MXCSR_XCPT_PENDING() 11511 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11512 11512 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11513 IEM_MC_ELSE()11513 } IEM_MC_ELSE() { 11514 11514 IEM_MC_STORE_XREG_XMM_U32(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/, Dst); 11515 IEM_MC_ENDIF();11515 } IEM_MC_ENDIF(); 11516 11516 11517 11517 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11542 11542 IEM_MC_FETCH_XREG_XMM(Src.uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 11543 11543 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpss_u128, pfMxcsr, pDst, pSrc, bImmArg); 11544 IEM_MC_IF_MXCSR_XCPT_PENDING() 11544 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11545 11545 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11546 IEM_MC_ELSE()11546 } IEM_MC_ELSE() { 11547 11547 IEM_MC_STORE_XREG_XMM_U32(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/, Dst); 11548 IEM_MC_ENDIF();11548 } IEM_MC_ENDIF(); 11549 11549 11550 11550 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11580 11580 IEM_MC_FETCH_XREG_XMM(Src.uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 11581 11581 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpsd_u128, pfMxcsr, pDst, pSrc, bImmArg); 11582 IEM_MC_IF_MXCSR_XCPT_PENDING() 11582 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11583 11583 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11584 IEM_MC_ELSE()11584 } IEM_MC_ELSE() { 11585 11585 IEM_MC_STORE_XREG_XMM_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQword*/, Dst); 11586 IEM_MC_ENDIF();11586 } IEM_MC_ENDIF(); 11587 11587 11588 11588 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 11613 11613 IEM_MC_FETCH_XREG_XMM(Src.uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm)); 11614 11614 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpsd_u128, pfMxcsr, pDst, pSrc, bImmArg); 11615 IEM_MC_IF_MXCSR_XCPT_PENDING() 11615 IEM_MC_IF_MXCSR_XCPT_PENDING() { 11616 11616 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 11617 IEM_MC_ELSE()11617 } IEM_MC_ELSE() { 11618 11618 IEM_MC_STORE_XREG_XMM_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQword*/, Dst); 11619 IEM_MC_ENDIF();11619 } IEM_MC_ENDIF(); 11620 11620 11621 11621 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 12003 12003 IEM_MC_MEM_COMMIT_AND_UNMAP(pu64MemDst, IEM_ACCESS_DATA_RW); 12004 12004 IEM_MC_COMMIT_EFLAGS(EFlags); 12005 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) 12005 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { 12006 12006 IEM_MC_STORE_GREG_U32(X86_GREG_xAX, u64EaxEdx.s.Lo); 12007 12007 IEM_MC_STORE_GREG_U32(X86_GREG_xDX, u64EaxEdx.s.Hi); 12008 IEM_MC_ENDIF();12008 } IEM_MC_ENDIF(); 12009 12009 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12010 12010 … … 12079 12079 IEM_MC_MEM_COMMIT_AND_UNMAP(pu128MemDst, IEM_ACCESS_DATA_RW); 12080 12080 IEM_MC_COMMIT_EFLAGS(EFlags); 12081 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) 12081 IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { 12082 12082 IEM_MC_STORE_GREG_U64(X86_GREG_xAX, u128RaxRdx.s.Lo); 12083 12083 IEM_MC_STORE_GREG_U64(X86_GREG_xDX, u128RaxRdx.s.Hi); 12084 IEM_MC_ENDIF();12084 } IEM_MC_ENDIF(); 12085 12085 IEM_MC_ADVANCE_RIP_AND_FINISH(); 12086 12086 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r98843 r98880 2302 2302 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback), 2303 2303 pfMxcsr, pEFlags, puSrc1, puSrc2); 2304 IEM_MC_IF_MXCSR_XCPT_PENDING() 2304 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2305 2305 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2306 IEM_MC_ELSE()2306 } IEM_MC_ELSE() { 2307 2307 IEM_MC_COMMIT_EFLAGS(fEFlags); 2308 IEM_MC_ENDIF();2308 } IEM_MC_ENDIF(); 2309 2309 2310 2310 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2336 2336 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback), 2337 2337 pfMxcsr, pEFlags, puSrc1, puSrc2); 2338 IEM_MC_IF_MXCSR_XCPT_PENDING() 2338 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2339 2339 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2340 IEM_MC_ELSE()2340 } IEM_MC_ELSE() { 2341 2341 IEM_MC_COMMIT_EFLAGS(fEFlags); 2342 IEM_MC_ENDIF();2342 } IEM_MC_ENDIF(); 2343 2343 2344 2344 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2373 2373 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback), 2374 2374 pfMxcsr, pEFlags, puSrc1, puSrc2); 2375 IEM_MC_IF_MXCSR_XCPT_PENDING() 2375 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2376 2376 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2377 IEM_MC_ELSE()2377 } IEM_MC_ELSE() { 2378 2378 IEM_MC_COMMIT_EFLAGS(fEFlags); 2379 IEM_MC_ENDIF();2379 } IEM_MC_ENDIF(); 2380 2380 2381 2381 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2407 2407 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback), 2408 2408 pfMxcsr, pEFlags, puSrc1, puSrc2); 2409 IEM_MC_IF_MXCSR_XCPT_PENDING() 2409 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2410 2410 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2411 IEM_MC_ELSE()2411 } IEM_MC_ELSE() { 2412 2412 IEM_MC_COMMIT_EFLAGS(fEFlags); 2413 IEM_MC_ENDIF();2413 } IEM_MC_ENDIF(); 2414 2414 2415 2415 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2447 2447 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback), 2448 2448 pfMxcsr, pEFlags, puSrc1, puSrc2); 2449 IEM_MC_IF_MXCSR_XCPT_PENDING() 2449 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2450 2450 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2451 IEM_MC_ELSE()2451 } IEM_MC_ELSE() { 2452 2452 IEM_MC_COMMIT_EFLAGS(fEFlags); 2453 IEM_MC_ENDIF();2453 } IEM_MC_ENDIF(); 2454 2454 2455 2455 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2481 2481 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback), 2482 2482 pfMxcsr, pEFlags, puSrc1, puSrc2); 2483 IEM_MC_IF_MXCSR_XCPT_PENDING() 2483 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2484 2484 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2485 IEM_MC_ELSE()2485 } IEM_MC_ELSE() { 2486 2486 IEM_MC_COMMIT_EFLAGS(fEFlags); 2487 IEM_MC_ENDIF();2487 } IEM_MC_ENDIF(); 2488 2488 2489 2489 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2518 2518 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback), 2519 2519 pfMxcsr, pEFlags, puSrc1, puSrc2); 2520 IEM_MC_IF_MXCSR_XCPT_PENDING() 2520 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2521 2521 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2522 IEM_MC_ELSE()2522 } IEM_MC_ELSE() { 2523 2523 IEM_MC_COMMIT_EFLAGS(fEFlags); 2524 IEM_MC_ENDIF();2524 } IEM_MC_ENDIF(); 2525 2525 2526 2526 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 2552 2552 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback), 2553 2553 pfMxcsr, pEFlags, puSrc1, puSrc2); 2554 IEM_MC_IF_MXCSR_XCPT_PENDING() 2554 IEM_MC_IF_MXCSR_XCPT_PENDING() { 2555 2555 IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT(); 2556 IEM_MC_ELSE()2556 } IEM_MC_ELSE() { 2557 2557 IEM_MC_COMMIT_EFLAGS(fEFlags); 2558 IEM_MC_ENDIF();2558 } IEM_MC_ENDIF(); 2559 2559 2560 2560 IEM_MC_ADVANCE_RIP_AND_FINISH();
Note:
See TracChangeset
for help on using the changeset viewer.