;
; Исходный код среды исполнения ПВТ-ОО.
;
; Этот исходный код является частью проекта ПВТ-ОО.
;
; Copyright © 2021 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять её и/или
; изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она может быть полезна,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <http://www.gnu.org/licenses/>.
;
; <fold avt.lang.Int8 (natives)>
method avt.lang.Int8$max$int8$int8$, \
value0, int8, \
value1, int8 ; returns int8 <fold >
menter
lverify value0, TAG_INT8
lverify value1, TAG_INT8
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpmaxsd ymm0, ymm0, ymm1
call inst$i8push
mleavey
eleave
; </fold>
method avt.lang.Int8$maxUnsigned$int8$int8$, \
value0, int8, \
value1, int8 ; returns int8 <fold >
menter
lverify value0, TAG_INT8
lverify value1, TAG_INT8
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpmaxud ymm0, ymm0, ymm1
call inst$i8push
mleavey
eleave
; </fold>
method avt.lang.Int8$min$int8$int8$, \
value0, int8, \
value1, int8 ; returns int8 <fold >
menter
lverify value0, TAG_INT8
lverify value1, TAG_INT8
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpminsd ymm0, ymm0, ymm1
call inst$i8push
mleavey
eleave
; </fold>
method avt.lang.Int8$minUnsigned$int8$int8$, \
value0, int8, \
value1, int8 ; returns int8 <fold >
menter
lverify value0, TAG_INT8
lverify value1, TAG_INT8
vmovdqu ymm0, [.value0]
vmovdqu ymm1, [.value1]
vpminud ymm0, ymm0, ymm1
call inst$i8push
mleavey
eleave
; </fold>
method avt.lang.Int8$rotateLeft$int8$int$, \
value, int8, \
bits, int ; returns int8 <fold >
menter
lverify value, TAG_INT8
lverify bits, TAG_INT
mov r1d, [.bits]
and r1d, $1f
mov r2d, $20
sub r2d, r1d
vmovdqu ymm3, [.value]
vmovd xmm2, r2d
vmovd xmm1, r1d
vpslld ymm0, ymm3, xmm1
vpsrld ymm3, ymm3, xmm2
vpor ymm0, ymm0, ymm3
call inst$i8push
mleavey
eleave
; </fold>
method avt.lang.Int8$rotateRight$int8$int$, \
value, int8, \
bits, int ; returns int8 <fold >
menter
lverify value, TAG_INT8
lverify bits, TAG_INT
mov r1d, [.bits]
and r1d, $1f
mov r2d, $20
sub r2d, r1d
vmovdqu ymm3, [.value]
vmovd xmm2, r2d
vmovd xmm1, r1d
vpsrld ymm0, ymm3, xmm1
vpslld ymm3, ymm3, xmm2
vpor ymm0, ymm0, ymm3
call inst$i8push
mleavey
eleave
; </fold>
method avt.lang.Int8$high$int8$, \
value, int8 ; returns int4 <fold >
menter
lverify value, TAG_INT8
i4load [.value+$10]
mleavex
eleave
; </fold>
method avt.lang.Int8$create$int4$int4$, \
value0, int4, \
value1, int4 ; returns int8 <fold >
menter
lverify value0, TAG_INT4
lverify value1, TAG_INT4
iload [.value0+$00]
iload [.value0+$04]
iload [.value0+$08]
iload [.value0+$0c]
iload [.value1+$00]
iload [.value1+$04]
iload [.value1+$08]
iload [.value1+$0c]
newvectori8
mleavey
eleave
; </fold>
method avt.lang.Int8$create$int2$int2$int2$int2$, \
value0, int2, \
value1, int2, \
value2, int2, \
value3, int2 ; returns int8 <fold >
menter
lverify value0, TAG_INT2
lverify value1, TAG_INT2
lverify value2, TAG_INT2
lverify value3, TAG_INT2
iload [.value0+$00]
iload [.value0+$04]
iload [.value1+$00]
iload [.value1+$04]
iload [.value2+$00]
iload [.value2+$04]
iload [.value3+$00]
iload [.value3+$04]
newvectori8
mleavey
eleave
; </fold>
method avt.lang.Int8$setElement$int8$int$int$, \
value, int8, \
index, int, \
element, int ; returns int8 <fold >
menter
lverify value, TAG_INT8
lverify index, TAG_INT
lverify element, TAG_INT
mov r0d, [.index]
cmp r0d, $00
jl .L.000
cmp r0d, $08
jl .L.001
.L.000: call inst$throwVectorIndexOutOfBoundsException
.L.001: mov r1d, [.element]
mov dword[.value+r0*4], r1d
i8load [.value]
mleavey
eleave
; </fold>
method avt.lang.Int8$toLong4Bits$int8$, \
value, int8 ; returns long4 <fold >
menter
lverify value, TAG_INT8
l4load [.value]
mleavey
eleave
; </fold>
method avt.lang.Int8$toFloat8Bits$int8$, \
value, int8 ; returns float8 <fold >
menter
lverify value, TAG_INT8
f8load [.value]
mleavey
eleave
; </fold>
; </fold>