VirtualBox

Ignore:
Timestamp:
Apr 22, 2016 3:57:22 PM (9 years ago)
Author:
vboxsync
Message:

bs3kit: updates

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-MemChr.asm

    r60585 r60657  
    11; $Id$
    22;; @file
    3 ; BS3Kit - Bs3MemZero.
     3; BS3Kit - Bs3MemChr.
    44;
    55
    66;
    7 ; Copyright (C) 2007-2015 Oracle Corporation
     7; Copyright (C) 2007-2016 Oracle Corporation
    88;
    99; This file is part of VirtualBox Open Source Edition (OSE), as
     
    2828
    2929;;
    30 ; @cproto   BS3_DECL(void) Bs3MemZero_c16(void BS3_FAR *pvDst, size_t cbDst);
     30; @cproto   BS3_CMN_PROTO_NOSB(void BS3_FAR *, Bs3MemChr,(void BS3_FAR const *pvHaystack, uint8_t bNeedle, size_t cbHaystack));
    3131;
    32 BS3_PROC_BEGIN_CMN Bs3MemZero, BS3_PBC_HYBRID
    33 %ifdef RT_ARCH_AMD64
    34         push    rdi
     32BS3_PROC_BEGIN_CMN Bs3MemChr, BS3_PBC_HYBRID
     33        push    xBP
     34        mov     xBP, xSP
     35        push    xDI
     36TONLY16 push    es
    3537
    36         mov     rdi, rcx                ; rdi = pvDst
    37         mov     rcx, rdx                ; rcx = cbDst
    38         shr     rcx, 3                  ; calc qword count.
    39         xor     eax, eax                ; rax = 0 (filler qword)
     38%if TMPL_BITS == 64
     39
     40        mov     rdi, rcx                ; rdi = pvHaystack
     41        mov     rcx, r8                 ; rcx = cbHaystack
     42        mov     al, dl                  ; bNeedle
     43        mov     rcx, r8
     44
     45%elif TMPL_BITS == 16
     46        mov     di, [bp + 2 + cbCurRetAddr]     ; pvHaystack.off
     47        mov     es, [bp + 2 + cbCurRetAddr + 2] ; pvHaystack.sel
     48        mov     al, [bp + 2 + cbCurRetAddr + 4] ; bNeedle
     49        mov     cx, [bp + 2 + cbCurRetAddr + 6] ; cbHaystack
     50
     51%elif TMPL_BITS == 32
     52        mov     edi, [ebp + 8]                          ; pvHaystack
     53        mov     al, byte [ebp + 4 + cbCurRetAddr + 4]   ; bNeedle
     54        mov     ecx, [ebp + 4 + cbCurRetAddr + 8]       ; cbHaystack
     55%else
     56 %error "TMPL_BITS!"
     57%endif
     58
    4059        cld
    41         rep stosq
     60        repne scasb
     61        je      .found
    4262
    43         mov     rcx, rdx                ; cbDst
    44         and     rcx, 7                  ; calc trailing byte count.
    45         rep stosb
     63        xor     xAX, xAX
     64TONLY16 xor     dx, dx
    4665
    47         pop     rdi
     66.return:
     67TONLY16 pop     es
     68        pop     xDI
     69        pop     xBP
    4870        BS3_HYBRID_RET
    4971
    50 %elif ARCH_BITS == 16
    51         push    bp
    52         mov     bp, sp
    53         push    di
    54         push    es
     72.found:
     73        lea     xAX, [xDI - 1]
     74TONLY16 mov     dx, es
     75        jmp     .return
    5576
    56         mov     di, [bp + 2 + cbCurRetAddr]     ; pvDst.off
    57         mov     dx, [bp + 2 + cbCurRetAddr + 2] ; pvDst.sel
    58         mov     es, dx
    59         mov     cx, [bp + 2 + cbCurRetAddr + 4] ; cbDst
    60         shr     cx, 1                           ; calc dword count.
    61         xor     ax, ax
    62         rep stosw
     77BS3_PROC_END_CMN   Bs3MemChr
    6378
    64         mov     cx, [bp + 2 + cbCurRetAddr + 4] ; cbDst
    65         and     cx, 1                           ; calc tailing byte count.
    66         rep stosb
    67 
    68         pop     es
    69         pop     di
    70         pop     bp
    71         BS3_HYBRID_RET
    72 
    73 %elif ARCH_BITS == 32
    74         push    edi
    75 
    76         mov     edi, [esp + 8]          ; pvDst
    77         mov     ecx, [esp + 8 + 4]      ; cbDst
    78         shr     cx, 2                   ; calc dword count.
    79         xor     eax, eax
    80         rep stosd
    81 
    82         mov     ecx, [esp + 8 + 4]      ; cbDst
    83         and     ecx, 3                  ; calc tailing byte count.
    84         rep stosb
    85 
    86         pop     edi
    87         BS3_HYBRID_RET
    88 
    89 %else
    90  %error "Unknown bitness."
    91 %endif
    92 BS3_PROC_END_CMN   Bs3MemZero
    93 
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