;
; Исходный код среды исполнения ПВТ-ОО.
;
; Этот исходный код является частью проекта ПВТ-ОО.
;
; Copyright © 2021 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять её и/или
; изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она может быть полезна,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <http://www.gnu.org/licenses/>.
;
; <fold write instance field>
if(used inst$setfieldi) ; <fold >
inst setfieldi ; (offset in ecx)
fverify TAG_INT
mov ecx, [rsp]
mov dword[rax+rdi*1], ecx
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldi2) ; <fold >
inst setfieldi2 ; (offset in ecx)
fverify TAG_INT2
vmovq xmm0, [rsp]
vmovq qword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldi4) ; <fold >
inst setfieldi4 ; (offset in ecx)
fverify TAG_INT4
vmovdqa xmm0, [rsp]
vmovdqa xword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldi8) ; <fold >
inst setfieldi8 ; (offset in ecx)
fverify TAG_INT8
vmovdqu ymm0, [rsp]
vmovdqu yword[rax+rdi*1], ymm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop3set
end_inst
end if ; </fold>
if(used inst$setfieldl) ; <fold >
inst setfieldl ; (offset in ecx)
fverify TAG_LONG
mov rcx, [rsp]
mov qword[rax+rdi*1], rcx
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldl2) ; <fold >
inst setfieldl2 ; (offset in ecx)
fverify TAG_LONG2
vmovdqa xmm0, [rsp]
vmovdqa xword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldl4) ; <fold >
inst setfieldl4 ; (offset in ecx)
fverify TAG_LONG4
vmovdqu ymm0, [rsp]
vmovdqu yword[rax+rdi*1], ymm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop3set
end_inst
end if ; </fold>
if(used inst$setfieldl8) ; <fold >
inst setfieldl8 ; (offset in ecx)
fverify TAG_LONG8
vmovdqu64 zmm0, [rsp]
vmovdqu64 zword[rax+rdi*1], zmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop5set
end_inst
end if ; </fold>
if(used inst$setfieldf) ; <fold >
inst setfieldf ; (offset in ecx)
fverify TAG_FLOAT
vmovd xmm0, [rsp]
vmovd dword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldf2) ; <fold >
inst setfieldf2 ; (offset in ecx)
fverify TAG_FLOAT2
vmovq xmm0, [rsp]
vmovq qword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldf4) ; <fold >
inst setfieldf4 ; (offset in ecx)
fverify TAG_FLOAT4
vmovdqa xmm0, [rsp]
vmovdqa xword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldf8) ; <fold >
inst setfieldf8 ; (offset in ecx)
fverify TAG_FLOAT8
vmovdqu ymm0, [rsp]
vmovdqu yword[rax+rdi*1], ymm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop3set
end_inst
end if ; </fold>
if(used inst$setfieldd) ; <fold >
inst setfieldd ; (offset in ecx)
fverify TAG_DOUBLE
vmovq xmm0, [rsp]
vmovq qword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldd2) ; <fold >
inst setfieldd2 ; (offset in ecx)
fverify TAG_DOUBLE2
vmovdqa xmm0, [rsp]
vmovdqa xword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldd4) ; <fold >
inst setfieldd4 ; (offset in ecx)
fverify TAG_DOUBLE4
vmovdqu ymm0, [rsp]
vmovdqu yword[rax+rdi*1], ymm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop3set
end_inst
end if ; </fold>
if(used inst$setfieldd8) ; <fold >
inst setfieldd8 ; (offset in ecx)
fverify TAG_DOUBLE8
vmovdqu64 zmm0, [rsp]
vmovdqu64 zword[rax+rdi*1], zmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop5set
end_inst
end if ; </fold>
if(used inst$setfieldb) ; <fold >
inst setfieldb ; (offset in ecx)
fverify TAG_INT
mov cl, [rsp]
mov byte[rax+rdi*1], cl
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldb2) ; <fold >
inst setfieldb2 ; (offset in ecx)
fverify TAG_BYTE2
mov cx, [rsp]
mov word[rax+rdi*1], cx
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldb4) ; <fold >
inst setfieldb4 ; (offset in ecx)
fverify TAG_BYTE4
vmovd xmm0, [rsp]
vmovd dword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldb8) ; <fold >
inst setfieldb8 ; (offset in ecx)
fverify TAG_BYTE8
vmovq xmm0, [rsp]
vmovq qword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfields | used inst$setfieldc) ; <fold >
inst setfields, setfieldc ; (offset in ecx)
fverify TAG_INT
mov cx, [rsp]
mov word[rax+rdi*1], cx
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfields2) ; <fold >
inst setfields2 ; (offset in ecx)
fverify TAG_SHORT2
vmovd xmm0, [rsp]
vmovd dword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfields4) ; <fold >
inst setfields4 ; (offset in ecx)
fverify TAG_SHORT4
vmovq xmm0, [rsp]
vmovq qword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfields8) ; <fold >
inst setfields8 ; (offset in ecx)
fverify TAG_SHORT8
vmovdqa xmm0, [rsp]
vmovdqa xword[rax+rdi*1], xmm0
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldx) ; <fold >
inst setfieldx ; (offset in ecx)
fverify TAG_REAL
fld tbyte[rsp]
fstp tbyte[rax+rdi*1]
lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
if(used inst$setfieldr) ; <fold >
inst setfieldr ; (offset in ecx)
fverify TAG_OBJECT
mov rcx, [rsp]
test rcx, rcx
jz @F
lock inc qword[rcx+avt.lang.Object$fldRefCountFromObjects]
lock dec qword[rcx+avt.lang.Object$fldRefCountFromOthers]
@@: xchg qword[rax+rdi*1], rcx
test rcx, rcx
jz @F
lock dec qword[rcx+avt.lang.Object$fldRefCountFromObjects]
@@: lock dec qword[rax+avt.lang.Object$fldRefCountFromOthers]
pop2set
end_inst
end if ; </fold>
; </fold>