;
; Исходный код среды исполнения ПВТ-ОО.
;
; Этот исходный код является частью проекта ПВТ-ОО.
;
; 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>