;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold avt.lang.Float2 — родной код>
if(used avt.lang.Float2$toInt2Bits$float2$) ; <fold returns int2>
fast avt.lang.Float2$toInt2Bits$float2$, \
value, float2
fenter
vmovdqa xmm0, [.value]
fleave
end if ; </fold>
if(used avt.lang.Float2$max$float2$float2$) ; <fold returns float2>
fast avt.lang.Float2$max$float2$float2$, \
value0, float2, \
value1, float2
fenter
vmovdqa xmm0, [.value0]
vmovdqa xmm1, [.value1]
vmovdqa xmm6, [avt.lang.Float8$MASK_NOT_A_NUMBER]
vmovdqa xmm7, [avt.lang.Float8$MASK_NEGATIVE_ZERO]
vpand xmm2, xmm0, xmm6
vpand xmm3, xmm1, xmm6
vpor xmm4, xmm0, xmm1
vpor xmm4, xmm4, xmm7
vpcmpeqd msk1, xmm4, xmm7
vpcmpeqd msk2, xmm3, xmm6
vpcmpeqd msk3, xmm2, xmm6
korw msk2, msk2, msk3
korw msk3, msk1, msk2
knotw msk3, msk3
vpandd xmm2{k1}{z}, xmm0, xmm1
vpord xmm3{k2}{z}, xmm6, xmm7
vmaxps xmm5{k3}{z}, xmm0, xmm1
vpor xmm0, xmm2, xmm3
vpor xmm0, xmm0, xmm5
fleave
end if ; </fold>
if(used avt.lang.Float2$min$float2$float2$) ; <fold returns float2>
fast avt.lang.Float2$min$float2$float2$, \
value0, float2, \
value1, float2
fenter
vmovdqa xmm0, [.value0]
vmovdqa xmm1, [.value1]
vmovdqa xmm6, [avt.lang.Float8$MASK_NOT_A_NUMBER]
vmovdqa xmm7, [avt.lang.Float8$MASK_NEGATIVE_ZERO]
vpand xmm2, xmm0, xmm6
vpand xmm3, xmm1, xmm6
vpor xmm4, xmm0, xmm1
vpor xmm4, xmm4, xmm7
vpcmpeqd msk1, xmm4, xmm7
vpcmpeqd msk2, xmm3, xmm6
vpcmpeqd msk3, xmm2, xmm6
korw msk2, msk2, msk3
korw msk3, msk1, msk2
knotw msk3, msk3
vpord xmm2{k1}{z}, xmm0, xmm1
vpord xmm3{k2}{z}, xmm6, xmm7
vminps xmm5{k3}{z}, xmm0, xmm1
vpor xmm0, xmm2, xmm3
vpor xmm0, xmm0, xmm5
fleave
end if ; </fold>
if(used avt.lang.Float2$setElement$float2$int$float$) ; <fold returns float2>
fast avt.lang.Float2$setElement$float2$int$float$, \
value, float2, \
index, int, \
element, float
fenter
mov r01d, [.index]
cmp r01d, $02
jb @F
fthrow VectorIndexOutOfBoundsException
@@: mov r00d, [.element]
mov dword [.value+r01*4+$00], r00d
vmovdqa xmm0, [.value]
fleave
end if ; </fold>
; </fold>