;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024, 2026 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold platform.dependent.mswindows.kernel.Kernel — родной код>
; общие функции
if(used platform.dependent.mswindows.kernel.Kernel$getSystemInfo$long$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$getSystemInfo$long$, \
lpSystemInfo, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpSystemInfo]
call qword [impr$GetSystemInfo]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$closeHandle$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$closeHandle$long$, \
hObject, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hObject]
call qword [impr$CloseHandle]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setErrorMode$int$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$setErrorMode$int$, \
uMode, int
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.uMode]
call qword [impr$SetErrorMode]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getLastError$) ; <fold returns int>
proc platform.dependent.mswindows.kernel.Kernel$getLastError$
mov r00q, [gs: $30]
mov r00d, [r00+$0068]
ret
end_proc
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getLastStatus$) ; <fold returns int>
proc platform.dependent.mswindows.kernel.Kernel$getLastStatus$
mov r00q, [gs: $30]
mov r00d, [r00+$1250]
ret
end_proc
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createToolHelp32Snapshot$int$int$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$createToolHelp32Snapshot$int$int$, \
dwFlags, int, \
th32ProcessId, int
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.dwFlags]
mov r02d, [.th32ProcessId]
call qword [impr$CreateToolhelp32Snapshot]
fleave
end if ; </fold>
; время
if(used platform.dependent.mswindows.kernel.Kernel$getSystemTime$long$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$getSystemTime$long$, \
lpSystemTime, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpSystemTime]
call qword [impr$GetSystemTime]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getTimeZoneInfo$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getTimeZoneInfo$long$, \
lpTimeZoneInfo, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpTimeZoneInfo]
call qword [impr$GetTimeZoneInformation]
fleave
end if ; </fold>
; память
if(used platform.dependent.mswindows.kernel.Kernel$virtualFree$long$long$int$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$virtualFree$long$long$int$, \
lpAddress, long, \
dwSize, long, \
dwFreeType, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpAddress]
mov r02q, [.dwSize]
mov r08d, [.dwFreeType]
call qword [impr$VirtualFree]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$virtualProtect$long$long$int$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$virtualProtect$long$long$int$, \
lpAddress, long, \
dwSize, long, \
flNewProtect, int
floc lpflOldProtect, int
fenter
mov qword [.lpflOldProtect], $00
cld
lea rsp, [rsp-$20]
mov r01q, [.lpAddress]
mov r02q, [.dwSize]
mov r08d, [.flNewProtect]
lea r09q, [.lpflOldProtect]
call qword [impr$VirtualProtect]
vmovd xmm0, r00d
vmovd xmm1, [.lpflOldProtect]
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$virtualAlloc$long$long$int$int$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$virtualAlloc$long$long$int$int$, \
lpAddress, long, \
dwSize, long, \
flAllocationType, int, \
flProtect, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpAddress]
mov r02q, [.dwSize]
mov r08d, [.flAllocationType]
mov r09d, [.flProtect]
call qword [impr$VirtualAlloc]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$virtualQuery$long$long$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$virtualQuery$long$long$long$, \
lpAddress, long, \
lpBuffer, long, \
dwLength, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpAddress]
mov r02q, [.lpBuffer]
mov r08q, [.dwLength]
call qword [impr$VirtualQuery]
fleave
end if ; </fold>
; мутекс, критическая секция
if(used platform.dependent.mswindows.kernel.Kernel$initializeCriticalSection$long$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$initializeCriticalSection$long$, \
lpCriticalSection, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpCriticalSection]
call qword [impr$InitializeCriticalSection]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$deleteCriticalSection$long$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$deleteCriticalSection$long$, \
lpCriticalSection, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpCriticalSection]
call qword [impr$DeleteCriticalSection]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$enterCriticalSection$long$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$enterCriticalSection$long$, \
lpCriticalSection, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpCriticalSection]
call qword [impr$EnterCriticalSection]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$leaveCriticalSection$long$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$leaveCriticalSection$long$, \
lpCriticalSection, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpCriticalSection]
call qword [impr$LeaveCriticalSection]
fleave
end if ; </fold>
; событие
if(used platform.dependent.mswindows.kernel.Kernel$setEvent$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setEvent$long$, \
hEvent, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hEvent]
call qword [impr$SetEvent]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$resetEvent$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$resetEvent$long$, \
hEvent, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hEvent]
call qword [impr$ResetEvent]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createEvent$long$boolean$boolean$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$createEvent$long$boolean$boolean$long$, \
lpEventAttributes, long, \
bManualReset, boolean, \
bInitialState, boolean, \
lpName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpEventAttributes]
mov r02d, [.bManualReset]
mov r08d, [.bInitialState]
mov r09q, [.lpName]
call qword [impr$CreateEvent]
fleave
end if ; </fold>
; поток исполнения
if(used platform.dependent.mswindows.kernel.Kernel$switchToThread$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$switchToThread$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$SwitchToThread]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setThreadPriority$long$int$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setThreadPriority$long$int$, \
hThread, long, \
nPriority, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hThread]
mov r02d, [.nPriority]
call qword [impr$SetThreadPriority]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$thread32First$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$thread32First$long$long$, \
hSnapshot, long, \
lpThreadEntry, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hSnapshot]
mov r02q, [.lpThreadEntry]
call qword [impr$Thread32First]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$thread32Next$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$thread32Next$long$long$, \
hSnapshot, long, \
lpThreadEntry, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hSnapshot]
mov r02q, [.lpThreadEntry]
call qword [impr$Thread32Next]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setThreadDescription$long$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$setThreadDescription$long$long$, \
hThread, long, \
lpDescription, long
floc wideDescription, long4
fenter
mov r00q, [.lpDescription]
vmovdqu xmm0, [r00+$00]
vpmovzxbw ymm0, xmm0
vmovdqu yword [.wideDescription], ymm0
cld
lea rsp, [rsp-$20]
mov r01q, [.hThread]
lea r02q, [.wideDescription]
call qword [impr$SetThreadDescription]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getCurrentThreadId$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getCurrentThreadId$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetCurrentThreadId]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getThreadPriority$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getThreadPriority$long$, \
hThread, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hThread]
call qword [impr$GetThreadPriority]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getThreadDescription$long$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getThreadDescription$long$long$, \
hThread, long, \
lpDescription, long
floc length, int, \
ptrDescription, long, \
wideDescription, long4
fenter
vpxor ymm0, ymm0, ymm0
vmovdqa xword [.length], xmm0
vmovdqa xword [.ptrDescription], xmm0
vmovdqu yword [.wideDescription], ymm0
cld
lea rsp, [rsp-$20]
mov r01q, [.hThread]
lea r02q, [.ptrDescription]
call qword [impr$GetThreadDescription]
test r00d, $80000000
jnz .L.0002
mov r08q, [.ptrDescription]
test r08q, r08q
jz .L.0002
mov r00d, $00000000
mov r01d, $0000000f
.L.0000: movzx r02d, word [r08+r00*2+$00]
test r02d, r02d
jz .L.0001
mov word [.wideDescription+r00*2+$00], r02w
lea r00d, [r00d+$01]
loop .L.0000
.L.0001: mov dword [.length], r00d
mov r01q, r08q
call qword [impr$LocalFree]
.L.0002: mov r00d, [.length]
mov r01q, [.lpDescription]
vmovdqa xmm0, [.wideDescription+$00]
vmovdqa xmm1, [.wideDescription+$10]
vpand xmm0, xmm0, [cons$short8.$00ff]
vpand xmm1, xmm1, [cons$short8.$00ff]
vpackuswb xmm0, xmm0, xmm1
vmovdqu xword [r01+$00], xmm0
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$waitForSingleObject$long$int$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$waitForSingleObject$long$int$, \
hHandle, long, \
dwMilliseconds, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hHandle]
mov r02d, [.dwMilliseconds]
call qword [impr$WaitForSingleObject]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getExitCodeThread$long$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$getExitCodeThread$long$, \
hThread, long
floc lpExitCode, int
fenter
mov qword [.lpExitCode], $00
cld
lea rsp, [rsp-$20]
mov r01q, [.hThread]
lea r02q, [.lpExitCode]
call qword [impr$GetExitCodeThread]
vmovd xmm0, r00d
vmovd xmm1, [.lpExitCode]
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$openThread$int$boolean$int$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$openThread$int$boolean$int$, \
dwDesiredAccess, int, \
bInheritHandle, boolean, \
dwThreadId, int
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.dwDesiredAccess]
mov r02d, [.bInheritHandle]
mov r08d, [.dwThreadId]
call qword [impr$OpenThread]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createThread$long$long$long$avt.lang.Runnable$int$) ; <fold returns long2>
fast platform.dependent.mswindows.kernel.Kernel$createThread$long$long$long$avt.lang.Runnable$int$, \
lpThreadAttributes, long, \
dwStackSize, long, \
lpStartAddress, long, \
lpParameter, avt.lang.Runnable, \
dwCreationFlags, int
floc lpThreadId, int
fenter
mov qword [.lpThreadId], $00
cld
lea rsp, [rsp-$30]
mov r01q, [.lpThreadAttributes]
mov r02q, [.dwStackSize]
mov r08q, [.lpStartAddress]
mov r09q, [.lpParameter]
mov r00d, [.dwCreationFlags]
mov qword [rsp+$20], r00q
lea r00q, [.lpThreadId]
mov qword [rsp+$28], r00q
call qword [impr$CreateThread]
vmovq xmm0, r00q
vmovq xmm1, [.lpThreadId]
vpslldq xmm1, xmm1, $08
vpor xmm0, xmm0, xmm1
mov r00q, [.lpParameter]
tstdecrcoth r00q
fcltag_x lpParameter
fleave
end if ; </fold>
; процесс
if(used platform.dependent.mswindows.kernel.Kernel$exitProcess$int$) ; <fold >
fast platform.dependent.mswindows.kernel.Kernel$exitProcess$int$, \
uExitCode, int
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.uExitCode]
call qword [impr$ExitProcess]
end_proc
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setCurrentDirectory$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setCurrentDirectory$long$, \
lpPathName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpPathName]
call qword [impr$SetCurrentDirectory]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setPriorityClass$long$int$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setPriorityClass$long$int$, \
hProcess, long, \
dwPriorityClass, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hProcess]
mov r02d, [.dwPriorityClass]
call qword [impr$SetPriorityClass]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setHandleInfo$long$int$int$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setHandleInfo$long$int$int$, \
hObject, long, \
dwMask, int, \
dwFlags, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hObject]
mov r02d, [.dwMask]
mov r08d, [.dwFlags]
call qword [impr$SetHandleInformation]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setEnvironmentStrings$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setEnvironmentStrings$long$, \
newEnvironment, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.newEnvironment]
call qword [impr$SetEnvironmentStrings]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setEnvironmentVariable$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setEnvironmentVariable$long$long$, \
lpName, long, \
lpValue, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpName]
mov r02q, [.lpValue]
call qword [impr$SetEnvironmentVariable]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$freeEnvironmentStrings$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$freeEnvironmentStrings$long$, \
lpEnv, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpEnv]
call qword [impr$FreeEnvironmentStrings]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$process32First$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$process32First$long$long$, \
hSnapshot, long, \
lpProcessEntry, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hSnapshot]
mov r02q, [.lpProcessEntry]
call qword [impr$Process32First]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$process32Next$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$process32Next$long$long$, \
hSnapshot, long, \
lpProcessEntry, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hSnapshot]
mov r02q, [.lpProcessEntry]
call qword [impr$Process32Next]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createProcess$long$long$long$long$boolean$int$long$long$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$createProcess$long$long$long$long$boolean$int$long$long$long$long$, \
lpApplicationName, long, \
lpCommandLine, long, \
lpProcessAttributes, long, \
lpThreadAttributes, long, \
bInheritHandles, boolean, \
dwCreationFlags, int, \
lpEnvironment, long, \
lpCurrentDirectory, long, \
lpStartupInfo, long, \
lpProcessInfo, long
fenter
cld
lea rsp, [rsp-$50]
mov r01q, [.lpApplicationName]
mov r02q, [.lpCommandLine]
mov r08q, [.lpProcessAttributes]
mov r09q, [.lpThreadAttributes]
mov r00d, [.bInheritHandles]
mov qword [rsp+$20], r00q
mov r00d, [.dwCreationFlags]
mov qword [rsp+$28], r00q
mov r00q, [.lpEnvironment]
mov qword [rsp+$30], r00q
mov r00q, [.lpCurrentDirectory]
mov qword [rsp+$38], r00q
mov r00q, [.lpStartupInfo]
mov qword [rsp+$40], r00q
mov r00q, [.lpProcessInfo]
mov qword [rsp+$48], r00q
call qword [impr$CreateProcess]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getConsoleInputCP$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getConsoleInputCP$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetConsoleInputCP]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getConsoleOutputCP$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getConsoleOutputCP$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetConsoleOutputCP]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getCurrentProcessId$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getCurrentProcessId$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetCurrentProcessId]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getCurrentDirectory$int$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getCurrentDirectory$int$long$, \
nBufferLength, int, \
lpBuffer, long
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.nBufferLength]
mov r02q, [.lpBuffer]
call qword [impr$GetCurrentDirectory]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getPriorityClass$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getPriorityClass$long$, \
hProcess, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hProcess]
call qword [impr$GetPriorityClass]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getEnvironmentVariable$long$long$int$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getEnvironmentVariable$long$long$int$, \
lpName, long, \
lpBuffer, long, \
nSize, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpName]
mov r02q, [.lpBuffer]
mov r08d, [.nSize]
call qword [impr$GetEnvironmentVariable]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getExitCodeProcess$long$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$getExitCodeProcess$long$, \
hProcess, long
floc exitCode, int
fenter
mov qword [.exitCode], $00
cld
lea rsp, [rsp-$20]
mov r01q, [.hProcess]
lea r02q, [.exitCode]
call qword [impr$GetExitCodeProcess]
vmovd xmm0, r00d
vmovd xmm1, [.exitCode]
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getCurrentProcess$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$getCurrentProcess$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetCurrentProcess]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getStdHandle$int$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$getStdHandle$int$, \
nStdHandle, int
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.nStdHandle]
call qword [impr$GetStdHandle]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$openProcess$int$boolean$int$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$openProcess$int$boolean$int$, \
dwDesiredAccess, int, \
bInheritHandle, boolean, \
dwProcessId, int
fenter
cld
lea rsp, [rsp-$20]
mov r01d, [.dwDesiredAccess]
mov r02d, [.bInheritHandle]
mov r08d, [.dwProcessId]
call qword [impr$OpenProcess]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getCommandLine$) ; <fold returns long2>
fast platform.dependent.mswindows.kernel.Kernel$getCommandLine$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetCommandLine]
savetbp
lea r02q, [r00+$00]
lea r07q, [r00+$00]
xor r00d, r00d
mov r01d, avt.lang.Int$MAX_VALUE
cld
repne scasw
lea r00q, [r07-$02]
sub r00q, r02q
sar r00q, $01
rstortbp
vmovq xmm0, r02q
vmovq xmm1, r00q
vpslldq xmm1, xmm1, $08
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getEnvironmentStrings$) ; <fold returns long2>
fast platform.dependent.mswindows.kernel.Kernel$getEnvironmentStrings$
fenter
cld
lea rsp, [rsp-$20]
call qword [impr$GetEnvironmentStrings]
lea r02q, [r00+$00]
test r00q, r00q
jz .L.0002
savetbp
lea r07q, [r00+$00]
xor r00d, r00d
mov r01d, avt.lang.Int$MAX_VALUE
cld
scasw
je .L.0001
.L.0000: repne scasw
scasw
jne .L.0000
lea r00q, [r07-$02]
sub r00q, r02q
sar r00q, $01
.L.0001: rstortbp
.L.0002: vmovq xmm0, r02q
vmovq xmm1, r00q
vpslldq xmm1, xmm1, $08
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createPipe$long$int$) ; <fold returns long2>
fast platform.dependent.mswindows.kernel.Kernel$createPipe$long$int$, \
lpPipeAttributes, long, \
nSize, int
floc result, long2
fenter
vpxor xmm0, xmm0, xmm0
vmovdqa xword [.result], xmm0
cld
lea rsp, [rsp-$20]
lea r01q, [.result+$00]
lea r02q, [.result+$08]
mov r08q, [.lpPipeAttributes]
mov r09d, [.nSize]
call qword [impr$CreatePipe]
test r00d, r00d
jnz .L.0000
vpxor xmm0, xmm0, xmm0
freturn
.L.0000: vmovdqa xmm0, [.result]
fleave
end if ; </fold>
; исполняемые модули
if(used platform.dependent.mswindows.kernel.Kernel$getModuleFileName$long$long$int$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getModuleFileName$long$long$int$, \
hModule, long, \
lpFileName, long, \
nSize, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hModule]
mov r02q, [.lpFileName]
mov r08d, [.nSize]
call qword [impr$GetModuleFileName]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getModuleFileNameEx$long$long$long$int$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getModuleFileNameEx$long$long$long$int$, \
hProcess, long, \
hModule, long, \
lpFileName, long, \
nSize, int
floc functionName, long4, \
functionModule, long, \
functionPointer, long
fenter
lea r12q, [cons$s]
mov r01d, platform.dependent.mswindows.kernel.Kernel$funcGetModuleFileNameExW
mov r01d, [r12+r01*4+$00]
lea r01q, [r12+r01*1+$02]
vmovdqu xmm0, [r01+$00]
vmovdqu xmm1, [r01+$20]
vmovdqu xmm2, [r01+$10]
vmovdqu xmm3, [r01+$30]
vpackuswb xmm0, xmm0, xmm2
vpackuswb xmm1, xmm1, xmm3
vmovdqa xword [.functionName+$00], xmm0
vmovdqa xword [.functionName+$10], xmm1
cld
lea rsp, [rsp-$20]
mov r01d, platform.dependent.mswindows.kernel.Kernel$libKERNEL32
mov r01d, [r12+r01*4+$00]
lea r01q, [r12+r01*1+$02]
call qword [impr$GetModuleHandle]
lea r01q, [r00+$00]
lea r02q, [.functionName]
call qword [impr$GetProcAddress]
test r00q, r00q
jnz .L.0002
mov r01d, platform.dependent.mswindows.kernel.Kernel$libPSAPI
mov r01d, [r12+r01*4+$00]
lea r01q, [r12+r01*1+$02]
call qword [impr$GetModuleHandle]
test r00q, r00q
jnz .L.0000
mov r01d, platform.dependent.mswindows.kernel.Kernel$libPSAPI
mov r01d, [r12+r01*4+$00]
lea r01q, [r12+r01*1+$02]
call qword [impr$LoadLibrary]
test r00q, r00q
jz .L.0001
.L.0000: lea r01q, [r00+$00]
lea r02q, [.functionName]
call qword [impr$GetProcAddress]
test r00q, r00q
jnz .L.0002
.L.0001: xor r00d, r00d
freturn
.L.0002: mov r01q, [.hProcess]
mov r02q, [.hModule]
mov r08q, [.lpFileName]
mov r09d, [.nSize]
call r00q
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getModuleHandle$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$getModuleHandle$long$, \
lpModuleName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpModuleName]
call qword [impr$GetModuleHandle]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getProcAddress$long$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$getProcAddress$long$long$, \
hModule, long, \
lpProcName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hModule]
mov r02q, [.lpProcName]
call qword [impr$GetProcAddress]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$loadLibrary$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$loadLibrary$long$, \
lpLibFileName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpLibFileName]
call qword [impr$LoadLibrary]
fleave
end if ; </fold>
; файловая система
if(used platform.dependent.mswindows.kernel.Kernel$setEndOfFile$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setEndOfFile$long$, \
hFile, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFile]
call qword [impr$SetEndOfFile]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setFileAttributes$long$int$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setFileAttributes$long$int$, \
lpFileName, long, \
dwFileAttributes, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpFileName]
mov r02d, [.dwFileAttributes]
call qword [impr$SetFileAttributes]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setFileTime$long$long$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$setFileTime$long$long$long$long$, \
hFile, long, \
lpCreationTime, long, \
lpLastAccessTime, long, \
lpLastWriteTime, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFile]
mov r02q, [.lpCreationTime]
mov r08q, [.lpLastAccessTime]
mov r09q, [.lpLastWriteTime]
call qword [impr$SetFileTime]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getFileTime$long$long$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$getFileTime$long$long$long$long$, \
hFile, long, \
lpCreationTime, long, \
lpLastAccessTime, long, \
lpLastWriteTime, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFile]
mov r02q, [.lpCreationTime]
mov r08q, [.lpLastAccessTime]
mov r09q, [.lpLastWriteTime]
call qword [impr$GetFileTime]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$findNextFile$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$findNextFile$long$long$, \
hFindFile, long, \
lpFindFileData, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFindFile]
mov r02q, [.lpFindFileData]
call qword [impr$FindNextFile]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$findClose$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$findClose$long$, \
hFindFile, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFindFile]
call qword [impr$FindClose]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$flushFileBuffers$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$flushFileBuffers$long$, \
hFile, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFile]
call qword [impr$FlushFileBuffers]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$deleteFile$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$deleteFile$long$, \
lpFileName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpFileName]
call qword [impr$DeleteFile]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$moveFile$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$moveFile$long$long$, \
lpExistingFileName, long, \
lpNewFileName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpExistingFileName]
mov r02q, [.lpNewFileName]
call qword [impr$MoveFile]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$removeDirectory$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$removeDirectory$long$, \
lpPathName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpPathName]
call qword [impr$RemoveDirectory]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createDirectory$long$long$) ; <fold returns boolean>
fast platform.dependent.mswindows.kernel.Kernel$createDirectory$long$long$, \
lpPathName, long, \
lpSecurityAttributes, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpPathName]
mov r02q, [.lpSecurityAttributes]
call qword [impr$CreateDirectory]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getFileAttributes$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getFileAttributes$long$, \
lpFileName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpFileName]
call qword [impr$GetFileAttributes]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getDriveType$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getDriveType$long$, \
lpRootPathName, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpRootPathName]
call qword [impr$GetDriveType]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getVolumeFlags$long$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getVolumeFlags$long$, \
lpRootPathName, long
floc flags, int
fenter
lea r00q, [.flags]
mov qword [r00+$00], $00
cld
lea rsp, [rsp-$40]
mov r01q, [.lpRootPathName]
xor r02q, r02q
xor r08q, r08q
xor r09q, r09q
mov qword [rsp+$20], $00
mov qword [rsp+$28], r00q
mov qword [rsp+$30], $00
mov qword [rsp+$38], $00
call qword [impr$GetVolumeInformation]
test r00d, r00d
jnz .L.0000
mov r00d, platform.dependent.mswindows.kernel.Kernel$INVALID_VOLUME_FLAGS
jmp .L.EXIT
.L.0000: mov r00d, [.flags]
.L.EXIT: fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getVolumeName$long$long$int$) ; <fold returns int>
fast platform.dependent.mswindows.kernel.Kernel$getVolumeName$long$long$int$, \
lpRootPathName, long, \
lpVolumeNameBuffer, long, \
nVolumeNameSize, int
fenter
cld
lea rsp, [rsp-$40]
mov r01q, [.lpRootPathName]
mov r02q, [.lpVolumeNameBuffer]
mov r08d, [.nVolumeNameSize]
xor r09q, r09q
mov qword [rsp+$20], $00
mov qword [rsp+$28], $00
mov qword [rsp+$30], $00
mov qword [rsp+$38], $00
call qword [impr$GetVolumeInformation]
test r00d, r00d
jnz .L.0000
mov r00d, $ffffffff
jmp .L.EXIT
.L.0000: savetbp
xor r00d, r00d
mov r01d, [.nVolumeNameSize]
mov r02q, [.lpVolumeNameBuffer]
lea r07q, [r02+$00]
cld
repne scasw
lea r00q, [r07-$02]
sub r00q, r02q
sar r00q, $01
rstortbp
.L.EXIT: fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$readFile$long$long$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$readFile$long$long$, \
hFile, long, \
lpOverlapped, long
floc lpBuffer, int, \
lpNumberOfBytesRead, int
fenter
mov qword [.lpBuffer], $00
mov qword [.lpNumberOfBytesRead], $00
cld
lea rsp, [rsp-$30]
mov r01q, [.hFile]
lea r02q, [.lpBuffer]
mov r08d, $01
lea r09q, [.lpNumberOfBytesRead]
mov r00q, [.lpOverlapped]
mov qword [rsp+$20], r00q
call qword [impr$ReadFile]
test r00d, r00d
jnz .L.0000
vpxor xmm0, xmm0, xmm0
freturn
.L.0000: cmp dword [.lpNumberOfBytesRead], $01
je .L.0001
mov r01d, -$01
jmp .L.0002
.L.0001: mov r01d, [.lpBuffer]
.L.0002: vmovd xmm0, r00d
vmovd xmm1, r01d
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$readFile$long$long$int$long$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$readFile$long$long$int$long$, \
hFile, long, \
lpBuffer, long, \
nNumberOfBytesToRead, int, \
lpOverlapped, long
floc lpNumberOfBytesRead, int
fenter
mov qword [.lpNumberOfBytesRead], $00
cld
lea rsp, [rsp-$30]
mov r01q, [.hFile]
mov r02q, [.lpBuffer]
mov r08d, [.nNumberOfBytesToRead]
lea r09q, [.lpNumberOfBytesRead]
mov r00q, [.lpOverlapped]
mov qword [rsp+$20], r00q
call qword [impr$ReadFile]
vmovd xmm0, r00d
vmovd xmm1, [.lpNumberOfBytesRead]
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$writeFile$long$int$long$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$writeFile$long$int$long$, \
hFile, long, \
lpBuffer, int, \
lpOverlapped, long
floc lpNumberOfBytesWritten, int
fenter
mov qword [.lpNumberOfBytesWritten], $00
cld
lea rsp, [rsp-$30]
mov r01q, [.hFile]
lea r02q, [.lpBuffer]
mov r08d, $01
lea r09q, [.lpNumberOfBytesWritten]
mov r00q, [.lpOverlapped]
mov qword [rsp+$20], r00q
call qword [impr$WriteFile]
vmovd xmm0, r00d
vmovd xmm1, [.lpNumberOfBytesWritten]
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$writeFile$long$long$int$long$) ; <fold returns int2>
fast platform.dependent.mswindows.kernel.Kernel$writeFile$long$long$int$long$, \
hFile, long, \
lpBuffer, long, \
nNumberOfBytesToWrite, int, \
lpOverlapped, long
floc lpNumberOfBytesWritten, int
fenter
mov qword [.lpNumberOfBytesWritten], $00
cld
lea rsp, [rsp-$30]
mov r01q, [.hFile]
mov r02q, [.lpBuffer]
mov r08d, [.nNumberOfBytesToWrite]
lea r09q, [.lpNumberOfBytesWritten]
mov r00q, [.lpOverlapped]
mov qword [rsp+$20], r00q
call qword [impr$WriteFile]
vmovd xmm0, r00d
vmovd xmm1, [.lpNumberOfBytesWritten]
vpslldq xmm1, xmm1, $04
vpor xmm0, xmm0, xmm1
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$setFilePointer$long$long$int$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$setFilePointer$long$long$int$, \
hFile, long, \
lDistanceToMove, long, \
dwMoveMethod, int
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.hFile]
mov r02d, [.lDistanceToMove+$00]
lea r08q, [.lDistanceToMove+$04]
mov r09d, [.dwMoveMethod]
call qword [impr$SetFilePointer]
mov dword [.lDistanceToMove], r00d
mov r00q, [.lDistanceToMove]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getFileSize$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$getFileSize$long$, \
hFile, long
floc lpFileSizeHigh, int
fenter
mov qword [.lpFileSizeHigh], $00
cld
lea rsp, [rsp-$20]
mov r01q, [.hFile]
lea r02q, [.lpFileSizeHigh]
call qword [impr$GetFileSize]
mov r00d, r00d
mov r01d, [.lpFileSizeHigh]
shl r01q, $20
or r00q, r01q
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$findFirstFile$long$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$findFirstFile$long$long$, \
lpFileName, long, \
lpFindFileData, long
fenter
cld
lea rsp, [rsp-$20]
mov r01q, [.lpFileName]
mov r02q, [.lpFindFileData]
call qword [impr$FindFirstFile]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$createFile$long$int$int$long$int$int$long$) ; <fold returns long>
fast platform.dependent.mswindows.kernel.Kernel$createFile$long$int$int$long$int$int$long$, \
lpFileName, long, \
dwDesiredAccess, int, \
dwShareMode, int, \
lpSecurityAttributes, long, \
dwCreationDisposition, int, \
dwFlagsAndAttributes, int, \
hTemplateFile, long
fenter
cld
lea rsp, [rsp-$40]
mov r01q, [.lpFileName]
mov r02d, [.dwDesiredAccess]
mov r08d, [.dwShareMode]
mov r09q, [.lpSecurityAttributes]
mov r00d, [.dwCreationDisposition]
mov qword [rsp+$20], r00q
mov r00d, [.dwFlagsAndAttributes]
mov qword [rsp+$28], r00q
mov r00q, [.hTemplateFile]
mov qword [rsp+$30], r00q
call qword [impr$CreateFile]
fleave
end if ; </fold>
if(used platform.dependent.mswindows.kernel.Kernel$getDiskFreeSpaceEx$long$) ; <fold returns long4>
fast platform.dependent.mswindows.kernel.Kernel$getDiskFreeSpaceEx$long$, \
lpDirectoryName, long
floc result, long4
fenter
vpxor ymm0, ymm0, ymm0
vmovdqu yword [.result], ymm0
cld
lea rsp, [rsp-$20]
mov r01q, [.lpDirectoryName]
lea r02q, [.result+$08]
lea r08q, [.result+$10]
lea r09q, [.result+$18]
call qword [impr$GetDiskFreeSpaceEx]
mov r00d, r00d
mov qword [.result], r00q
vmovdqu ymm0, [.result]
fleave
end if ; </fold>
; </fold>