;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024, 2026 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold platform.dependent.PlatformServices — родной код>
if(used platform.dependent.PlatformServices$getProcessorBrandString$char.01d$) ; <fold returns int>
fast platform.dependent.PlatformServices$getProcessorBrandString$char.01d$, \
dst, char.01d
fenter
savetp
mov r08q, [.dst]
lea r07q, [r08+$40]
add r07q, [r07+avt.lang.Array$fldOffset-$40]
lea r06q, [r03+$00]
mov r00d, $80000000
cpuid
test r00d, $80000000
jz .L.0000
cmp r00d, $80000004
jge .L.0001
.L.0000: mov r00d, $00
jmp .L.EXIT
.L.0001: mov r00d, $80000002
cpuid
mov dword [r07+$00], r00d
mov dword [r07+$04], r03d
mov dword [r07+$08], r01d
mov dword [r07+$0c], r02d
mov r00d, $80000003
cpuid
mov dword [r07+$10], r00d
mov dword [r07+$14], r03d
mov dword [r07+$18], r01d
mov dword [r07+$1c], r02d
mov r00d, $80000004
cpuid
mov dword [r07+$20], r00d
mov dword [r07+$24], r03d
mov dword [r07+$28], r01d
mov dword [r07+$2c], r02d
lea r02q, [r07+$00]
mov r01d, $30
xor r00d, r00d
cld
repne scasb
je .L.0002
mov r00d, $30
jmp .L.0003
.L.0002: lea r00q, [r07-$01]
sub r00q, r02q
.L.0003: vmovdqa xmm0, [r02+$00]
vmovdqa xmm1, [r02+$10]
vmovdqa xmm2, [r02+$20]
vpmovzxbw ymm0, xmm0
vpmovzxbw ymm1, xmm1
vpmovzxbw ymm2, xmm2
vmovdqa yword [r02+$00], ymm0
vmovdqa yword [r02+$20], ymm1
vmovdqa yword [r02+$40], ymm2
.L.EXIT: lea r03q, [r06+$00]
rstortp
decrcoth r08q
fcltag_x dst
fleave
end if ; </fold>
; </fold>