;
; Исходный код среды исполнения ПВТ-ОО.
;
; Этот исходный код является частью проекта ПВТ-ОО.
;
; Copyright © 2021 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять её и/или
; изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она может быть полезна,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <http://www.gnu.org/licenses/>.
;
; <fold avt.lang.Long4 (natives)>
method avt.lang.Long4$max$long4$long4$, \
value0, long4, \
value1, long4 ; returns long4 <fold >
menter
lverify value0, TAG_LONG4
lverify value1, TAG_LONG4
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpmaxsq ymm0, ymm0, ymm1
call inst$l4push
mleavey
eleave
; </fold>
method avt.lang.Long4$maxUnsigned$long4$long4$, \
value0, long4, \
value1, long4 ; returns long4 <fold >
menter
lverify value0, TAG_LONG4
lverify value1, TAG_LONG4
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpmaxuq ymm0, ymm0, ymm1
call inst$l4push
mleavey
eleave
; </fold>
method avt.lang.Long4$min$long4$long4$, \
value0, long4, \
value1, long4 ; returns long4 <fold >
menter
lverify value0, TAG_LONG4
lverify value1, TAG_LONG4
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpminsq ymm0, ymm0, ymm1
call inst$l4push
mleavey
eleave
; </fold>
method avt.lang.Long4$minUnsigned$long4$long4$, \
value0, long4, \
value1, long4 ; returns long4 <fold >
menter
lverify value0, TAG_LONG4
lverify value1, TAG_LONG4
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpminuq ymm0, ymm0, ymm1
call inst$l4push
mleavey
eleave
; </fold>
method avt.lang.Long4$rotateLeft$long4$int$, \
value, long4, \
bits, int ; returns long4 <fold >
menter
lverify value, TAG_LONG4
lverify bits, TAG_INT
mov r1d, [.bits]
and r1d, $3f
mov r2d, $40
sub r2d, r1d
vmovdqu ymm3, [.value]
vmovd xmm2, r2d
vmovd xmm1, r1d
vpsllq ymm0, ymm3, xmm1
vpsrlq ymm3, ymm3, xmm2
vpor ymm0, ymm0, ymm3
call inst$l4push
mleavey
eleave
; </fold>
method avt.lang.Long4$rotateRight$long4$int$, \
value, long4, \
bits, int ; returns long4 <fold >
menter
lverify value, TAG_LONG4
lverify bits, TAG_INT
mov r1d, [.bits]
and r1d, $3f
mov r2d, $40
sub r2d, r1d
vmovdqu ymm3, [.value]
vmovd xmm2, r2d
vmovd xmm1, r1d
vpsrlq ymm0, ymm3, xmm1
vpsllq ymm3, ymm3, xmm2
vpor ymm0, ymm0, ymm3
call inst$l4push
mleavey
eleave
; </fold>
method avt.lang.Long4$high$long4$, \
value, long4 ; returns long2 <fold >
menter
lverify value, TAG_LONG4
l2load [.value+$10]
mleavex
eleave
; </fold>
method avt.lang.Long4$create$long2$long2$, \
value0, long2, \
value1, long2 ; returns long4 <fold >
menter
lverify value0, TAG_LONG2
lverify value1, TAG_LONG2
lload [.value0+$00]
lload [.value0+$08]
lload [.value1+$00]
lload [.value1+$08]
newvectorl4
mleavey
eleave
; </fold>
method avt.lang.Long4$setElement$long4$int$long$, \
value, long4, \
index, int, \
element, long ; returns long4 <fold >
menter
lverify value, TAG_LONG4
lverify index, TAG_INT
lverify element, TAG_LONG
mov r0d, [.index]
cmp r0d, $00
jl .L.000
cmp r0d, $04
jl .L.001
.L.000: call inst$throwVectorIndexOutOfBoundsException
.L.001: mov r1, [.element]
mov qword[.value+r0*8], r1
l4load [.value]
mleavey
eleave
; </fold>
method avt.lang.Long4$toInt8Bits$long4$, \
value, long4 ; returns int8 <fold >
menter
lverify value, TAG_LONG4
i8load [.value]
mleavey
eleave
; </fold>
method avt.lang.Long4$toDouble4Bits$long4$, \
value, long4 ; returns double4 <fold >
menter
lverify value, TAG_LONG4
d4load [.value]
mleavey
eleave
; </fold>
; </fold>