;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold platform.dependent.mswindows.runtime.Heap64 — родной код>
if(used platform.dependent.mswindows.runtime.Heap64$insert$int$) ; <fold >
fast platform.dependent.mswindows.runtime.Heap64$insert$int$, \
this, platform.dependent.mswindows.runtime.Heap64, \
index, int
fenter
mov r02q, [.this]
mov r00d, [r02+platform.dependent.mswindows.runtime.Heap64$fldHeapLength]
mov r01d, r00d
sub r01d, [.index]
jng .L.EXIT
savetp
lea r00q, [r00+r00*1+$00]
lea r01q, [r01+r01*1+$00]
mov r07q, [r02+platform.dependent.mswindows.runtime.Heap64$fldMemoryMap]
lea r07q, [r07+$40]
add r07q, [r07+avt.lang.Array$fldOffset-$40]
lea r07q, [r07+r00*8+$08]
lea r06q, [r07-$10]
std
rep movsq
rstortp
.L.EXIT: decrcoth r02q
fcltag_x this
fleave
end if ; </fold>
if(used platform.dependent.mswindows.runtime.Heap64$delete$int$) ; <fold >
fast platform.dependent.mswindows.runtime.Heap64$delete$int$, \
this, platform.dependent.mswindows.runtime.Heap64, \
index, int
fenter
mov r02q, [.this]
mov r00d, [.index]
mov r01d, [r02+platform.dependent.mswindows.runtime.Heap64$fldHeapLength]
sub r01d, r00d
jng .L.EXIT
savetp
lea r00q, [r00+r00*1+$00]
lea r01q, [r01+r01*1+$00]
mov r07q, [r02+platform.dependent.mswindows.runtime.Heap64$fldMemoryMap]
lea r07q, [r07+$40]
add r07q, [r07+avt.lang.Array$fldOffset-$40]
lea r07q, [r07+r00*8+$00]
lea r06q, [r07+$10]
cld
rep movsq
rstortp
.L.EXIT: decrcoth r02q
fcltag_x this
fleave
end if ; </fold>
if(used platform.dependent.mswindows.runtime.Heap64$findFreeSpace$int$) ; <fold returns int>
fast platform.dependent.mswindows.runtime.Heap64$findFreeSpace$int$, \
this, platform.dependent.mswindows.runtime.Heap64, \
length, int
fenter
mov r02q, [.this]
mov r00d, [.length]
mov r01d, [r02+platform.dependent.mswindows.runtime.Heap64$fldHeapLength]
cmp r01d, $00
jg .L.0000
cmp r00d, [r02+platform.dependent.mswindows.runtime.Heap64$fldHeapCapacity]
setng r00b
dec r00b
movsx r00d, r00b
jmp .L.EXIT
.L.0000: mov r08q, [r02+platform.dependent.mswindows.runtime.Heap64$fldMemoryMap]
lea r08q, [r08+$40]
add r08q, [r08+avt.lang.Array$fldOffset-$40]
cmp r00d, [r08+$00]
jg .L.0001
xor r00d, r00d
jmp .L.EXIT
.L.0001: xor r09d, r09d
@@: cmp r00d, [r08+r09*8+$08]
jng .L.0002
lea r09d, [r09d+$02]
loop @B
mov r00d, -$01
jmp .L.EXIT
.L.0002: lea r00d, [r09d+$02]
sar r00d, $01
.L.EXIT: decrcoth r02q
fcltag_x this
fleave
end if ; </fold>
if(used platform.dependent.mswindows.runtime.Heap64$indexOf$int$) ; <fold returns int>
fast platform.dependent.mswindows.runtime.Heap64$indexOf$int$, \
this, platform.dependent.mswindows.runtime.Heap64, \
offset, int
fenter
mov r02q, [.this]
mov r11d, [.offset]
mov r01q, [r02+platform.dependent.mswindows.runtime.Heap64$fldMemoryMap]
lea r01q, [r01+$40]
add r01q, [r01+avt.lang.Array$fldOffset-$40]
xor r08d, r08d
mov r09d, [r02+platform.dependent.mswindows.runtime.Heap64$fldHeapLength]
lea r09d, [r09d-$01]
jmp .L.0002
.L.0000: lea r00d, [r08d+r09d*1+$00]
and r00d, -$02
mov r10d, [r01+r00*8+$00]
sar r00d, $01
cmp r10d, r11d
jng .L.0001
lea r09d, [r00d-$01]
jmp .L.0002
.L.0001: jnl .L.EXIT
lea r08d, [r00d+$01]
.L.0002: cmp r08d, r09d
jle .L.0000
mov r00d, -$01
.L.EXIT: decrcoth r02q
fcltag_x this
fleave
end if ; </fold>
; </fold>