Kernel32.inc

Переключить прокрутку окна
Загрузить этот исходный код

;
 ;  Исходный код среды исполнения ПВТ-ОО.
 ;
 ;  Этот исходный код является частью проекта ПВТ-ОО.
 ;
 ;  Copyright © 2021 Малик Разработчик
 ;
 ;  Это свободная программа: вы можете перераспространять её и/или
 ;  изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
 ;  в каком она была опубликована Фондом свободного программного обеспечения;
 ;  либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
 ;
 ;  Эта программа распространяется в надежде, что она может быть полезна,
 ;  но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
 ;  или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
 ;  общественной лицензии GNU.
 ;
 ;  Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
 ;  вместе с этой программой. Если это не так, см.
 ;  <http://www.gnu.org/licenses/>.
;

; <fold platform.dependent.Kernel32 (natives)>

    method platform.dependent.Kernel32$exitProcess$int$, \
                uExitCode, int  ; <fold >
                menter
                lverify uExitCode, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1d, [.uExitCode]
                call    qword[platform.dependent.kernel32.exitProcess]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$exitThread$int$, \
                dwExitCode, int  ; <fold >
                menter
                lverify dwExitCode, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1d, [.dwExitCode]
                call    qword[platform.dependent.kernel32.exitThread]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getSystemInfo$long$, \
                lpSystemInfo, long  ; <fold >
                menter
                lverify lpSystemInfo, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpSystemInfo]
                call    qword[platform.dependent.kernel32.getSystemInfo]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getSystemTime$long$, \
                lpSystemTime, long  ; <fold >
                menter
                lverify lpSystemTime, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpSystemTime]
                call    qword[platform.dependent.kernel32.getSystemTime]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$initializeCriticalSection$long$, \
                lpCriticalSection, long  ; <fold >
                menter
                lverify lpCriticalSection, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpCriticalSection]
                call    qword[platform.dependent.kernel32.initializeCriticalSection]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$enterCriticalSection$long$, \
                lpCriticalSection, long  ; <fold >
                menter
                lverify lpCriticalSection, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpCriticalSection]
                call    qword[platform.dependent.kernel32.enterCriticalSection]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$leaveCriticalSection$long$, \
                lpCriticalSection, long  ; <fold >
                menter
                lverify lpCriticalSection, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpCriticalSection]
                call    qword[platform.dependent.kernel32.leaveCriticalSection]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$deleteCriticalSection$long$, \
                lpCriticalSection, long  ; <fold >
                menter
                lverify lpCriticalSection, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpCriticalSection]
                call    qword[platform.dependent.kernel32.deleteCriticalSection]
                lea     rsp, [rsp+$20]
                mleave
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getCurrentDirectory$int$long$, \
                nBufferLength, int, \
                lpBuffer, long  ; returns int <fold >
                menter
                lverify nBufferLength, TAG_INT
                lverify lpBuffer, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1d, [.nBufferLength]
                mov     r2, [.lpBuffer]
                call    qword[platform.dependent.kernel32.getCurrentDirectory]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setCurrentDirectory$long$, \
                lpPathName, long  ; returns int <fold >
                menter
                lverify lpPathName, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpPathName]
                call    qword[platform.dependent.kernel32.setCurrentDirectory]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$createDirectory$long$long$, \
                lpPathName, long, \
                lpSecurityAttributes, long  ; returns int <fold >
                menter
                lverify lpPathName, TAG_LONG
                lverify lpSecurityAttributes, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpPathName]
                mov     r2, [.lpSecurityAttributes]
                call    qword[platform.dependent.kernel32.createDirectory]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$removeDirectory$long$, \
                lpPathName, long  ; returns int <fold >
                menter
                lverify lpPathName, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpPathName]
                call    qword[platform.dependent.kernel32.removeDirectory]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$findNextFile$long$long$, \
                hFindFile, long, \
                lpFindFileData, long  ; returns int <fold >
                menter
                lverify hFindFile, TAG_LONG
                lverify lpFindFileData, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hFindFile]
                mov     r2, [.lpFindFileData]
                call    qword[platform.dependent.kernel32.findNextFile]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$findClose$long$, \
                hFindFile, long  ; returns int <fold >
                menter
                lverify hFindFile, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hFindFile]
                call    qword[platform.dependent.kernel32.findClose]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$moveFile$long$long$, \
                lpExistingFileName, long, \
                lpNewFileName, long  ; returns int <fold >
                menter
                lverify lpExistingFileName, TAG_LONG
                lverify lpNewFileName, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpExistingFileName]
                mov     r2, [.lpNewFileName]
                call    qword[platform.dependent.kernel32.moveFile]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$deleteFile$long$, \
                lpFileName, long  ; returns int <fold >
                menter
                lverify lpFileName, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpFileName]
                call    qword[platform.dependent.kernel32.deleteFile]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$flushFileBuffers$long$, \
                hFile, long  ; returns int <fold >
                menter
                lverify hFile, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hFile]
                call    qword[platform.dependent.kernel32.flushFileBuffers]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setEndOfFile$long$, \
                hFile, long  ; returns int <fold >
                menter
                lverify hFile, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hFile]
                call    qword[platform.dependent.kernel32.setEndOfFile]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setFileTime$long$long$long$long$, \
                hFile, long, \
                lpCreationTime, long, \
                lpLastAccessTime, long, \
                lpLastWriteTime, long  ; returns int <fold >
                menter
                lverify hFile, TAG_LONG
                lverify lpCreationTime, TAG_LONG
                lverify lpLastAccessTime, TAG_LONG
                lverify lpLastWriteTime, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hFile]
                mov     r2, [.lpCreationTime]
                mov     r8, [.lpLastAccessTime]
                mov     r9, [.lpLastWriteTime]
                call    qword[platform.dependent.kernel32.setFileTime]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setFileAttributes$long$int$, \
                lpFileName, long, \
                dwFileAttributes, int  ; returns int <fold >
                menter
                lverify lpFileName, TAG_LONG
                lverify dwFileAttributes, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1, [.lpFileName]
                mov     r2d, [.dwFileAttributes]
                call    qword[platform.dependent.kernel32.setFileAttributes]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getFileTime$long$long$long$long$, \
                hFile, long, \
                lpCreationTime, long, \
                lpLastAccessTime, long, \
                lpLastWriteTime, long  ; returns int <fold >
                menter
                lverify hFile, TAG_LONG
                lverify lpCreationTime, TAG_LONG
                lverify lpLastAccessTime, TAG_LONG
                lverify lpLastWriteTime, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hFile]
                mov     r2, [.lpCreationTime]
                mov     r8, [.lpLastAccessTime]
                mov     r9, [.lpLastWriteTime]
                call    qword[platform.dependent.kernel32.getFileTime]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getFileAttributes$long$, \
                lpFileName, long  ; returns int <fold >
                menter
                lverify lpFileName, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpFileName]
                call    qword[platform.dependent.kernel32.getFileAttributes]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getModuleFileName$long$long$int$, \
                hModule, long, \
                lpFileName, long, \
                nSize, int  ; returns int <fold >
                menter
                lverify hModule, TAG_LONG
                lverify lpFileName, TAG_LONG
                lverify nSize, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1, [.hModule]
                mov     r2, [.lpFileName]
                mov     r8d, [.nSize]
                call    qword[platform.dependent.kernel32.getModuleFileName]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getCurrentProcessId$  ; returns int <fold >
                menter
                lea     rsp, [rsp-$20]
                call    qword[platform.dependent.kernel32.getCurrentProcessId]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getCurrentThreadId$  ; returns int <fold >
                menter
                lea     rsp, [rsp-$20]
                call    qword[platform.dependent.kernel32.getCurrentThreadId]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getLastError$  ; returns int <fold >
                menter
                lea     rsp, [rsp-$20]
                call    qword[platform.dependent.kernel32.getLastError]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$resumeThread$long$, \
                hThread, long  ; returns int <fold >
                menter
                lverify hThread, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hThread]
                call    qword[platform.dependent.kernel32.resumeThread]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getThreadPriority$long$, \
                hThread, long  ; returns int <fold >
                menter
                lverify hThread, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hThread]
                call    qword[platform.dependent.kernel32.getThreadPriority]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setThreadPriority$long$int$, \
                hThread, long, \
                nPriority, int  ; returns int <fold >
                menter
                lverify hThread, TAG_LONG
                lverify nPriority, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1, [.hThread]
                mov     r2d, [.nPriority]
                call    qword[platform.dependent.kernel32.setThreadPriority]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getThreadContext$long$long$, \
                hThread, long, \
                lpContext, long  ; returns int <fold >
                menter
                lverify hThread, TAG_LONG
                lverify lpContext, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hThread]
                mov     r2, [.lpContext]
                call    qword[platform.dependent.kernel32.getThreadContext]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setThreadContext$long$long$, \
                hThread, long, \
                lpContext, long  ; returns int <fold >
                menter
                lverify hThread, TAG_LONG
                lverify lpContext, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hThread]
                mov     r2, [.lpContext]
                call    qword[platform.dependent.kernel32.setThreadContext]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$thread32First$long$long$, \
                hSnapshot, long, \
                lpThreadEntry, long  ; returns int <fold >
                menter
                lverify hSnapshot, TAG_LONG
                lverify lpThreadEntry, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hSnapshot]
                mov     r2, [.lpThreadEntry]
                call    qword[platform.dependent.kernel32.thread32First]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$thread32Next$long$long$, \
                hSnapshot, long, \
                lpThreadEntry, long  ; returns int <fold >
                menter
                lverify hSnapshot, TAG_LONG
                lverify lpThreadEntry, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hSnapshot]
                mov     r2, [.lpThreadEntry]
                call    qword[platform.dependent.kernel32.thread32Next]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$closeHandle$long$, \
                hObject, long  ; returns int <fold >
                menter
                lverify hObject, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hObject]
                call    qword[platform.dependent.kernel32.closeHandle]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setEvent$long$, \
                hEvent, long  ; returns int <fold >
                menter
                lverify hEvent, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.hEvent]
                call    qword[platform.dependent.kernel32.setEvent]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$switchToThread$  ; returns int <fold >
                menter
                lea     rsp, [rsp-$20]
                call    qword[platform.dependent.kernel32.switchToThread]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$waitForSingleObject$long$int$, \
                hHandle, long, \
                dwMilliseconds, int  ; returns int <fold >
                menter
                lverify hHandle, TAG_LONG
                lverify dwMilliseconds, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1, [.hHandle]
                mov     r2d, [.dwMilliseconds]
                call    qword[platform.dependent.kernel32.waitForSingleObject]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getTimeZoneInformation$long$, \
                lpTimeZoneInformation, long  ; returns int <fold >
                menter
                lverify lpTimeZoneInformation, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpTimeZoneInformation]
                call    qword[platform.dependent.kernel32.getTimeZoneInformation]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                mleaved
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getExitCodeThread$long$, \
                hThread, long  ; returns int2 <fold >
                loc     lpExitCode, int
                menter
                lverify hThread, TAG_LONG
                bload   $00
                istoreloc lpExitCode
                lea     rsp, [rsp-$20]
                mov     r1, [.hThread]
                lea     r2, [.lpExitCode]
                call    qword[platform.dependent.kernel32.getExitCodeThread]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                iloadloc lpExitCode
                newvectori2
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$readFile$long$long$, \
                hFile, long, \
                lpOverlapped, long  ; returns int2 <fold >
                loc     lpBuffer, int
                loc     lpNumberOfBytesRead, int
                menter
                lverify hFile, TAG_LONG
                lverify lpOverlapped, TAG_LONG
                bload   $00
                istoreloc lpBuffer
                bload   $00
                istoreloc lpNumberOfBytesRead
                lea     rsp, [rsp-$30]
                mov     r1, [.hFile]
                lea     r2, [.lpBuffer]
                mov     r8d, $01
                lea     r9, [.lpNumberOfBytesRead]
                mov     r0, [.lpOverlapped]
                mov     qword[rsp+$20], r0
                call    qword[platform.dependent.kernel32.readFile]
                lea     rsp, [rsp+$30]
                test    r0d, r0d
                jnz     .L.000
                vpxor   xmm0, xmm0, xmm0
                jmp     .L.RET
        .L.000: cmp     dword[.lpNumberOfBytesRead], $01
                je      .L.001
                mov     r1d, -$01
                jmp     .L.002
        .L.001: mov     r1d, [.lpBuffer]
        .L.002: vmovd   xmm0, r0d
                vmovd   xmm1, r1d
                vpslldq xmm1, xmm1, $04
                vpor    xmm0, xmm0, xmm1
        .L.RET: call    inst$i2push
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$readFile$long$long$int$long$, \
                hFile, long, \
                lpBuffer, long, \
                nNumberOfBytesToRead, int, \
                lpOverlapped, long  ; returns int2 <fold >
                loc     lpNumberOfBytesRead, int
                menter
                lverify hFile, TAG_LONG
                lverify lpBuffer, TAG_LONG
                lverify nNumberOfBytesToRead, TAG_INT
                lverify lpOverlapped, TAG_LONG
                bload   $00
                istoreloc lpNumberOfBytesRead
                lea     rsp, [rsp-$30]
                mov     r1, [.hFile]
                mov     r2, [.lpBuffer]
                mov     r8d, [.nNumberOfBytesToRead]
                lea     r9, [.lpNumberOfBytesRead]
                mov     r0, [.lpOverlapped]
                mov     qword[rsp+$20], r0
                call    qword[platform.dependent.kernel32.readFile]
                lea     rsp, [rsp+$30]
                call    inst$ipush
                iloadloc lpNumberOfBytesRead
                newvectori2
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$writeFile$long$int$long$, \
                hFile, long, \
                lpBuffer, int, \
                lpOverlapped, long  ; returns int2 <fold >
                loc     lpNumberOfBytesWritten, int
                menter
                lverify hFile, TAG_LONG
                lverify lpBuffer, TAG_INT
                lverify lpOverlapped, TAG_LONG
                bload   $00
                istoreloc lpNumberOfBytesWritten
                lea     rsp, [rsp-$30]
                mov     r1, [.hFile]
                lea     r2, [.lpBuffer]
                mov     r8d, $01
                lea     r9, [.lpNumberOfBytesWritten]
                mov     r0, [.lpOverlapped]
                mov     qword[rsp+$20], r0
                call    qword[platform.dependent.kernel32.writeFile]
                lea     rsp, [rsp+$30]
                call    inst$ipush
                iloadloc lpNumberOfBytesWritten
                newvectori2
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$writeFile$long$long$int$long$, \
                hFile, long, \
                lpBuffer, long, \
                nNumberOfBytesToWrite, int, \
                lpOverlapped, long  ; returns int2 <fold >
                loc     lpNumberOfBytesWritten, int
                menter
                lverify hFile, TAG_LONG
                lverify lpBuffer, TAG_LONG
                lverify nNumberOfBytesToWrite, TAG_INT
                lverify lpOverlapped, TAG_LONG
                bload   $00
                istoreloc lpNumberOfBytesWritten
                lea     rsp, [rsp-$30]
                mov     r1, [.hFile]
                mov     r2, [.lpBuffer]
                mov     r8d, [.nNumberOfBytesToWrite]
                lea     r9, [.lpNumberOfBytesWritten]
                mov     r0, [.lpOverlapped]
                mov     qword[rsp+$20], r0
                call    qword[platform.dependent.kernel32.writeFile]
                lea     rsp, [rsp+$30]
                call    inst$ipush
                iloadloc lpNumberOfBytesWritten
                newvectori2
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$virtualProtect$long$long$int$, \
                lpAddress, long, \
                dwSize, long, \
                flNewProtect, int  ; returns int2 <fold >
                loc     lpflOldProtect, int
                menter
                lverify lpAddress, TAG_LONG
                lverify dwSize, TAG_LONG
                lverify flNewProtect, TAG_INT
                bload   $00
                istoreloc lpflOldProtect
                lea     rsp, [rsp-$20]
                mov     r1, [.lpAddress]
                mov     r2, [.dwSize]
                mov     r8d, [.flNewProtect]
                lea     r9, [.lpflOldProtect]
                call    qword[platform.dependent.kernel32.virtualProtect]
                lea     rsp, [rsp+$20]
                call    inst$ipush
                iloadloc lpflOldProtect
                newvectori2
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$virtualAlloc$long$long$int$int$, \
                lpAddress, long, \
                dwSize, long, \
                flAllocationType, int, \
                flProtect, int  ; returns long <fold >
                menter
                lverify lpAddress, TAG_LONG
                lverify dwSize, TAG_LONG
                lverify flAllocationType, TAG_INT
                lverify flProtect, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1, [.lpAddress]
                mov     r2, [.dwSize]
                mov     r8d, [.flAllocationType]
                mov     r9d, [.flProtect]
                call    qword[platform.dependent.kernel32.virtualAlloc]
                lea     rsp, [rsp+$20]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getStdHandle$int$, \
                nStdHandle, int  ; returns long <fold >
                menter
                lverify nStdHandle, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1d, [.nStdHandle]
                call    qword[platform.dependent.kernel32.getStdHandle]
                lea     rsp, [rsp+$20]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$openThread$int$boolean$int$, \
                dwDesiredAccess, int, \
                bInheritHandle, boolean, \
                dwThreadId, int  ; returns long <fold >
                menter
                lverify dwDesiredAccess, TAG_INT
                lverify bInheritHandle, TAG_INT
                lverify dwThreadId, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1d, [.dwDesiredAccess]
                mov     r2d, [.bInheritHandle]
                mov     r8d, [.dwThreadId]
                call    qword[platform.dependent.kernel32.openThread]
                lea     rsp, [rsp+$20]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$findFirstFile$long$long$, \
                lpFileName, long, \
                lpFindFileData, long  ; returns long <fold >
                menter
                lverify lpFileName, TAG_LONG
                lverify lpFindFileData, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpFileName]
                mov     r2, [.lpFindFileData]
                call    qword[platform.dependent.kernel32.findFirstFile]
                lea     rsp, [rsp+$20]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getFileSize$long$, \
                hFile, long  ; returns long <fold >
                loc     lpFileSizeHigh, int
                menter
                lverify hFile, TAG_LONG
                bload   $00
                istoreloc lpFileSizeHigh
                lea     rsp, [rsp-$20]
                mov     r1, [.hFile]
                lea     r2, [.lpFileSizeHigh]
                call    qword[platform.dependent.kernel32.getFileSize]
                lea     rsp, [rsp+$20]
                mov     r0d, r0d
                mov     r1d, [.lpFileSizeHigh]
                shl     r1, $20
                or      r0, r1
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$setFilePointer$long$long$int$, \
                hFile, long, \
                lDistanceToMove, long, \
                dwMoveMethod, int  ; returns long <fold >
                menter
                lverify hFile, TAG_LONG
                lverify lDistanceToMove, TAG_LONG
                lverify dwMoveMethod, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1, [.hFile]
                mov     r2d, [.lDistanceToMove]
                lea     r8, [.lDistanceToMove+$04]
                mov     r9d, [.dwMoveMethod]
                call    qword[platform.dependent.kernel32.setFilePointer]
                lea     rsp, [rsp+$20]
                mov     dword[.lDistanceToMove], r0d
                mov     r0, [.lDistanceToMove]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$createToolHelp32Snapshot$int$int$, \
                dwFlags, int, \
                th32ProcessId, int  ; returns long <fold >
                menter
                lverify dwFlags, TAG_INT
                lverify th32ProcessId, TAG_INT
                lea     rsp, [rsp-$20]
                mov     r1d, [.dwFlags]
                mov     r2d, [.th32ProcessId]
                call    qword[platform.dependent.kernel32.createToolHelp32Snapshot]
                lea     rsp, [rsp+$20]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$createFile$long$int$int$long$int$int$long$, \
                lpFileName, long, \
                dwDesiredAccess, int, \
                dwShareMode, int, \
                lpSecurityAttributes, long, \
                dwCreationDisposition, int, \
                dwFlagsAndAttributes, int, \
                hTemplateFile, long  ; returns long <fold >
                menter
                lverify lpFileName, TAG_LONG
                lverify dwDesiredAccess, TAG_INT
                lverify dwShareMode, TAG_INT
                lverify lpSecurityAttributes, TAG_LONG
                lverify dwCreationDisposition, TAG_INT
                lverify dwFlagsAndAttributes, TAG_INT
                lverify hTemplateFile, TAG_LONG
                lea     rsp, [rsp-$40]
                mov     r1, [.lpFileName]
                mov     r2d, [.dwDesiredAccess]
                mov     r8d, [.dwShareMode]
                mov     r9, [.lpSecurityAttributes]
                mov     r0d, [.dwCreationDisposition]
                mov     qword[rsp+$20], r0
                mov     r0d, [.dwFlagsAndAttributes]
                mov     qword[rsp+$28], r0
                mov     r0, [.hTemplateFile]
                mov     qword[rsp+$30], r0
                call    qword[platform.dependent.kernel32.createFile]
                lea     rsp, [rsp+$40]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$createEvent$long$boolean$boolean$long$, \
                lpEventAttributes, long, \
                bManualReset, boolean, \
                bInitialState, boolean, \
                lpName, long  ; returns long <fold >
                menter
                lverify lpEventAttributes, TAG_LONG
                lverify bManualReset, TAG_INT
                lverify bInitialState, TAG_INT
                lverify lpName, TAG_LONG
                lea     rsp, [rsp-$20]
                mov     r1, [.lpEventAttributes]
                test    dword[.bManualReset], -$01
                setz    r2b
                dec     r2b
                movsx   r2d, r2b
                test    dword[.bInitialState], -$01
                setz    r8b
                dec     r8b
                movsx   r8d, r8b
                mov     r9, [.lpName]
                call    qword[platform.dependent.kernel32.createEvent]
                lea     rsp, [rsp+$20]
                call    inst$lpush
                mleaveq
                eleave
    ; </fold>

    method platform.dependent.Kernel32$createThread$long$long$long$long$int$, \
                lpThreadAttributes, long, \
                dwStackSize, long, \
                lpStartAddress, long, \
                lpParameter, long, \
                dwCreationFlags, int  ; returns long2 <fold >
                loc     lpThreadId, int
                menter
                lverify lpThreadAttributes, TAG_LONG
                lverify dwStackSize, TAG_LONG
                lverify lpStartAddress, TAG_LONG
                lverify lpParameter, TAG_LONG
                lverify dwCreationFlags, TAG_INT
                bload   $00
                istoreloc lpThreadId
                lea     rsp, [rsp-$30]
                mov     r1, [.lpThreadAttributes]
                mov     r2, [.dwStackSize]
                mov     r8, [.lpStartAddress]
                mov     r9, [.lpParameter]
                mov     r0d, [.dwCreationFlags]
                mov     qword[rsp+$20], r0
                lea     r0, [.lpThreadId]
                mov     qword[rsp+$28], r0
                call    qword[platform.dependent.kernel32.createThread]
                lea     rsp, [rsp+$30]
                call    inst$lpush
                iloadloc lpThreadId
                itol
                newvectorl2
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getCommandLine$  ; returns long2 <fold >
                menter
                lea     rsp, [rsp-$20]
                call    qword[platform.dependent.kernel32.getCommandLine]
                lea     rsp, [rsp+$20]
                mov     r2, r0
                mov     r7, r0
                xor     r0, r0
                mov     r1d, avt.lang.Int$MAX_VALUE
                cld
                repne scasw
                lea     r0, [r7-$02]
                sub     r0, r2
                sar     r0, $01
                vmovq   xmm0, r2
                vmovq   xmm1, r0
                vpslldq xmm1, xmm1, $08
                vpor    xmm0, xmm0, xmm1
                call    inst$l2push
                mleavex
                eleave
    ; </fold>

    method platform.dependent.Kernel32$getDiskFreeSpaceEx$long$, \
                lpDirectoryName, long  ; returns long4 <fold >
                loc     result, long4
                menter
                lverify lpDirectoryName, TAG_LONG
                bload   $00
                itol
                ltol4
                l4storeloc result
                lea     rsp, [rsp-$20]
                mov     r1, [.lpDirectoryName]
                lea     r2, [.result+$08]
                lea     r8, [.result+$10]
                lea     r9, [.result+$18]
                call    qword[platform.dependent.kernel32.getDiskFreeSpaceEx]
                lea     rsp, [rsp+$20]
                mov     r0d, r0d
                mov     qword[.result+$00], r0
                mleavey
                eleave
    ; </fold>
; </fold>