VirtualBox

Changeset 104136 in vbox


Ignore:
Timestamp:
Apr 3, 2024 1:22:57 PM (8 months ago)
Author:
vboxsync
Message:

VMM/IEM: Rework MXCSR handling for AVX instructions. See r162550 for an explanation, bugref:10641 [build fix]

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r104135 r104136  
    48974897        vmovdqu  xmm1, [A3]
    48984898        v %+ %1  xmm0, xmm0, xmm1
    4899         vmovdqu  [A1 + IEMAVX128RESULT.uResult], xmm0
     4899        vmovdqu  [A1], xmm0
    49004900
    49014901        SSE_AVX_ST_MXCSR R0_32, A0_32
     
    49124912        vmovdqu  ymm1, [A3]
    49134913        v %+ %1  ymm0, ymm0, ymm1
    4914         vmovdqu  [A1 + IEMAVX256RESULT.uResult], ymm0
     4914        vmovdqu  [A1], ymm0
    49154915
    49164916        SSE_AVX_ST_MXCSR R0_32, A0_32
     
    49274927        vmovdqu  xmm1, [A3]
    49284928        v %+ %1  xmm0, xmm1
    4929         vmovdqu  [A1 + IEMAVX128RESULT.uResult], xmm0
     4929        vmovdqu  [A1], xmm0
    49304930
    49314931        SSE_AVX_ST_MXCSR R0_32, A0_32
     
    49424942        vmovdqu  ymm1, [A3]
    49434943        v %+ %1  ymm0, ymm1
    4944         vmovdqu  [A1 + IEMAVX256RESULT.uResult], ymm0
     4944        vmovdqu  [A1], ymm0
    49454945
    49464946        SSE_AVX_ST_MXCSR R0_32, A0_32
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py

    r104075 r104136  
    619619
    620620### Statistics: List of variations (value) with aimpl_[^0] calls that is only missing this one statement (key).
    621 #g_dUnsupportedMcStmtLastOneAImplStats = {}
     621g_dUnsupportedMcStmtLastOneAImplStats = {}
    622622
    623623
     
    653653                g_dUnsupportedMcStmtLastOneStats[sStmt] = [oVariation,];
    654654
    655     #if (    len(dUnsupportedStmts) in (1,2)
    656     #    and iai.McStmt.findStmtByNames(aoStmts,
    657     #                                   { 'IEM_MC_CALL_AIMPL_3': 1,
    658     #                                     'IEM_MC_CALL_AIMPL_4': 1,
    659     #                                     #'IEM_MC_CALL_VOID_AIMPL_0': 1, - can't test results... ?
    660     #                                     'IEM_MC_CALL_VOID_AIMPL_1': 1,
    661     #                                     'IEM_MC_CALL_VOID_AIMPL_2': 1,
    662     #                                     'IEM_MC_CALL_VOID_AIMPL_3': 1,
    663     #                                     'IEM_MC_CALL_VOID_AIMPL_4': 1,
    664     #                                     #'IEM_MC_CALL_FPU_AIMPL_1': 1,
    665     #                                     #'IEM_MC_CALL_FPU_AIMPL_2': 1,
    666     #                                     #'IEM_MC_CALL_FPU_AIMPL_3': 1,
    667     #                                     #'IEM_MC_CALL_MMX_AIMPL_2': 1,
    668     #                                     #'IEM_MC_CALL_MMX_AIMPL_3': 1,
    669     #                                     #'IEM_MC_CALL_SSE_AIMPL_2': 1,
    670     #                                     #'IEM_MC_CALL_SSE_AIMPL_3': 1,
    671     #                                     #'IEM_MC_CALL_AVX_AIMPL_2': 1,
    672     #                                     #'IEM_MC_CALL_AVX_AIMPL_3': 1,
    673     #                                     #'IEM_MC_CALL_AVX_AIMPL_4': 1,
    674     #                                    })):
    675     #    for sStmt in dUnsupportedStmts:
    676     #        if sStmt in g_dUnsupportedMcStmtLastOneAImplStats:
    677     #            g_dUnsupportedMcStmtLastOneAImplStats[sStmt].append(oVariation);
    678     #        else:
    679     #            g_dUnsupportedMcStmtLastOneAImplStats[sStmt] = [oVariation,];
     655    if (    len(dUnsupportedStmts) in (1,2)
     656        and iai.McStmt.findStmtByNames(aoStmts,
     657                                       { 'IEM_MC_CALL_AIMPL_3': 1,
     658                                         'IEM_MC_CALL_AIMPL_4': 1,
     659                                         #'IEM_MC_CALL_VOID_AIMPL_0': 1, - can't test results... ?
     660                                         'IEM_MC_CALL_VOID_AIMPL_1': 1,
     661                                         'IEM_MC_CALL_VOID_AIMPL_2': 1,
     662                                         'IEM_MC_CALL_VOID_AIMPL_3': 1,
     663                                         'IEM_MC_CALL_VOID_AIMPL_4': 1,
     664                                         'IEM_MC_CALL_FPU_AIMPL_1': 1,
     665                                         'IEM_MC_CALL_FPU_AIMPL_2': 1,
     666                                         'IEM_MC_CALL_FPU_AIMPL_3': 1,
     667                                         'IEM_MC_CALL_MMX_AIMPL_2': 1,
     668                                         'IEM_MC_CALL_MMX_AIMPL_3': 1,
     669                                         'IEM_MC_CALL_SSE_AIMPL_2': 1,
     670                                         'IEM_MC_CALL_SSE_AIMPL_3': 1,
     671                                         'IEM_MC_CALL_AVX_AIMPL_2': 1,
     672                                         'IEM_MC_CALL_AVX_AIMPL_3': 1,
     673                                         'IEM_MC_CALL_AVX_AIMPL_4': 1,
     674                                         'IEM_MC_CALL_AVX_AIMPL_NEW_3': 1,
     675                                        })):
     676        for sStmt in dUnsupportedStmts:
     677            if sStmt in g_dUnsupportedMcStmtLastOneAImplStats:
     678                g_dUnsupportedMcStmtLastOneAImplStats[sStmt].append(oVariation);
     679            else:
     680                g_dUnsupportedMcStmtLastOneAImplStats[sStmt] = [oVariation,];
    680681
    681682    return None;
     
    720721    if g_dUnsupportedMcStmtLastOneStats:
    721722        asTopKeys = sorted(g_dUnsupportedMcStmtLastOneStats, reverse = True,
    722                            key = lambda sSortKey: len(g_dUnsupportedMcStmtLastOneStats[sSortKey]))[:16];
     723                           key = lambda sSortKey: len(g_dUnsupportedMcStmtLastOneStats[sSortKey]));
    723724        print('todo:', file = sys.stderr);
    724725        print('todo: Top %s variations with one unsupported statement dependency:' % (len(asTopKeys),),
     
    733734
    734735        asTopKeys = sorted(g_dUnsupportedMcStmtStats, reverse = True,
    735                            key = lambda sSortKey: g_dUnsupportedMcStmtStats[sSortKey])[:16];
     736                           key = lambda sSortKey: g_dUnsupportedMcStmtStats[sSortKey]);
    736737        print('todo:', file = sys.stderr);
    737738        print('todo: Top %d most used unimplemented statements:' % (len(asTopKeys),), file = sys.stderr);
     
    749750        print('todo:', file = sys.stderr);
    750751
    751     #if g_dUnsupportedMcStmtLastOneAImplStats:
    752     #    asTopKeys = sorted(g_dUnsupportedMcStmtLastOneAImplStats, reverse = True,
    753     #                       key = lambda sSortKey: len(g_dUnsupportedMcStmtLastOneAImplStats[sSortKey]))[:16];
    754     #    print('todo:', file = sys.stderr);
    755     #    print('todo: Top %s variations with AIMPL call and 1-2 unsupported statement dependencies:' % (len(asTopKeys),),
    756     #          file = sys.stderr);
    757     #    cchMaxKey = max([len(sKey) for sKey in asTopKeys]);
    758     #    for sKey in asTopKeys:
    759     #        print('todo: %*s = %s (%s%s)'
    760     #              % (cchMaxKey, sKey, len(g_dUnsupportedMcStmtLastOneAImplStats[sKey]),
    761     #                 ', '.join([oVar.getShortName() for oVar in g_dUnsupportedMcStmtLastOneAImplStats[sKey][:5]]),
    762     #                 ',...' if len(g_dUnsupportedMcStmtLastOneAImplStats[sKey]) >= 5 else '', )
    763     #                 , file = sys.stderr);
     752    if g_dUnsupportedMcStmtLastOneAImplStats:
     753        asTopKeys = sorted(g_dUnsupportedMcStmtLastOneAImplStats, reverse = True,
     754                           key = lambda sSortKey: len(g_dUnsupportedMcStmtLastOneAImplStats[sSortKey]));
     755        print('todo:', file = sys.stderr);
     756        print('todo: Top %s variations with AIMPL call and 1-2 unsupported statement dependencies:' % (len(asTopKeys),),
     757              file = sys.stderr);
     758        cchMaxKey = max([len(sKey) for sKey in asTopKeys]);
     759        for sKey in asTopKeys:
     760            print('todo: %*s = %s (%s%s)'
     761                  % (cchMaxKey, sKey, len(g_dUnsupportedMcStmtLastOneAImplStats[sKey]),
     762                     ', '.join([oVar.getShortName() for oVar in g_dUnsupportedMcStmtLastOneAImplStats[sKey][:5]]),
     763                     ',...' if len(g_dUnsupportedMcStmtLastOneAImplStats[sKey]) >= 5 else '', )
     764                     , file = sys.stderr);
    764765
    765766    return True;
Note: See TracChangeset for help on using the changeset viewer.

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