VirtualBox

Ignore:
Timestamp:
Mar 5, 2016 12:46:48 PM (9 years ago)
Author:
vboxsync
Message:

bs3kit: Bs3TestDoModes helper code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesHlp.asm

    r59881 r59935  
    2828
    2929
    30 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInRM)(uint16_t offCallback);
    31 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE16)(uint16_t offCallback);
    32 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE16_32)(uint32_t offCallback);
    33 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE16_V86)(uint16_t offCallback);
    34 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE32)(uint32_t offCallback);
    35 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPE32_16)(uint16_t offCallback);
    36 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPEV86)(uint16_t offCallback);
    37 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP16)(uint16_t offCallback);
    38 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP16_32)(uint32_t offCallback);
    39 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP16_V86)(uint16_t offCallback);
    40 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP32)(uint32_t offCallback);
    41 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPP32_16)(uint16_t offCallback);
    42 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPPV86)(uint16_t offCallback);
    43 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE16)(uint16_t offCallback);
    44 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE16_32)(uint32_t offCallback);
    45 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE16_V86)(uint16_t offCallback);
    46 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE32)(uint32_t offCallback);
    47 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAE32_16)(uint16_t offCallback);
    48 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInPAEV86)(uint16_t offCallback);
    49 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInLM16)(uint16_t offCallback);
    50 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInLM32)(uint32_t offCallback);
    51 ;BS3_DECL(uint8_t) TMPL_NM(Bs3TestCallDoerInLM64)(uint32_t offCallback);
    52 
    5330;*********************************************************************************************************************************
    5431;*  External Symbols                                                                                                             *
     
    5734extern TMPL_NM(Bs3SwitchToPE16)
    5835extern TMPL_NM(Bs3SwitchToPE16_32)
     36extern TMPL_NM(Bs3SwitchToPE16_V86)
     37extern TMPL_NM(Bs3SwitchToPE32)
     38extern TMPL_NM(Bs3SwitchToPE32_16)
     39extern TMPL_NM(Bs3SwitchToPEV86)
     40extern TMPL_NM(Bs3SwitchToPP16)
     41extern TMPL_NM(Bs3SwitchToPP16_32)
     42extern TMPL_NM(Bs3SwitchToPP16_V86)
     43extern TMPL_NM(Bs3SwitchToPP32)
     44extern TMPL_NM(Bs3SwitchToPP32_16)
     45extern TMPL_NM(Bs3SwitchToPPV86)
     46extern TMPL_NM(Bs3SwitchToPAE16)
     47extern TMPL_NM(Bs3SwitchToPAE16_32)
     48extern TMPL_NM(Bs3SwitchToPAE16_V86)
     49extern TMPL_NM(Bs3SwitchToPAE32)
     50extern TMPL_NM(Bs3SwitchToPAE32_16)
     51extern TMPL_NM(Bs3SwitchToPAEV86)
     52extern TMPL_NM(Bs3SwitchToLM16)
     53extern TMPL_NM(Bs3SwitchToLM32)
     54extern TMPL_NM(Bs3SwitchToLM64)
    5955extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_rm)
    6056extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16)
    6157extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_32)
    62 ;extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_v86)
    63 ;extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_)
    64 
    65 
    66 ;;
    67 ;
    68 ; @param %1     Non-zero if 16-bit target.
    69 ;
    70 %macro MyProlog 1
     58extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_v86)
     59extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe32)
     60extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe32_16)
     61extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pev86)
     62extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16)
     63extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16_32)
     64extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16_v86)
     65extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp32)
     66extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp32_16)
     67extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_ppv86)
     68extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16)
     69extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16_32)
     70extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16_v86)
     71extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae32)
     72extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae32_16)
     73extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_paev86)
     74extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm16)
     75extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm32)
     76extern RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm64)
     77
     78
     79;;
     80; Shared prologue code.
     81; @param    xAX     Where to jump to for the main event.
     82;
     83TMPL_NM(bs3TestCallDoerPrologue):
    7184        BS3_CALL_CONV_PROLOG 1
    7285        push    xBP
     
    99112%endif
    100113
    101 %if TMPL_BITS != 16 && %1 != 0
    102         ; Change to 16-bit segment
    103         jmp     .sixteen_bit_segment
    104 BS3_BEGIN_TEXT16
    105         BS3_SET_BITS TMPL_BITS
    106 .sixteen_bit_segment:
    107 %endif
    108 
    109         ; Load the call address into ax or eax.
    110 %if %1 != 0
    111         mov     ax, [xBP + xCB*2]
    112 %else
    113         mov     eax, [xBP + xCB*2]
    114 %endif
    115 
    116 %endmacro
    117 
    118 
    119 ;;
    120 ;
    121 ; @param %1     Non-zero if 16-bit target.
    122 ;
    123 %macro MyEpilog 1
    124 %if TMPL_BITS != 16
    125         ; Change back to the default template segment.
    126         jmp     .template_segment
    127 TMPL_BEGIN_TEXT
    128         BS3_SET_BITS TMPL_BITS
    129 .template_segment:
    130 %endif
    131 
     114        ; Jump to the main code.
     115        jmp     xAX
     116
     117;;
     118; Shared epilogue code.
     119; @param    xAX     Return code.
     120;
     121TMPL_NM(bs3TestCallDoerEpilogue):
    132122        ; Restore registers.
    133123%if TMPL_BITS == 16
     
    162152        pop     xBX
    163153        pop     xBP
    164 %endmacro
     154        ret
    165155
    166156
     
    169159; @uses     rax
    170160BS3_PROC_BEGIN_MODE Bs3TestCallDoerInRM
    171         MyProlog 16
     161        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     162        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     163BS3_BEGIN_TEXT16
     164BS3_SET_BITS TMPL_BITS
     165.doit:
     166        mov     ax, [xBP + xCB*2]       ; Load function pointer.
    172167
    173168        ; Mode switch, make the call, switch back.
     
    177172        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_rm)
    178173        BS3_SET_BITS TMPL_BITS
    179 
    180         MyEpilog 16
    181         ret
     174        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     175TMPL_BEGIN_TEXT
    182176BS3_PROC_END_MODE   Bs3TestCallDoerInRM
    183177
    184178
     179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     180;; Unpage protection mode.
     181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     182
    185183;;
    186184; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE16(uint16_t offBs3Text16);
    187185; @uses     rax
    188186BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16
    189         MyProlog 16
     187        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     188        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     189BS3_BEGIN_TEXT16
     190BS3_SET_BITS TMPL_BITS
     191.doit:
     192        mov     ax, [xBP + xCB*2]       ; Load function pointer.
    190193
    191194        ; Mode switch, make the call, switch back.
     
    195198        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16)
    196199        BS3_SET_BITS TMPL_BITS
    197 
    198         MyEpilog 16
    199         ret
     200        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     201TMPL_BEGIN_TEXT
    200202BS3_PROC_END_MODE   Bs3TestCallDoerInPE16
    201203
     
    204206; @uses     rax
    205207BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16_32
    206         MyProlog 0
     208        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     209        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     210.doit:
     211        mov     eax, [xBP + xCB*2]      ; Load function pointer.
    207212
    208213        ; Mode switch, make the call, switch back.
     
    212217        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_32)
    213218        BS3_SET_BITS TMPL_BITS
    214 
    215         MyEpilog 0
    216         ret
     219        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
    217220BS3_PROC_END_MODE   Bs3TestCallDoerInPE16_32
    218221
     222;;
     223; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE16_V86(uint16_t offBs3Text16);
     224; @uses     rax
     225BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE16_V86
     226        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     227        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     228.doit:
     229        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     230
     231        ; Mode switch, make the call, switch back.
     232        call    TMPL_NM(Bs3SwitchToPE16_V86)
     233        BS3_SET_BITS 32
     234        call    eax
     235        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe16_v86)
     236        BS3_SET_BITS TMPL_BITS
     237        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     238BS3_PROC_END_MODE   Bs3TestCallDoerInPE16_V86
     239
     240;;
     241; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE32(uint16_t offBs3Text16);
     242; @uses     rax
     243BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE32
     244        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     245        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     246.doit:
     247        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     248
     249        ; Mode switch, make the call, switch back.
     250        call    TMPL_NM(Bs3SwitchToPE32)
     251        BS3_SET_BITS 32
     252        call    eax
     253        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe32)
     254        BS3_SET_BITS TMPL_BITS
     255        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     256BS3_PROC_END_MODE   Bs3TestCallDoerInPE32
     257
     258;;
     259; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPE32_16(uint16_t offBs3Text16);
     260; @uses     rax
     261BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPE32_16
     262        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     263        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     264BS3_BEGIN_TEXT16
     265BS3_SET_BITS TMPL_BITS
     266.doit:
     267        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     268
     269        ; Mode switch, make the call, switch back.
     270        call    TMPL_NM(Bs3SwitchToPE32_16)
     271        BS3_SET_BITS 16
     272        call    ax
     273        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pe32_16)
     274        BS3_SET_BITS TMPL_BITS
     275        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     276TMPL_BEGIN_TEXT
     277BS3_PROC_END_MODE   Bs3TestCallDoerInPE32_16
     278
     279;;
     280; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPEV86(uint16_t offBs3Text16);
     281; @uses     rax
     282BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPEV86
     283        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     284        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     285BS3_BEGIN_TEXT16
     286BS3_SET_BITS TMPL_BITS
     287.doit:
     288        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     289
     290        ; Mode switch, make the call, switch back.
     291        call    TMPL_NM(Bs3SwitchToPEV86)
     292        BS3_SET_BITS 16
     293        call    ax
     294        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pev86)
     295        BS3_SET_BITS TMPL_BITS
     296        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     297TMPL_BEGIN_TEXT
     298BS3_PROC_END_MODE   Bs3TestCallDoerInPEV86
     299
     300
     301
     302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     303;; Page protection mode.
     304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     305
     306;;
     307; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP16(uint16_t offBs3Text16);
     308; @uses     rax
     309BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16
     310        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     311        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     312BS3_BEGIN_TEXT16
     313BS3_SET_BITS TMPL_BITS
     314.doit:
     315        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     316
     317        ; Mode switch, make the call, switch back.
     318        call    TMPL_NM(Bs3SwitchToPP16)
     319        BS3_SET_BITS 16
     320        call    ax
     321        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16)
     322        BS3_SET_BITS TMPL_BITS
     323        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     324TMPL_BEGIN_TEXT
     325BS3_PROC_END_MODE   Bs3TestCallDoerInPP16
     326
     327;;
     328; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP16_32(uint16_t offBs3Text16);
     329; @uses     rax
     330BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16_32
     331        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     332        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     333.doit:
     334        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     335
     336        ; Mode switch, make the call, switch back.
     337        call    TMPL_NM(Bs3SwitchToPP16_32)
     338        BS3_SET_BITS 32
     339        call    eax
     340        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16_32)
     341        BS3_SET_BITS TMPL_BITS
     342        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     343BS3_PROC_END_MODE   Bs3TestCallDoerInPP16_32
     344
     345;;
     346; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP16_V86(uint16_t offBs3Text16);
     347; @uses     rax
     348BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP16_V86
     349        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     350        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     351.doit:
     352        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     353
     354        ; Mode switch, make the call, switch back.
     355        call    TMPL_NM(Bs3SwitchToPP16_V86)
     356        BS3_SET_BITS 32
     357        call    eax
     358        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp16_v86)
     359        BS3_SET_BITS TMPL_BITS
     360        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     361BS3_PROC_END_MODE   Bs3TestCallDoerInPP16_V86
     362
     363;;
     364; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP32(uint16_t offBs3Text16);
     365; @uses     rax
     366BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP32
     367        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     368        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     369.doit:
     370        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     371
     372        ; Mode switch, make the call, switch back.
     373        call    TMPL_NM(Bs3SwitchToPP32)
     374        BS3_SET_BITS 32
     375        call    eax
     376        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp32)
     377        BS3_SET_BITS TMPL_BITS
     378        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     379BS3_PROC_END_MODE   Bs3TestCallDoerInPP32
     380
     381;;
     382; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPP32_16(uint16_t offBs3Text16);
     383; @uses     rax
     384BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPP32_16
     385        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     386        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     387BS3_BEGIN_TEXT16
     388BS3_SET_BITS TMPL_BITS
     389.doit:
     390        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     391
     392        ; Mode switch, make the call, switch back.
     393        call    TMPL_NM(Bs3SwitchToPP32_16)
     394        BS3_SET_BITS 16
     395        call    ax
     396        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pp32_16)
     397        BS3_SET_BITS TMPL_BITS
     398        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     399TMPL_BEGIN_TEXT
     400BS3_PROC_END_MODE   Bs3TestCallDoerInPP32_16
     401
     402;;
     403; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPPV86(uint16_t offBs3Text16);
     404; @uses     rax
     405BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPPV86
     406        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     407        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     408BS3_BEGIN_TEXT16
     409BS3_SET_BITS TMPL_BITS
     410.doit:
     411        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     412
     413        ; Mode switch, make the call, switch back.
     414        call    TMPL_NM(Bs3SwitchToPPV86)
     415        BS3_SET_BITS 16
     416        call    ax
     417        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_ppv86)
     418        BS3_SET_BITS TMPL_BITS
     419        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     420TMPL_BEGIN_TEXT
     421BS3_PROC_END_MODE   Bs3TestCallDoerInPPV86
     422
     423
     424
     425;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     426;; PAE paged protection mode.
     427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     428
     429;;
     430; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE16(uint16_t offBs3Text16);
     431; @uses     rax
     432BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16
     433        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     434        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     435BS3_BEGIN_TEXT16
     436BS3_SET_BITS TMPL_BITS
     437.doit:
     438        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     439
     440        ; Mode switch, make the call, switch back.
     441        call    TMPL_NM(Bs3SwitchToPAE16)
     442        BS3_SET_BITS 16
     443        call    ax
     444        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16)
     445        BS3_SET_BITS TMPL_BITS
     446        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     447TMPL_BEGIN_TEXT
     448BS3_PROC_END_MODE   Bs3TestCallDoerInPAE16
     449
     450;;
     451; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE16_32(uint16_t offBs3Text16);
     452; @uses     rax
     453BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16_32
     454        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     455        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     456.doit:
     457        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     458
     459        ; Mode switch, make the call, switch back.
     460        call    TMPL_NM(Bs3SwitchToPAE16_32)
     461        BS3_SET_BITS 32
     462        call    eax
     463        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16_32)
     464        BS3_SET_BITS TMPL_BITS
     465        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     466BS3_PROC_END_MODE   Bs3TestCallDoerInPAE16_32
     467
     468;;
     469; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE16_V86(uint16_t offBs3Text16);
     470; @uses     rax
     471BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE16_V86
     472        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     473        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     474.doit:
     475        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     476
     477        ; Mode switch, make the call, switch back.
     478        call    TMPL_NM(Bs3SwitchToPAE16_V86)
     479        BS3_SET_BITS 32
     480        call    eax
     481        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae16_v86)
     482        BS3_SET_BITS TMPL_BITS
     483        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     484BS3_PROC_END_MODE   Bs3TestCallDoerInPAE16_V86
     485
     486;;
     487; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE32(uint16_t offBs3Text16);
     488; @uses     rax
     489BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE32
     490        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     491        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     492.doit:
     493        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     494
     495        ; Mode switch, make the call, switch back.
     496        call    TMPL_NM(Bs3SwitchToPAE32)
     497        BS3_SET_BITS 32
     498        call    eax
     499        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae32)
     500        BS3_SET_BITS TMPL_BITS
     501        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     502BS3_PROC_END_MODE   Bs3TestCallDoerInPAE32
     503
     504;;
     505; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAE32_16(uint16_t offBs3Text16);
     506; @uses     rax
     507BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAE32_16
     508        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     509        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     510BS3_BEGIN_TEXT16
     511BS3_SET_BITS TMPL_BITS
     512.doit:
     513        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     514
     515        ; Mode switch, make the call, switch back.
     516        call    TMPL_NM(Bs3SwitchToPAE32_16)
     517        BS3_SET_BITS 16
     518        call    ax
     519        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_pae32_16)
     520        BS3_SET_BITS TMPL_BITS
     521        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     522TMPL_BEGIN_TEXT
     523BS3_PROC_END_MODE   Bs3TestCallDoerInPAE32_16
     524
     525;;
     526; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInPAEV86(uint16_t offBs3Text16);
     527; @uses     rax
     528BS3_PROC_BEGIN_MODE Bs3TestCallDoerInPAEV86
     529        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     530        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     531BS3_BEGIN_TEXT16
     532BS3_SET_BITS TMPL_BITS
     533.doit:
     534        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     535
     536        ; Mode switch, make the call, switch back.
     537        call    TMPL_NM(Bs3SwitchToPAEV86)
     538        BS3_SET_BITS 16
     539        call    ax
     540        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_paev86)
     541        BS3_SET_BITS TMPL_BITS
     542        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     543TMPL_BEGIN_TEXT
     544BS3_PROC_END_MODE   Bs3TestCallDoerInPAEV86
     545
     546
     547
     548;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     549;; Long mode
     550;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     551
     552;;
     553; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInLM16(uint16_t offBs3Text16);
     554; @uses     rax
     555BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM16
     556        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     557        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     558BS3_BEGIN_TEXT16
     559BS3_SET_BITS TMPL_BITS
     560.doit:
     561        mov     ax, [xBP + xCB*2]       ; Load function pointer.
     562
     563        ; Mode switch, make the call, switch back.
     564        call    TMPL_NM(Bs3SwitchToLM16)
     565        BS3_SET_BITS 16
     566        call    ax
     567        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm16)
     568        BS3_SET_BITS TMPL_BITS
     569        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     570TMPL_BEGIN_TEXT
     571BS3_PROC_END_MODE   Bs3TestCallDoerInLM16
     572
     573;;
     574; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInLM32(uint16_t offBs3Text16);
     575; @uses     rax
     576BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM32
     577        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     578        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     579.doit:
     580        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     581
     582        ; Mode switch, make the call, switch back.
     583        call    TMPL_NM(Bs3SwitchToLM32)
     584        BS3_SET_BITS 32
     585        call    eax
     586        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm32)
     587        BS3_SET_BITS TMPL_BITS
     588        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     589BS3_PROC_END_MODE   Bs3TestCallDoerInLM32
     590
     591;;
     592; @cproto   BS3_DECL(uint8_t) Bs3TestCallDoerInLM64(uint16_t offBs3Text16);
     593; @uses     rax
     594BS3_PROC_BEGIN_MODE Bs3TestCallDoerInLM64
     595        BS3_LEA_MOV_WRT_RIP(xAX, .doit)
     596        jmp     TMPL_NM(bs3TestCallDoerPrologue)
     597.doit:
     598        mov     eax, [xBP + xCB*2]      ; Load function pointer.
     599
     600        ; Mode switch, make the call, switch back.
     601        call    TMPL_NM(Bs3SwitchToLM64)
     602        BS3_SET_BITS 64
     603        call    rax
     604        call    RT_CONCAT3(_Bs3SwitchTo,TMPL_MODE_UNAME,_lm64)
     605        BS3_SET_BITS TMPL_BITS
     606        jmp     TMPL_NM(bs3TestCallDoerEpilogue)
     607BS3_PROC_END_MODE   Bs3TestCallDoerInLM64
     608
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