instruction.setstructfield.inc

Переключить прокрутку окна
Загрузить этот исходный код

;
 ;  Исходный код среды исполнения ПВТ-ОО.
 ;
 ;  Этот исходный код является частью проекта ПВТ-ОО.
 ;
 ;  Copyright © 2021 Малик Разработчик
 ;
 ;  Это свободная программа: вы можете перераспространять её и/или
 ;  изменять её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
 ;  в каком она была опубликована Фондом свободного программного обеспечения;
 ;  либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
 ;
 ;  Эта программа распространяется в надежде, что она может быть полезна,
 ;  но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
 ;  или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
 ;  общественной лицензии GNU.
 ;
 ;  Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
 ;  вместе с этой программой. Если это не так, см.
 ;  <http://www.gnu.org/licenses/>.
;

; <fold write structure field>
    if(used inst$setstructfieldi) ; <fold >
        inst setstructfieldi ; (offset in ecx)
                    sverify TAG_INT
                    mov     ecx, [rsp]
                    mov     dword[rax+rdi*1], ecx
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldi2) ; <fold >
        inst setstructfieldi2 ; (offset in ecx)
                    sverify TAG_INT2
                    vmovq   xmm0, [rsp]
                    vmovq   qword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldi4) ; <fold >
        inst setstructfieldi4 ; (offset in ecx)
                    sverify TAG_INT4
                    vmovdqa xmm0, [rsp]
                    vmovdqu xword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldi8) ; <fold >
        inst setstructfieldi8 ; (offset in ecx)
                    sverify TAG_INT8
                    vmovdqu ymm0, [rsp]
                    vmovdqu yword[rax+rdi*1], ymm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop3set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldl) ; <fold >
        inst setstructfieldl ; (offset in ecx)
                    sverify TAG_LONG
                    mov     rcx, [rsp]
                    mov     qword[rax+rdi*1], rcx
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldl2) ; <fold >
        inst setstructfieldl2 ; (offset in ecx)
                    sverify TAG_LONG2
                    vmovdqa xmm0, [rsp]
                    vmovdqu xword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldl4) ; <fold >
        inst setstructfieldl4 ; (offset in ecx)
                    sverify TAG_LONG4
                    vmovdqu ymm0, [rsp]
                    vmovdqu yword[rax+rdi*1], ymm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop3set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldl8) ; <fold >
        inst setstructfieldl8 ; (offset in ecx)
                    sverify TAG_LONG8
                    vmovdqu64 zmm0, [rsp]
                    vmovdqu64 zword[rax+rdi*1], zmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop5set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldf) ; <fold >
        inst setstructfieldf ; (offset in ecx)
                    sverify TAG_FLOAT
                    vmovd   xmm0, [rsp]
                    vmovd   dword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldf2) ; <fold >
        inst setstructfieldf2 ; (offset in ecx)
                    sverify TAG_FLOAT2
                    vmovq   xmm0, [rsp]
                    vmovq   qword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldf4) ; <fold >
        inst setstructfieldf4 ; (offset in ecx)
                    sverify TAG_FLOAT4
                    vmovdqa xmm0, [rsp]
                    vmovdqu xword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldf8) ; <fold >
        inst setstructfieldf8 ; (offset in ecx)
                    sverify TAG_FLOAT8
                    vmovdqu ymm0, [rsp]
                    vmovdqu yword[rax+rdi*1], ymm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop3set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldd) ; <fold >
        inst setstructfieldd ; (offset in ecx)
                    sverify TAG_DOUBLE
                    vmovq   xmm0, [rsp]
                    vmovq   qword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldd2) ; <fold >
        inst setstructfieldd2 ; (offset in ecx)
                    sverify TAG_DOUBLE2
                    vmovdqa xmm0, [rsp]
                    vmovdqu xword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldd4) ; <fold >
        inst setstructfieldd4 ; (offset in ecx)
                    sverify TAG_DOUBLE4
                    vmovdqu ymm0, [rsp]
                    vmovdqu yword[rax+rdi*1], ymm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop3set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldd8) ; <fold >
        inst setstructfieldd8 ; (offset in ecx)
                    sverify TAG_DOUBLE8
                    vmovdqu64 zmm0, [rsp]
                    vmovdqu64 zword[rax+rdi*1], zmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop5set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldb) ; <fold >
        inst setstructfieldb ; (offset in ecx)
                    sverify TAG_INT
                    mov     cl, [rsp]
                    mov     byte[rax+rdi*1], cl
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldb2) ; <fold >
        inst setstructfieldb2 ; (offset in ecx)
                    sverify TAG_BYTE2
                    mov     cx, [rsp]
                    mov     word[rax+rdi*1], cx
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldb4) ; <fold >
        inst setstructfieldb4 ; (offset in ecx)
                    sverify TAG_BYTE4
                    vmovd   xmm0, [rsp]
                    vmovd   dword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldb8) ; <fold >
        inst setstructfieldb8 ; (offset in ecx)
                    sverify TAG_BYTE8
                    vmovq   xmm0, [rsp]
                    vmovq   qword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfields | used inst$setstructfieldc) ; <fold >
        inst setstructfields, setstructfieldc ; (offset in ecx)
                    sverify TAG_INT
                    mov     cx, [rsp]
                    mov     word[rax+rdi*1], cx
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfields2) ; <fold >
        inst setstructfields2 ; (offset in ecx)
                    sverify TAG_SHORT2
                    vmovd   xmm0, [rsp]
                    vmovd   dword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfields4) ; <fold >
        inst setstructfields4 ; (offset in ecx)
                    sverify TAG_SHORT4
                    vmovq   xmm0, [rsp]
                    vmovq   qword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfields8) ; <fold >
        inst setstructfields8 ; (offset in ecx)
                    sverify TAG_SHORT8
                    vmovdqa xmm0, [rsp]
                    vmovdqu xword[rax+rdi*1], xmm0
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>

    if(used inst$setstructfieldx) ; <fold >
        inst setstructfieldx ; (offset in ecx)
                    sverify TAG_REAL
                    fld     tbyte[rsp]
                    fstp    tbyte[rax+rdi*1]
                    lock dec qword[rdx+avt.lang.Object$fldRefCountFromOthers]
                    pop2set
        end_inst
    end if ; </fold>
; </fold>