VirtualBox

vbox的更動 67004 路徑 trunk/src/VBox/ValidationKit


忽略:
時間撮記:
2017-5-22 上午10:20:28 (8 年 以前)
作者:
vboxsync
訊息:

IEM: movq Vq,Eq & movd Vd,Ed docs+tests+fixes.

位置:
trunk/src/VBox/ValidationKit/bootsectors
檔案:
修改 2 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c

    r67003 r67004  
    17871787
    17881788
     1789/* Differs from Bs3Cg1EncodeNext_MODRM_PdZx_WO_Ed_WZ in that REX.R isn't ignored. */
     1790static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Vd_WO_Ed_WZ(PBS3CG1STATE pThis, unsigned iEncoding)
     1791{
     1792    unsigned off;
     1793    switch (iEncoding)
     1794    {
     1795        case 0:
     1796            pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationReg;
     1797            off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1798            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0);
     1799            pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 0;
     1800            pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1;
     1801            break;
     1802        case 1:
     1803            off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1804            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 6, 2);
     1805            pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 2;
     1806            pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 6;
     1807            break;
     1808        case 2:
     1809            pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationMem;
     1810            off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1811            off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 4 /*iReg*/, 0 /*cbMisalign*/);
     1812            break;
     1813        case 3:
     1814            off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0));
     1815            off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 7 /*iReg*/, 1 /*cbMisalign*/);
     1816            break;
     1817
     1818        default:
     1819            return 0;
     1820    }
     1821    pThis->cbCurInstr = off;
     1822    return iEncoding + 1;
     1823}
     1824
     1825
     1826/* Differs from Bs3Cg1EncodeNext_MODRM_Pq_WO_Eq_WNZ in that REX.R isn't ignored. */
     1827static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Vq_WO_Eq_WNZ(PBS3CG1STATE pThis, unsigned iEncoding)
     1828{
     1829#if ARCH_BITS == 64
     1830    if (BS3CG1_IS_64BIT_TARGET(pThis))
     1831    {
     1832        unsigned off;
     1833        switch (iEncoding)
     1834        {
     1835            case 0:
     1836                pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationReg;
     1837                off = Bs3Cg1InsertReqPrefix(pThis, 0);
     1838                pThis->abCurInstr[off++] = REX_W___;
     1839                off = Bs3Cg1InsertOpcodes(pThis, off);
     1840                pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0);
     1841                pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 0;
     1842                pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1;
     1843                break;
     1844            case 1:
     1845                off = Bs3Cg1InsertReqPrefix(pThis, 0);
     1846                pThis->abCurInstr[off++] = REX_W___;
     1847                off = Bs3Cg1InsertOpcodes(pThis, off);
     1848                pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 6, 2);
     1849                pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 2;
     1850                pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 6;
     1851                break;
     1852            case 2:
     1853                pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationMem;
     1854                off = Bs3Cg1InsertReqPrefix(pThis, 0);
     1855                pThis->abCurInstr[off++] = REX_W___;
     1856                off = Bs3Cg1InsertOpcodes(pThis, off);
     1857                off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 4 /*iReg*/, 0 /*cbMisalign*/);
     1858                break;
     1859            case 3:
     1860                off = Bs3Cg1InsertReqPrefix(pThis, 0);
     1861                pThis->abCurInstr[off++] = REX_W___;
     1862                off = Bs3Cg1InsertOpcodes(pThis, off);
     1863                off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 7 /*iReg*/, 1 /*cbMisalign*/);
     1864                break;
     1865
     1866            default:
     1867                return 0;
     1868        }
     1869        pThis->cbCurInstr = off;
     1870        return iEncoding + 1;
     1871    }
     1872#endif
     1873    return 0;
     1874}
     1875
     1876
    17891877static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Vq_WO_UqHi(PBS3CG1STATE pThis, unsigned iEncoding)
    17901878{
     
    39013989            pThis->aOperands[1].cbOp = 8;
    39023990            pThis->aOperands[0].idxFieldBase   = BS3CG1DST_MM0;
     3991            pThis->aOperands[1].idxFieldBase   = BS3CG1DST_RAX;
     3992            pThis->aOperands[0].enmLocation    = BS3CG1OPLOC_CTX;
     3993            pThis->aOperands[1].enmLocation    = BS3CG1OPLOC_CTX;
     3994            pThis->aOperands[1].enmLocationReg = BS3CG1OPLOC_CTX;
     3995            pThis->aOperands[1].enmLocationMem = BS3CG1OPLOC_MEM;
     3996            break;
     3997
     3998        case BS3CG1ENC_MODRM_VdZx_WO_Ed_WZ:
     3999            pThis->pfnEncoder        = Bs3Cg1EncodeNext_MODRM_Vd_WO_Ed_WZ;
     4000            pThis->iRegOp            = 0;
     4001            pThis->iRmOp             = 1;
     4002            pThis->aOperands[0].cbOp = 4;
     4003            pThis->aOperands[1].cbOp = 4;
     4004            pThis->aOperands[0].idxFieldBase   = BS3CG1DST_XMM0_DW0_ZX;
     4005            pThis->aOperands[1].idxFieldBase   = BS3CG1DST_EAX;
     4006            pThis->aOperands[0].enmLocation    = BS3CG1OPLOC_CTX;
     4007            pThis->aOperands[1].enmLocation    = BS3CG1OPLOC_CTX;
     4008            pThis->aOperands[1].enmLocationReg = BS3CG1OPLOC_CTX;
     4009            pThis->aOperands[1].enmLocationMem = BS3CG1OPLOC_MEM;
     4010            break;
     4011
     4012        case BS3CG1ENC_MODRM_VqZx_WO_Eq_WNZ:
     4013            pThis->pfnEncoder        = Bs3Cg1EncodeNext_MODRM_Vq_WO_Eq_WNZ;
     4014            pThis->iRegOp            = 0;
     4015            pThis->iRmOp             = 1;
     4016            pThis->aOperands[0].cbOp = 8;
     4017            pThis->aOperands[1].cbOp = 8;
     4018            pThis->aOperands[0].idxFieldBase   = BS3CG1DST_XMM0_LO_ZX;
    39034019            pThis->aOperands[1].idxFieldBase   = BS3CG1DST_RAX;
    39044020            pThis->aOperands[0].enmLocation    = BS3CG1OPLOC_CTX;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h

    r67003 r67004  
    7878    BS3CG1OP_Usd,
    7979    BS3CG1OP_Usd_WO,
     80    BS3CG1OP_VdZx_WO,
    8081    BS3CG1OP_Vss,
    8182    BS3CG1OP_Vss_WO,
     
    143144    BS3CG1ENC_MODRM_PdZx_WO_Ed_WZ,
    144145    BS3CG1ENC_MODRM_Pq_WO_Eq_WNZ,
     146    BS3CG1ENC_MODRM_VdZx_WO_Ed_WZ,
    145147    BS3CG1ENC_MODRM_Vq_WO_UqHi,
    146148    BS3CG1ENC_MODRM_Vq_WO_Mq,
    147149    BS3CG1ENC_MODRM_VqHi_WO_Uq,
    148150    BS3CG1ENC_MODRM_VqHi_WO_Mq,
     151    BS3CG1ENC_MODRM_VqZx_WO_Eq_WNZ,
    149152    BS3CG1ENC_MODRM_Vdq_WO_Wdq,
    150153    BS3CG1ENC_MODRM_Vpd_WO_Wpd,
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette