VirtualBox

Ignore:
Timestamp:
Nov 22, 2024 7:56:43 AM (3 months ago)
Author:
vboxsync
Message:

ValidationKit/bootsectors: Save some image space by coalescing format strings & code; bugref:9898; bugref:10658; jiraref:VBP-1207

Save about 4K in bs3-cpu-instr-2, 2K in bs3-cpu-instr-3 -- enough to turn on asserts

File:
1 edited

Legend:

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

    r104002 r107101  
    4444BEGINCODE
    4545
    46 %ifdef ASM_CALL64_MSC
    47  %define EFLAGS_PARAM_REG   r8d
    48 %else
    49  %define EFLAGS_PARAM_REG   edx
     46preface_0:
     47%ifdef ASM_CALL64_GCC
     48        mov     r9, rcx
     49        mov     r8, rdx
     50        mov     rdx, rsi
     51        mov     rcx, rdi
    5052%endif
    51 
     53        ret
     54
     55preface_1:
     56%ifdef ASM_CALL64_GCC
     57        mov     r9, rcx
     58        mov     r8, rdx
     59        mov     rdx, rsi
     60        mov     rcx, rdi
     61%endif
     62        lahf
     63        and     ah, 0xfe
     64        shl     r8d, 8
     65        or      eax, r8d
     66        sahf
     67        ret
     68
     69preface_2:
     70%ifdef ASM_CALL64_GCC
     71        mov     r9, rcx
     72        mov     r8, rdx
     73        mov     rdx, rsi
     74        mov     rcx, rdi
     75%endif
     76        pushf
     77        and     dword [rsp], ~X86_EFL_STATUS_BITS
     78        or      dword [rsp], r8d
     79        popf
     80        ret
     81
     82;;
     83; @param 1 which preface to use:
     84;        0 = no flags meddling
     85;        1 = takes carry flag in
     86;        2 = takes entire flags register in
     87%macro DO_PREFACE 1
     88        call    preface_ %+ %1
     89%endmacro
    5290
    5391;;
     
    5997 %if %3 != 0
    6098BEGINPROC   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
    67   %if %2 != 0
    68         lahf
    69         and     ah, 0xfe
    70         shl     r8d, 8
    71         or      eax, r8d
    72         sahf
    73   %endif
     99        DO_PREFACE %2
    74100        %1      cl, dl
    75101        mov     [r9], cl
     
    81107
    82108BEGINPROC   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
    89  %if %2 != 0
    90         lahf
    91         and     ah, 0xfe
    92         shl     r8d, 8
    93         or      eax, r8d
    94         sahf
    95  %endif
     109        DO_PREFACE %2
    96110        %1      cx, dx
    97111        mov     [r9], cx
     
    102116
    103117BEGINPROC   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
    110  %if %2 != 0
    111         lahf
    112         and     ah, 0xfe
    113         shl     r8d, 8
    114         or      eax, r8d
    115         sahf
    116  %endif
     118        DO_PREFACE %2
    117119        %1      ecx, edx
    118120        mov     [r9], ecx
     
    123125
    124126BEGINPROC   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
    131  %if %2 != 0
    132         lahf
    133         and     ah, 0xfe
    134         shl     r8d, 8
    135         or      eax, r8d
    136         sahf
    137  %endif
     127        DO_PREFACE %2
    138128        %1      rcx, rdx
    139129        mov     [r9], rcx
     
    168158
    169159BEGINPROC   GenU8_ %+ %1
    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
     160        DO_PREFACE 2
    180161        xchg    rcx, rdx
    181162        %1      dl, cl
     
    187168
    188169BEGINPROC   GenU16_ %+ %1
    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
     170        DO_PREFACE 2
    199171        xchg    cx, dx
    200172        %1      dx, cl
     
    206178
    207179BEGINPROC   GenU32_ %+ %1
    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
     180        DO_PREFACE 2
    218181        xchg    rcx, rdx
    219182        %1      edx, cl
     
    225188
    226189BEGINPROC   GenU64_ %+ %1
    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
     190        DO_PREFACE 2
    237191        xchg    rcx, rdx
    238192        %1      rdx, cl
     
    245199
    246200BEGINPROC   GenU8_ %+ %1 %+ _Ib
    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 
     201        DO_PREFACE 2
    258202        movzx   r11d, dl
    259203        mov     al, cl
     
    283227
    284228BEGINPROC   GenU16_ %+ %1 %+ _Ib
    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 
     229        DO_PREFACE 2
    296230        movzx   r11d, dl
    297231        mov     ax, cx
     
    322256
    323257BEGINPROC   GenU32_ %+ %1 %+ _Ib
    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 
     258        DO_PREFACE 2
    335259        movzx   r11d, dl
    336260        mov     eax, ecx
     
    360284
    361285BEGINPROC   GenU64_ %+ %1 %+ _Ib
    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 
     286        DO_PREFACE 2
    373287        movzx   r11d, dl
    374288        mov     rax, rcx
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