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