VirtualBox

Changeset 104002 in vbox


Ignore:
Timestamp:
Mar 22, 2024 4:07:19 PM (14 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162389
Message:

ValKit/bs3-cpu-instr-2: Added shl,shr,sar,rol,ror,rcl&rcr tests (only intel data). [gcc fixes] bugref:10376

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-gen-asm.asm

    r104000 r104002  
    4646%ifdef ASM_CALL64_MSC
    4747 %define EFLAGS_PARAM_REG   r8d
    48  %define EFLAGS_PARAM_REG64 r8
    4948%else
    50  %define EFLAGS_PARAM_REG   ecx
    51  %define EFLAGS_PARAM_REG64 rcx
     49 %define EFLAGS_PARAM_REG   edx
    5250%endif
    5351
     
    6159 %if %3 != 0
    6260BEGINPROC   GenU8_ %+ %1
     61  %ifdef ASM_CALL64_GCC
     62        mov     r9, rcx
     63        mov     r8, rdx
     64        mov     rdx, rsi
     65        mov     rcx, rdi
     66  %endif
    6367  %if %2 != 0
    6468        lahf
    6569        and     ah, 0xfe
    66         shl     EFLAGS_PARAM_REG, 8
    67         or      eax, EFLAGS_PARAM_REG
     70        shl     r8d, 8
     71        or      eax, r8d
    6872        sahf
    6973  %endif
    70   %ifdef ASM_CALL64_MSC
    7174        %1      cl, dl
    7275        mov     [r9], cl
    73   %else
    74         %1      sil, dil
    75         mov     [rdx], sil
    76   %endif
    7776        pushf
    7877        pop     rax
     
    8281
    8382BEGINPROC   GenU16_ %+ %1
     83 %ifdef ASM_CALL64_GCC
     84        mov     r9, rcx
     85        mov     r8, rdx
     86        mov     rdx, rsi
     87        mov     rcx, rdi
     88 %endif
    8489 %if %2 != 0
    8590        lahf
    8691        and     ah, 0xfe
    87         shl     EFLAGS_PARAM_REG, 8
    88         or      eax, EFLAGS_PARAM_REG
     92        shl     r8d, 8
     93        or      eax, r8d
    8994        sahf
    9095 %endif
    91  %ifdef ASM_CALL64_MSC
    9296        %1      cx, dx
    9397        mov     [r9], cx
    94  %else
    95         %1      si, di
    96         mov     [rdx], si
    97  %endif
    9898        pushf
    9999        pop     rax
     
    102102
    103103BEGINPROC   GenU32_ %+ %1
     104 %ifdef ASM_CALL64_GCC
     105        mov     r9, rcx
     106        mov     r8, rdx
     107        mov     rdx, rsi
     108        mov     rcx, rdi
     109 %endif
    104110 %if %2 != 0
    105111        lahf
    106112        and     ah, 0xfe
    107         shl     EFLAGS_PARAM_REG, 8
    108         or      eax, EFLAGS_PARAM_REG
     113        shl     r8d, 8
     114        or      eax, r8d
    109115        sahf
    110116 %endif
    111  %ifdef ASM_CALL64_MSC
    112117        %1      ecx, edx
    113118        mov     [r9], ecx
    114  %else
    115         %1      esi, edi
    116         mov     [rdx], esi
    117  %endif
    118119        pushf
    119120        pop     rax
     
    122123
    123124BEGINPROC   GenU64_ %+ %1
     125 %ifdef ASM_CALL64_GCC
     126        mov     r9, rcx
     127        mov     r8, rdx
     128        mov     rdx, rsi
     129        mov     rcx, rdi
     130 %endif
    124131 %if %2 != 0
    125132        lahf
    126133        and     ah, 0xfe
    127         shl     EFLAGS_PARAM_REG, 8
    128         or      eax, EFLAGS_PARAM_REG
     134        shl     r8d, 8
     135        or      eax, r8d
    129136        sahf
    130137 %endif
    131  %ifdef ASM_CALL64_MSC
    132138        %1      rcx, rdx
    133139        mov     [r9], rcx
    134  %else
    135         %1      rsi, rdi
    136         mov     [rdx], rsi
    137  %endif
    138140        pushf
    139141        pop     rax
     
    166168
    167169BEGINPROC   GenU8_ %+ %1
    168         pushf
    169         and     dword [rsp], ~X86_EFL_STATUS_BITS
    170         or      dword [rsp], EFLAGS_PARAM_REG
    171         popf
    172  %ifdef ASM_CALL64_MSC
    173         xchg    cl, dl
     170 %ifdef ASM_CALL64_GCC
     171        mov     r9, rcx
     172        mov     r8, rdx
     173        mov     rdx, rsi
     174        mov     rcx, rdi
     175 %endif
     176        pushf
     177        and     dword [rsp], ~X86_EFL_STATUS_BITS
     178        or      dword [rsp], r8d
     179        popf
     180        xchg    rcx, rdx
    174181        %1      dl, cl
    175182        mov     [r9], dl
    176  %else
    177         mov     cl, dil
    178         %1      sil, cl
    179         mov     [rdx], sil
    180  %endif
    181183        pushf
    182184        pop     rax
     
    185187
    186188BEGINPROC   GenU16_ %+ %1
    187         pushf
    188         and     dword [rsp], ~X86_EFL_STATUS_BITS
    189         or      dword [rsp], EFLAGS_PARAM_REG
    190         popf
    191  %ifdef ASM_CALL64_MSC
     189 %ifdef ASM_CALL64_GCC
     190        mov     r9, rcx
     191        mov     r8, rdx
     192        mov     rdx, rsi
     193        mov     rcx, rdi
     194 %endif
     195        pushf
     196        and     dword [rsp], ~X86_EFL_STATUS_BITS
     197        or      dword [rsp], r8d
     198        popf
    192199        xchg    cx, dx
    193200        %1      dx, cl
    194201        mov     [r9], dx
    195  %else
    196         mov     cl, dil
    197         %1      si, cl
    198         mov     [rdx], si
    199  %endif
    200202        pushf
    201203        pop     rax
     
    204206
    205207BEGINPROC   GenU32_ %+ %1
    206         pushf
    207         and     dword [rsp], ~X86_EFL_STATUS_BITS
    208         or      dword [rsp], EFLAGS_PARAM_REG
    209         popf
    210  %ifdef ASM_CALL64_MSC
    211         xchg    ecx, edx
     208 %ifdef ASM_CALL64_GCC
     209        mov     r9, rcx
     210        mov     r8, rdx
     211        mov     rdx, rsi
     212        mov     rcx, rdi
     213 %endif
     214        pushf
     215        and     dword [rsp], ~X86_EFL_STATUS_BITS
     216        or      dword [rsp], r8d
     217        popf
     218        xchg    rcx, rdx
    212219        %1      edx, cl
    213220        mov     [r9], edx
    214  %else
    215         mov     cl, dil
    216         %1      esi, cl
    217         mov     [rdx], esi
    218  %endif
    219221        pushf
    220222        pop     rax
     
    223225
    224226BEGINPROC   GenU64_ %+ %1
    225         pushf
    226         and     dword [rsp], ~X86_EFL_STATUS_BITS
    227         or      dword [rsp], EFLAGS_PARAM_REG
    228         popf
    229  %ifdef ASM_CALL64_MSC
     227 %ifdef ASM_CALL64_GCC
     228        mov     r9, rcx
     229        mov     r8, rdx
     230        mov     rdx, rsi
     231        mov     rcx, rdi
     232 %endif
     233        pushf
     234        and     dword [rsp], ~X86_EFL_STATUS_BITS
     235        or      dword [rsp], r8d
     236        popf
    230237        xchg    rcx, rdx
    231238        %1      rdx, cl
    232239        mov     [r9], rdx
    233  %else
    234         mov     cl, dil
    235         %1      rsi, cl
    236         mov     [rdx], rsi
    237  %endif
    238240        pushf
    239241        pop     rax
     
    243245
    244246BEGINPROC   GenU8_ %+ %1 %+ _Ib
    245         pushf
    246         and     dword [rsp], ~X86_EFL_STATUS_BITS
    247         or      dword [rsp], EFLAGS_PARAM_REG
    248         popf
    249 
    250  %ifdef ASM_CALL64_MSC
     247 %ifdef ASM_CALL64_GCC
     248        mov     r9, rcx
     249        mov     r8, rdx
     250        mov     rdx, rsi
     251        mov     rcx, rdi
     252 %endif
     253        pushf
     254        and     dword [rsp], ~X86_EFL_STATUS_BITS
     255        or      dword [rsp], r8d
     256        popf
     257
    251258        movzx   r11d, dl
    252259        mov     al, cl
    253260        mov     rdx, r9
    254  %else
    255         movzx   r11d, sil
    256         mov     al, dil
    257         ;mov     rdx, rdx
    258  %endif
     261
    259262        lea     r10, [.first_imm wrt rip]
    260263        lea     r10, [r10 + r11 * 8]        ;; @todo assert that the entry size is 8 bytes
     
    280283
    281284BEGINPROC   GenU16_ %+ %1 %+ _Ib
    282         pushf
    283         and     dword [rsp], ~X86_EFL_STATUS_BITS
    284         or      dword [rsp], EFLAGS_PARAM_REG
    285         popf
    286 
    287  %ifdef ASM_CALL64_MSC
     285 %ifdef ASM_CALL64_GCC
     286        mov     r9, rcx
     287        mov     r8, rdx
     288        mov     rdx, rsi
     289        mov     rcx, rdi
     290 %endif
     291        pushf
     292        and     dword [rsp], ~X86_EFL_STATUS_BITS
     293        or      dword [rsp], r8d
     294        popf
     295
    288296        movzx   r11d, dl
    289297        mov     ax, cx
    290298        mov     rdx, r9
    291  %else
    292         movzx   r11d, sil
    293         mov     ax, di
    294         ;mov     rdx, rdx
    295  %endif
     299
    296300        lea     r10, [.first_imm wrt rip]
    297301        lea     r10, [r10 + r11]            ;; @todo assert that the entry size is 9 bytes
     
    318322
    319323BEGINPROC   GenU32_ %+ %1 %+ _Ib
    320         pushf
    321         and     dword [rsp], ~X86_EFL_STATUS_BITS
    322         or      dword [rsp], EFLAGS_PARAM_REG
    323         popf
    324 
    325  %ifdef ASM_CALL64_MSC
     324 %ifdef ASM_CALL64_GCC
     325        mov     r9, rcx
     326        mov     r8, rdx
     327        mov     rdx, rsi
     328        mov     rcx, rdi
     329 %endif
     330        pushf
     331        and     dword [rsp], ~X86_EFL_STATUS_BITS
     332        or      dword [rsp], r8d
     333        popf
     334
    326335        movzx   r11d, dl
    327336        mov     eax, ecx
    328337        mov     rdx, r9
    329  %else
    330         movzx   r11d, sil
    331         mov     eax, edi
    332         ;mov     rdx, rdx
    333  %endif
     338
    334339        lea     r10, [.first_imm wrt rip]
    335340        lea     r10, [r10 + r11 * 8]        ;; @todo assert that the entry size is 8 bytes
     
    355360
    356361BEGINPROC   GenU64_ %+ %1 %+ _Ib
    357         pushf
    358         and     dword [rsp], ~X86_EFL_STATUS_BITS
    359         or      dword [rsp], EFLAGS_PARAM_REG
    360         popf
    361 
    362  %ifdef ASM_CALL64_MSC
     362 %ifdef ASM_CALL64_GCC
     363        mov     r9, rcx
     364        mov     r8, rdx
     365        mov     rdx, rsi
     366        mov     rcx, rdi
     367 %endif
     368        pushf
     369        and     dword [rsp], ~X86_EFL_STATUS_BITS
     370        or      dword [rsp], r8d
     371        popf
     372
    363373        movzx   r11d, dl
    364374        mov     rax, rcx
    365375        mov     rdx, r9
    366  %else
    367         movzx   r11d, sil
    368         mov     rax, rdi
    369         ;mov     rdx, rdx
    370  %endif
     376
    371377        lea     r10, [.first_imm wrt rip]
    372378        lea     r10, [r10 + r11]            ;; @todo assert that the entry size is 9 bytes
Note: See TracChangeset for help on using the changeset viewer.

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