Changeset 66123 in vbox
- Timestamp:
- Mar 16, 2017 11:06:52 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66119 r66123 137 137 /** @} */ 138 138 139 /** Operand size (16, 32, 64, or 0). */140 uint8_t c BitsOp;139 /** Operand size in bytes (0 if not applicable). */ 140 uint8_t cbOperand; 141 141 /** Target ring (0..3). */ 142 142 uint8_t uCpl; … … 668 668 pThis->aOperands[0].cbOp = 2; 669 669 pThis->aOperands[1].cbOp = 2; 670 pThis->c BitsOp = 16;670 pThis->cbOperand = 2; 671 671 } 672 672 else … … 676 676 pThis->aOperands[0].cbOp = 4; 677 677 pThis->aOperands[1].cbOp = 4; 678 pThis->c BitsOp = 32;678 pThis->cbOperand = 4; 679 679 } 680 680 } … … 690 690 pThis->aOperands[0].cbOp = 2; 691 691 pThis->aOperands[1].cbOp = 2; 692 pThis->c BitsOp = 16;692 pThis->cbOperand = 2; 693 693 } 694 694 else … … 698 698 pThis->aOperands[0].cbOp = 4; 699 699 pThis->aOperands[1].cbOp = 4; 700 pThis->c BitsOp = 32;700 pThis->cbOperand = 2; 701 701 } 702 702 } … … 710 710 pThis->aOperands[0].cbOp = 8; 711 711 pThis->aOperands[1].cbOp = 4; 712 pThis->c BitsOp = 64;712 pThis->cbOperand = 8; 713 713 } 714 714 else … … 718 718 break; 719 719 720 case BS3CG1ENC_MODRM_Gv_Ev: 720 721 case BS3CG1ENC_MODRM_Ev_Gv: 721 case BS3CG1ENC_MODRM_Gv_Ev: 722 if (iEncoding == 0) 723 { 724 off = Bs3Cg1InsertOpcodes(pThis, 0); 725 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xBX, X86_GREG_xDX); 726 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBX; 727 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_OZ_RDX; 728 if (BS3_MODE_IS_16BIT_CODE(pThis->bMode)) 729 pThis->aOperands[0].cbOp = pThis->aOperands[1].cbOp = pThis->cbOperand = 2; 730 else 731 pThis->aOperands[0].cbOp = pThis->aOperands[1].cbOp = pThis->cbOperand = 4; 732 } 733 else if (iEncoding == 1 && (g_uBs3CpuDetected & BS3CPU_TYPE_MASK) >= BS3CPU_80386) 734 { 735 pThis->abCurInstr[0] = P_OZ; 736 off = Bs3Cg1InsertOpcodes(pThis, 1); 737 738 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xBX, X86_GREG_xDX); 739 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_OZ_RBX; 740 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_OZ_RDX; 741 if (!BS3_MODE_IS_16BIT_CODE(pThis->bMode)) 742 pThis->aOperands[0].cbOp = pThis->aOperands[1].cbOp = pThis->cbOperand = 2; 743 else 744 pThis->aOperands[0].cbOp = pThis->aOperands[1].cbOp = pThis->cbOperand = 4; 745 } 746 else if (iEncoding == 2 && BS3_MODE_IS_64BIT_CODE(pThis->bMode)) 747 { 748 pThis->abCurInstr[0] = REX_W___; 749 off = Bs3Cg1InsertOpcodes(pThis, 1); 750 751 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, X86_GREG_xBX, X86_GREG_xDX); 752 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_RBX; 753 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_RDX; 754 pThis->aOperands[0].cbOp = pThis->aOperands[1].cbOp = pThis->cbOperand = 8; 755 } 756 else 757 break; 758 pThis->cbCurInstr = off; 759 iEncoding++; 722 760 break; 723 761 724 case BS3CG1ENC_END: 725 case BS3CG1ENC_INVALID: 726 /* Impossible; to shut up gcc. */ 762 default: 763 Bs3TestFailedF("Internal error! BS3CG1ENC_XXX = %u not implemented", pThis->enmEncoding); 727 764 break; 728 765 } … … 836 873 if (a_Expr) return false; \ 837 874 break 838 CASE_PRED(BS3CG1PRED_SIZE_O16, pThis->c BitsOp == 16);839 CASE_PRED(BS3CG1PRED_SIZE_O32, pThis->c BitsOp == 32);840 CASE_PRED(BS3CG1PRED_SIZE_O64, pThis->c BitsOp == 64);875 CASE_PRED(BS3CG1PRED_SIZE_O16, pThis->cbOperand == 2); 876 CASE_PRED(BS3CG1PRED_SIZE_O32, pThis->cbOperand == 4); 877 CASE_PRED(BS3CG1PRED_SIZE_O64, pThis->cbOperand == 8); 841 878 CASE_PRED(BS3CG1PRED_RING_0, pThis->uCpl == 0); 842 879 CASE_PRED(BS3CG1PRED_RING_1, pThis->uCpl == 1); … … 975 1012 cbDst = pThis->aOperands[idxField - BS3CG1DST_OP1].cbOp; 976 1013 else if (cbDst == BS3CG1DSTSIZE_OPERAND_SIZE_GRP) 977 cbDst = pThis->c BitsOp / 8;1014 cbDst = pThis->cbOperand; 978 1015 if (cbDst <= 8) 979 1016 {
Note:
See TracChangeset
for help on using the changeset viewer.

