VirtualBox

Changeset 102882 in vbox for trunk


Ignore:
Timestamp:
Jan 16, 2024 12:37:36 AM (9 months ago)
Author:
vboxsync
Message:

VMM/IEM: Skip some expensive flag loading in IEMAllAImpl.asm where possible. bugref:10371

File:
1 edited

Legend:

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

    r102817 r102882  
    281281; @param        2       The set of modified flags.
    282282; @param        3       The set of undefined flags.
    283 ;
    284 %macro IEM_MAYBE_LOAD_FLAGS 3
    285  ;%if (%3) != 0
     283; @param        4       Force loading the flags.
     284;
     285%macro IEM_MAYBE_LOAD_FLAGS 3-4 1
     286 %if (%3 + %4) != 0
    286287        pushf                           ; store current flags
    287288        mov     T0_32, [%1]             ; load the guest flags
     
    290291        or      [xSP], T0               ; merge guest flags with host flags.
    291292        popf                            ; load the mixed flags.
    292  ;%endif
     293 %endif
    293294%endmacro
    294295
     
    493494; @param        3       The modified flags.
    494495; @param        4       The undefined flags.
    495 ;
    496 %macro IEMIMPL_BIN_OP 4
     496; @param        5       Force flag loading (ADC, SBC).
     497;
     498%macro IEMIMPL_BIN_OP 5
    497499BEGINCODE
    498500BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8, 12
    499501        PROLOGUE_3_ARGS
    500         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     502        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    501503        %1      byte [A0], A1_8
    502504        IEM_SAVE_FLAGS                 A2, %3, %4
     
    506508BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12
    507509        PROLOGUE_3_ARGS
    508         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     510        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    509511        %1      word [A0], A1_16
    510512        IEM_SAVE_FLAGS                 A2, %3, %4
     
    514516BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12
    515517        PROLOGUE_3_ARGS
    516         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     518        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    517519        %1      dword [A0], A1_32
    518520        IEM_SAVE_FLAGS                 A2, %3, %4
     
    523525BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16
    524526        PROLOGUE_3_ARGS
    525         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     527        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    526528        %1      qword [A0], A1
    527529        IEM_SAVE_FLAGS                 A2, %3, %4
     
    534536BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8_locked, 12
    535537        PROLOGUE_3_ARGS
    536         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     538        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    537539        lock %1 byte [A0], A1_8
    538540        IEM_SAVE_FLAGS                 A2, %3, %4
     
    542544BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16_locked, 12
    543545        PROLOGUE_3_ARGS
    544         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     546        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    545547        lock %1 word [A0], A1_16
    546548        IEM_SAVE_FLAGS                 A2, %3, %4
     
    550552BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32_locked, 12
    551553        PROLOGUE_3_ARGS
    552         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     554        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    553555        lock %1 dword [A0], A1_32
    554556        IEM_SAVE_FLAGS                 A2, %3, %4
     
    559561BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 16
    560562        PROLOGUE_3_ARGS
    561         IEM_MAYBE_LOAD_FLAGS           A2, %3, %4
     563        IEM_MAYBE_LOAD_FLAGS           A2, %3, %4, %5
    562564        lock %1 qword [A0], A1
    563565        IEM_SAVE_FLAGS                 A2, %3, %4
     
    568570%endmacro
    569571
    570 ;            instr,lock, modified-flags,                                                               undefined flags
    571 IEMIMPL_BIN_OP add,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
    572 IEMIMPL_BIN_OP adc,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
    573 IEMIMPL_BIN_OP sub,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
    574 IEMIMPL_BIN_OP sbb,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
    575 IEMIMPL_BIN_OP or,   1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF
    576 IEMIMPL_BIN_OP xor,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF
    577 IEMIMPL_BIN_OP and,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF
    578 IEMIMPL_BIN_OP cmp,  0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
    579 IEMIMPL_BIN_OP test, 0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF
     572;            instr,lock, modified-flags,                                                               undefined flags, force loading flags
     573IEMIMPL_BIN_OP add,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0,               0
     574IEMIMPL_BIN_OP adc,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0,               1
     575IEMIMPL_BIN_OP sub,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0,               0
     576IEMIMPL_BIN_OP sbb,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0,               1
     577IEMIMPL_BIN_OP or,   1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF,      0
     578IEMIMPL_BIN_OP xor,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF,      0
     579IEMIMPL_BIN_OP and,  1, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF,      0
     580IEMIMPL_BIN_OP cmp,  0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0,               0
     581IEMIMPL_BIN_OP test, 0, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF),              X86_EFL_AF,      0
    580582
    581583
     
    658660%endmacro
    659661
    660 ;                  instr,  modified-flags,                                      undefined-flags
     662;                    instr,  modified-flags,                                      undefined-flags
    661663IEMIMPL_VEX_BIN_OP_2 blsr,   (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_CF), (X86_EFL_AF | X86_EFL_PF)
    662664IEMIMPL_VEX_BIN_OP_2 blsmsk, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_CF), (X86_EFL_AF | X86_EFL_PF)
     
    925927 %endif ; locked
    926928%endmacro
     929;                      modified efl, undefined eflags
    927930IEMIMPL_BIT_OP bt,  0, (X86_EFL_CF), (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF)
    928931IEMIMPL_BIT_OP btc, 1, (X86_EFL_CF), (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF)
     
    11041107BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12
    11051108        PROLOGUE_3_ARGS
    1106         IEM_MAYBE_LOAD_FLAGS           A2, %2, %3
     1109        IEM_MAYBE_LOAD_FLAGS           A2, %2, %3, 0
    11071110        %1      T0_16, A1_16
    11081111        mov     [A0], T0_16
     
    11131116BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12
    11141117        PROLOGUE_3_ARGS
    1115         IEM_MAYBE_LOAD_FLAGS           A2, %2, %3
     1118        IEM_MAYBE_LOAD_FLAGS           A2, %2, %3, 0
    11161119        %1      T0_32, A1_32
    11171120        mov     [A0], T0_32
     
    11231126BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16
    11241127        PROLOGUE_3_ARGS
    1125         IEM_MAYBE_LOAD_FLAGS           A2, %2, %3
     1128        IEM_MAYBE_LOAD_FLAGS           A2, %2, %3, 0
    11261129        %1      T0, A1
    11271130        mov     [A0], T0
     
    12831286BEGINPROC_FASTCALL iemAImpl_xadd_u8, 12
    12841287        PROLOGUE_3_ARGS
    1285         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1288        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    12861289        mov     T0_8, [A1]
    12871290        xadd    [A0], T0_8
     
    12931296BEGINPROC_FASTCALL iemAImpl_xadd_u16, 12
    12941297        PROLOGUE_3_ARGS
    1295         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1298        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    12961299        mov     T0_16, [A1]
    12971300        xadd    [A0], T0_16
     
    13031306BEGINPROC_FASTCALL iemAImpl_xadd_u32, 12
    13041307        PROLOGUE_3_ARGS
    1305         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1308        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    13061309        mov     T0_32, [A1]
    13071310        xadd    [A0], T0_32
     
    13141317BEGINPROC_FASTCALL iemAImpl_xadd_u64, 12
    13151318        PROLOGUE_3_ARGS
    1316         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1319        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    13171320        mov     T0, [A1]
    13181321        xadd    [A0], T0
     
    13251328BEGINPROC_FASTCALL iemAImpl_xadd_u8_locked, 12
    13261329        PROLOGUE_3_ARGS
    1327         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1330        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    13281331        mov     T0_8, [A1]
    13291332        lock xadd [A0], T0_8
     
    13351338BEGINPROC_FASTCALL iemAImpl_xadd_u16_locked, 12
    13361339        PROLOGUE_3_ARGS
    1337         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1340        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    13381341        mov     T0_16, [A1]
    13391342        lock xadd [A0], T0_16
     
    13451348BEGINPROC_FASTCALL iemAImpl_xadd_u32_locked, 12
    13461349        PROLOGUE_3_ARGS
    1347         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1350        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    13481351        mov     T0_32, [A1]
    13491352        lock xadd [A0], T0_32
     
    13561359BEGINPROC_FASTCALL iemAImpl_xadd_u64_locked, 12
    13571360        PROLOGUE_3_ARGS
    1358         IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0
     1361        IEM_MAYBE_LOAD_FLAGS A2, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF), 0, 0
    13591362        mov     T0, [A1]
    13601363        lock xadd [A0], T0
     
    13911394        mov     ebx, [r8]
    13921395        mov     ecx, [r8 + 4]
    1393         IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1396        IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    13941397        mov     eax, [r11]
    13951398        mov     edx, [r11 + 4]
     
    14111414        mov     ebx, [r11]
    14121415        mov     ecx, [r11 + 4]
    1413         IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1416        IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    14141417        mov     eax, [rsi]
    14151418        mov     edx, [rsi + 4]
     
    14381441        mov     ebx, [ecx]
    14391442        mov     ecx, [ecx + 4]
    1440         IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0  ; clobbers T0 (eax)
     1443        IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    14411444        mov     eax, [esi]
    14421445        mov     edx, [esi + 4]
     
    14661469        mov     ebx, [r8]
    14671470        mov     ecx, [r8 + 4]
    1468         IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1471        IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    14691472        mov     eax, [r11]
    14701473        mov     edx, [r11 + 4]
     
    14861489        mov     ebx, [r11]
    14871490        mov     ecx, [r11 + 4]
    1488         IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1491        IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    14891492        mov     eax, [rsi]
    14901493        mov     edx, [rsi + 4]
     
    15131516        mov     ebx, [ecx]
    15141517        mov     ecx, [ecx + 4]
    1515         IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0  ; clobbers T0 (eax)
     1518        IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    15161519        mov     eax, [esi]
    15171520        mov     edx, [esi + 4]
     
    15571560        mov     rbx, [r8]
    15581561        mov     rcx, [r8 + 8]
    1559         IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1562        IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    15601563        mov     rax, [r11]
    15611564        mov     rdx, [r11 + 8]
     
    15771580        mov     rbx, [r11]
    15781581        mov     rcx, [r11 + 8]
    1579         IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1582        IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    15801583        mov     rax, [rsi]
    15811584        mov     rdx, [rsi + 8]
     
    16021605        mov     rbx, [r8]
    16031606        mov     rcx, [r8 + 8]
    1604         IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1607        IEM_MAYBE_LOAD_FLAGS r9, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    16051608        mov     rax, [r11]
    16061609        mov     rdx, [r11 + 8]
     
    16221625        mov     rbx, [r11]
    16231626        mov     rcx, [r11 + 8]
    1624         IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0 ; clobbers T0 (eax)
     1627        IEM_MAYBE_LOAD_FLAGS r10, (X86_EFL_ZF), 0, 0 ; clobbers T0 (eax)
    16251628        mov     rax, [rsi]
    16261629        mov     rdx, [rsi + 8]
     
    16531656BEGINPROC_FASTCALL iemAImpl_cmpxchg_u8 %+ %2, 16
    16541657        PROLOGUE_4_ARGS
    1655         IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)
     1658        IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax)
    16561659        mov     al, [A1]
    16571660        %1 cmpxchg [A0], A2_8
     
    16631666BEGINPROC_FASTCALL iemAImpl_cmpxchg_u16 %+ %2, 16
    16641667        PROLOGUE_4_ARGS
    1665         IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)
     1668        IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax)
    16661669        mov     ax, [A1]
    16671670        %1 cmpxchg [A0], A2_16
     
    16731676BEGINPROC_FASTCALL iemAImpl_cmpxchg_u32 %+ %2, 16
    16741677        PROLOGUE_4_ARGS
    1675         IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)
     1678        IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax)
    16761679        mov     eax, [A1]
    16771680        %1 cmpxchg [A0], A2_32
     
    16841687%ifdef RT_ARCH_AMD64
    16851688        PROLOGUE_4_ARGS
    1686         IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0 ; clobbers T0 (eax)
     1689        IEM_MAYBE_LOAD_FLAGS A3, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0 ; clobbers T0 (eax)
    16871690        mov     rax, [A1]
    16881691        %1 cmpxchg [A0], A2
     
    17061709        mov     ebx, [ecx]
    17071710        mov     ecx, [ecx + 4]
    1708         IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0  ; clobbers T0 (eax)
     1711        IEM_MAYBE_LOAD_FLAGS ebp, (X86_EFL_ZF | X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF), 0, 0  ; clobbers T0 (eax)
    17091712        mov     eax, [esi]
    17101713        mov     edx, [esi + 4]
     
    17141717        ; cmpxchg8b doesn't set CF, PF, AF, SF and OF, so we have to do that.
    17151718        jz      .cmpxchg8b_not_equal
     1719;; @todo this isn't correct. Need to do a 64-bit compare, not just the lower 32-bit.
    17161720        cmp     eax, eax                ; just set the other flags.
    17171721.store:
     
    17571761BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8, 8
    17581762        PROLOGUE_2_ARGS
    1759         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1763        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    17601764        %1      byte [A0]
    17611765        IEM_SAVE_FLAGS       A1, %2, %3
     
    17651769BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8_locked, 8
    17661770        PROLOGUE_2_ARGS
    1767         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1771        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    17681772        lock %1 byte [A0]
    17691773        IEM_SAVE_FLAGS       A1, %2, %3
     
    17731777BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 8
    17741778        PROLOGUE_2_ARGS
    1775         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1779        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    17761780        %1      word [A0]
    17771781        IEM_SAVE_FLAGS       A1, %2, %3
     
    17811785BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16_locked, 8
    17821786        PROLOGUE_2_ARGS
    1783         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1787        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    17841788        lock %1 word [A0]
    17851789        IEM_SAVE_FLAGS       A1, %2, %3
     
    17891793BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 8
    17901794        PROLOGUE_2_ARGS
    1791         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1795        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    17921796        %1      dword [A0]
    17931797        IEM_SAVE_FLAGS       A1, %2, %3
     
    17971801BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32_locked, 8
    17981802        PROLOGUE_2_ARGS
    1799         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1803        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    18001804        lock %1 dword [A0]
    18011805        IEM_SAVE_FLAGS       A1, %2, %3
     
    18061810BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 8
    18071811        PROLOGUE_2_ARGS
    1808         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1812        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    18091813        %1      qword [A0]
    18101814        IEM_SAVE_FLAGS       A1, %2, %3
     
    18141818BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64_locked, 8
    18151819        PROLOGUE_2_ARGS
    1816         IEM_MAYBE_LOAD_FLAGS A1, %2, %3
     1820        IEM_MAYBE_LOAD_FLAGS A1, %2, %3, 0
    18171821        lock %1 qword [A0]
    18181822        IEM_SAVE_FLAGS       A1, %2, %3
     
    18841888; @param        2       The modified flags.
    18851889; @param        3       The undefined flags.
     1890; @param        4       Force load flags.
    18861891;
    18871892; Makes ASSUMPTIONS about A0, A1 and A2 assignments.
     
    18891894; @note the _intel and _amd variants are implemented in C.
    18901895;
    1891 %macro IEMIMPL_SHIFT_OP 3
     1896%macro IEMIMPL_SHIFT_OP 4
    18921897BEGINCODE
    18931898BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u8, 12
    18941899        PROLOGUE_3_ARGS
    1895         IEM_MAYBE_LOAD_FLAGS A2, %2, %3
     1900        IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4
    18961901 %ifdef ASM_CALL64_GCC
    18971902        mov     cl, A1_8
     
    19071912BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12
    19081913        PROLOGUE_3_ARGS
    1909         IEM_MAYBE_LOAD_FLAGS A2, %2, %3
     1914        IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4
    19101915 %ifdef ASM_CALL64_GCC
    19111916        mov     cl, A1_8
     
    19211926BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12
    19221927        PROLOGUE_3_ARGS
    1923         IEM_MAYBE_LOAD_FLAGS A2, %2, %3
     1928        IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4
    19241929 %ifdef ASM_CALL64_GCC
    19251930        mov     cl, A1_8
     
    19361941BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 12
    19371942        PROLOGUE_3_ARGS
    1938         IEM_MAYBE_LOAD_FLAGS A2, %2, %3
     1943        IEM_MAYBE_LOAD_FLAGS A2, %2, %3, %4
    19391944  %ifdef ASM_CALL64_GCC
    19401945        mov     cl, A1_8
     
    19511956%endmacro
    19521957
    1953 IEMIMPL_SHIFT_OP rol, (X86_EFL_OF | X86_EFL_CF), 0
    1954 IEMIMPL_SHIFT_OP ror, (X86_EFL_OF | X86_EFL_CF), 0
    1955 IEMIMPL_SHIFT_OP rcl, (X86_EFL_OF | X86_EFL_CF), 0
    1956 IEMIMPL_SHIFT_OP rcr, (X86_EFL_OF | X86_EFL_CF), 0
    1957 IEMIMPL_SHIFT_OP shl, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF)
    1958 IEMIMPL_SHIFT_OP shr, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF)
    1959 IEMIMPL_SHIFT_OP sar, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF)
     1958;; @todo some questions wrt flags when the shift count is high according to intel docs...
     1959IEMIMPL_SHIFT_OP rol, (X86_EFL_OF | X86_EFL_CF), 0,                                                   X86_EFL_CF
     1960IEMIMPL_SHIFT_OP ror, (X86_EFL_OF | X86_EFL_CF), 0,                                                   X86_EFL_CF
     1961IEMIMPL_SHIFT_OP rcl, (X86_EFL_OF | X86_EFL_CF), 0,                                                   X86_EFL_CF
     1962IEMIMPL_SHIFT_OP rcr, (X86_EFL_OF | X86_EFL_CF), 0,                                                   X86_EFL_CF
     1963IEMIMPL_SHIFT_OP shl, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF), 0
     1964IEMIMPL_SHIFT_OP shr, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF), 0
     1965IEMIMPL_SHIFT_OP sar, (X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF), (X86_EFL_AF), 0
    19601966
    19611967
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