;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold чтение компонентов массивов>
macro fenter_rdac {
local .L.0000
local .L.0001
fenter
test r08q, r08q
jnz .L.0000
fthrow NullPointerException
.L.0000: cmp r02d, [r08+avt.lang.Array$fldLength]
jb .L.0001
decrcoth r08q
fthrow ArrayIndexOutOfBoundsException
.L.0001: lea r01q, [r08+$40]
add r01q, [r01+avt.lang.Array$fldOffset-$40]
}
macro fleave_rdac {
decrcoth r08q
fleave
}
if(used inst$rdacr) ; <fold returns avt.lang.Object>
fast inst$rdacr
fenter_rdac
mov qsc0, [r01+r02*8+$00]
tstincrcoth qsc0
fleave_rdac
end if ; </fold>
if(used inst$rdacc) ; <fold returns char>
fast inst$rdacc
fenter_rdac
movzx dsc0, word [r01+r02*2+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdace) ; <fold returns real>
fast inst$rdace
fenter_rdac
lea r02q, [r02+r02*4+$00]
fld tbyte [r01+r02*2+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacd) ; <fold returns double>
fast inst$rdacd
fenter_rdac
vmovq xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacd2) ; <fold returns double2>
fast inst$rdacd2
fenter_rdac
lea r02q, [r02+r02*1+$00]
vmovdqu xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacd4) ; <fold returns double4>
fast inst$rdacd4
fenter_rdac
lea r02q, [$00+r02*4+$00]
vmovdqu ymm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacd8) ; <fold returns double8>
fast inst$rdacd8
fenter_rdac
lea r02q, [$00+r02*8+$00]
vmovdqu64 zmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacf) ; <fold returns float>
fast inst$rdacf
fenter_rdac
vmovd xmm0, [r01+r02*4+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacf2) ; <fold returns float2>
fast inst$rdacf2
fenter_rdac
vmovq xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacf4) ; <fold returns float4>
fast inst$rdacf4
fenter_rdac
lea r02q, [r02+r02*1+$00]
vmovdqu xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacf8) ; <fold returns float8>
fast inst$rdacf8
fenter_rdac
lea r02q, [$00+r02*4+$00]
vmovdqu ymm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacb) ; <fold returns byte>
fast inst$rdacb
fenter_rdac
movsx dsc0, byte [r01+r02*1+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacb2) ; <fold returns byte2>
fast inst$rdacb2
fenter_rdac
movzx dsc0, word [r01+r02*2+$00]
vmovd xmm0, dsc0
fleave_rdac
end if ; </fold>
if(used inst$rdacb4) ; <fold returns byte4>
fast inst$rdacb4
fenter_rdac
vmovd xmm0, [r01+r02*4+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacb8) ; <fold returns byte8>
fast inst$rdacb8
fenter_rdac
vmovq xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacs) ; <fold returns short>
fast inst$rdacs
fenter_rdac
movsx dsc0, word [r01+r02*2+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacs2) ; <fold returns short2>
fast inst$rdacs2
fenter_rdac
vmovd xmm0, [r01+r02*4+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacs4) ; <fold returns short4>
fast inst$rdacs4
fenter_rdac
vmovq xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacs8) ; <fold returns short8>
fast inst$rdacs8
fenter_rdac
lea r02q, [r02+r02*1+$00]
vmovdqu xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdaci) ; <fold returns int>
fast inst$rdaci
fenter_rdac
mov dsc0, [r01+r02*4+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdaci2) ; <fold returns int2>
fast inst$rdaci2
fenter_rdac
vmovq xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdaci4) ; <fold returns int4>
fast inst$rdaci4
fenter_rdac
lea r02q, [r02+r02*1+$00]
vmovdqu xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdaci8) ; <fold returns int8>
fast inst$rdaci8
fenter_rdac
lea r02q, [$00+r02*4+$00]
vmovdqu ymm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacl) ; <fold returns long>
fast inst$rdacl
fenter_rdac
mov qsc0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacl2) ; <fold returns long2>
fast inst$rdacl2
fenter_rdac
lea r02q, [r02+r02*1+$00]
vmovdqu xmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacl4) ; <fold returns long4>
fast inst$rdacl4
fenter_rdac
lea r02q, [$00+r02*4+$00]
vmovdqu ymm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
if(used inst$rdacl8) ; <fold returns long8>
fast inst$rdacl8
fenter_rdac
lea r02q, [$00+r02*8+$00]
vmovdqu64 zmm0, [r01+r02*8+$00]
fleave_rdac
end if ; </fold>
; </fold>