;
; Исходный код среды исполнения ПВТ-ОО.
;
; Этот исходный код является частью проекта ПВТ-ОО.
;
; Copyright © 2021 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять её и/или
; изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она может быть полезна,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <http://www.gnu.org/licenses/>.
;
; <fold read structure field>
if(used inst$getstructfieldi) ; <fold >
inst getstructfieldi ; (offset in ecx)
sverify
mov ecx, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
mov qword[rsp+$08], $00
mov qword[rsp+$00], rcx
set TAG_INT
end_inst
end if ; </fold>
if(used inst$getstructfieldi2) ; <fold >
inst getstructfieldi2 ; (offset in ecx)
sverify
vmovq xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_INT2
end_inst
end if ; </fold>
if(used inst$getstructfieldi4) ; <fold >
inst getstructfieldi4 ; (offset in ecx)
sverify
vmovdqu xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_INT4
end_inst
end if ; </fold>
if(used inst$getstructfieldi8) ; <fold >
inst getstructfieldi8 ; (offset in ecx)
sverifyy
vmovdqu ymm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqu yword[rsp], ymm0
set TAG_INT8
end_inst
end if ; </fold>
if(used inst$getstructfieldl) ; <fold >
inst getstructfieldl ; (offset in ecx)
sverify
mov rcx, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
mov qword[rsp+$08], $00
mov qword[rsp+$00], rcx
set TAG_LONG
end_inst
end if ; </fold>
if(used inst$getstructfieldl2) ; <fold >
inst getstructfieldl2 ; (offset in ecx)
sverify
vmovdqu xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_LONG2
end_inst
end if ; </fold>
if(used inst$getstructfieldl4) ; <fold >
inst getstructfieldl4 ; (offset in ecx)
sverifyy
vmovdqu ymm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqu yword[rsp], ymm0
set TAG_LONG4
end_inst
end if ; </fold>
if(used inst$getstructfieldl8) ; <fold >
inst getstructfieldl8 ; (offset in ecx)
sverifyz
vmovdqu64 zmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqu64 zword[rsp], zmm0
set TAG_LONG8
end_inst
end if ; </fold>
if(used inst$getstructfieldf) ; <fold >
inst getstructfieldf ; (offset in ecx)
sverify
vmovd xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_FLOAT
end_inst
end if ; </fold>
if(used inst$getstructfieldf2) ; <fold >
inst getstructfieldf2 ; (offset in ecx)
sverify
vmovq xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_FLOAT2
end_inst
end if ; </fold>
if(used inst$getstructfieldf4) ; <fold >
inst getstructfieldf4 ; (offset in ecx)
sverify
vmovdqu xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_FLOAT4
end_inst
end if ; </fold>
if(used inst$getstructfieldf8) ; <fold >
inst getstructfieldf8 ; (offset in ecx)
sverifyy
vmovdqu ymm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqu yword[rsp], ymm0
set TAG_FLOAT8
end_inst
end if ; </fold>
if(used inst$getstructfieldd) ; <fold >
inst getstructfieldd ; (offset in ecx)
sverify
vmovq xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_DOUBLE
end_inst
end if ; </fold>
if(used inst$getstructfieldd2) ; <fold >
inst getstructfieldd2 ; (offset in ecx)
sverify
vmovdqu xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_DOUBLE2
end_inst
end if ; </fold>
if(used inst$getstructfieldd4) ; <fold >
inst getstructfieldd4 ; (offset in ecx)
sverifyy
vmovdqu ymm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqu yword[rsp], ymm0
set TAG_DOUBLE4
end_inst
end if ; </fold>
if(used inst$getstructfieldd8) ; <fold >
inst getstructfieldd8 ; (offset in ecx)
sverifyz
vmovdqu64 zmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqu64 zword[rsp], zmm0
set TAG_DOUBLE8
end_inst
end if ; </fold>
if(used inst$getstructfieldb) ; <fold >
inst getstructfieldb ; (offset in ecx)
sverify
movsx ecx, byte[rax+rdi*1]
vmovd xmm0, ecx
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_INT
end_inst
end if ; </fold>
if(used inst$getstructfieldb2) ; <fold >
inst getstructfieldb2 ; (offset in ecx)
sverify
movzx ecx, word[rax+rdi*1]
vmovd xmm0, ecx
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_BYTE2
end_inst
end if ; </fold>
if(used inst$getstructfieldb4) ; <fold >
inst getstructfieldb4 ; (offset in ecx)
sverify
vmovd xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_BYTE4
end_inst
end if ; </fold>
if(used inst$getstructfieldb8) ; <fold >
inst getstructfieldb8 ; (offset in ecx)
sverify
vmovq xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_BYTE8
end_inst
end if ; </fold>
if(used inst$getstructfields) ; <fold >
inst getstructfields ; (offset in ecx)
sverify
movsx ecx, word[rax+rdi*1]
vmovd xmm0, ecx
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_INT
end_inst
end if ; </fold>
if(used inst$getstructfields2) ; <fold >
inst getstructfields2 ; (offset in ecx)
sverify
vmovd xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_SHORT2
end_inst
end if ; </fold>
if(used inst$getstructfields4) ; <fold >
inst getstructfields4 ; (offset in ecx)
sverify
vmovq xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_SHORT4
end_inst
end if ; </fold>
if(used inst$getstructfields8) ; <fold >
inst getstructfields8 ; (offset in ecx)
sverify
vmovdqu xmm0, [rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_SHORT8
end_inst
end if ; </fold>
if(used inst$getstructfieldx) ; <fold >
inst getstructfieldx ; (offset in ecx)
sverify
fld tbyte[rax+rdi*1]
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
mov dword[rsp+$0c], $00
mov word[rsp+$0a], $00
fstp tbyte[rsp]
set TAG_REAL
end_inst
end if ; </fold>
if(used inst$getstructfieldc) ; <fold >
inst getstructfieldc ; (offset in ecx)
sverify
movzx ecx, word[rax+rdi*1]
vmovd xmm0, ecx
lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
vmovdqa xword[rsp], xmm0
set TAG_INT
end_inst
end if ; </fold>
; </fold>