write.struct-field.inc

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

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

; <fold запись полей структур>
    ; <fold приватные макросы — должны использоваться только этим текстом исходного кода>
        macro _fwrsf_l localvarName* {
                        _floadw_l   r01q, localvarName
                        __structp   r02q, r01q
        }

        macro _fwrsfe_l localvarName* {
                        _floadwe_l  r01q, localvarName
                        __structp   r02q, r01q
        }

        macro _fwrsf_g globalmember* {
                        _floadw_g   r01q, globalmember
                        __structp   r02q, r01q
        }

        macro _fwrsfe_g globalmember* {
                        _floadwe_g  r01q, globalmember
                        __structp   r02q, r01q
        }
    ; </fold>

    ; <fold объектная ссылка в локальной переменной>
        macro fwrsfc_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        mov         word  [r02+fieldFullName#.struct], wsc0
                        frelease_o  localvarName
        }

        macro fwrsfe_l fieldFullName*, localvarName* {
                        _fwrsfe_l   localvarName
                        fstp        tbyte [r02+fieldFullName#.struct]
                        frelease_o  localvarName
        }

        macro fwrsfd_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovq       qword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfd2_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     xword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfd4_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     yword [r02+fieldFullName#.struct], ymm0
                        frelease_o  localvarName
        }

        macro fwrsfd8_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu64   zword [r02+fieldFullName#.struct], zmm0
                        frelease_o  localvarName
        }

        macro fwrsff_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovd       dword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsff2_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovq       qword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsff4_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     xword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsff8_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     yword [r02+fieldFullName#.struct], ymm0
                        frelease_o  localvarName
        }

        macro fwrsfb_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        mov         byte  [r02+fieldFullName#.struct], bsc0
                        frelease_o  localvarName
        }

        macro fwrsfb2_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovd       dsc0, xmm0
                        mov         word  [r02+fieldFullName#.struct], wsc0
                        frelease_o  localvarName
        }

        macro fwrsfb4_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovd       dword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfb8_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovq       qword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfs_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        mov         word  [r02+fieldFullName#.struct], wsc0
                        frelease_o  localvarName
        }

        macro fwrsfs2_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovd       dword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfs4_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovq       qword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfs8_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     xword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfi_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        mov         dword [r02+fieldFullName#.struct], dsc0
                        frelease_o  localvarName
        }

        macro fwrsfi2_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovq       qword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfi4_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     xword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfi8_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     yword [r02+fieldFullName#.struct], ymm0
                        frelease_o  localvarName
        }

        macro fwrsfl_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        mov         qword [r02+fieldFullName#.struct], qsc0
                        frelease_o  localvarName
        }

        macro fwrsfl2_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     xword [r02+fieldFullName#.struct], xmm0
                        frelease_o  localvarName
        }

        macro fwrsfl4_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu     yword [r02+fieldFullName#.struct], ymm0
                        frelease_o  localvarName
        }

        macro fwrsfl8_l fieldFullName*, localvarName* {
                        _fwrsf_l    localvarName
                        vmovdqu64   zword [r02+fieldFullName#.struct], zmm0
                        frelease_o  localvarName
        }
    ; </fold>

    ; <fold объектная ссылка в глобальном члене>
        macro fwrsfc_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            mov         word  [r02+fieldFullName#.struct], wsc0
            end if
        }

        macro fwrsfe_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            releasee
                            fthrow      NullPointerException
            else
                            _fwrsfe_g   globalmember
                            fstp        tbyte [r02+fieldFullName#.struct]
            end if
        }

        macro fwrsfd_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovq       qword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfd2_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     xword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfd4_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     yword [r02+fieldFullName#.struct], ymm0
            end if
        }

        macro fwrsfd8_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu64   zword [r02+fieldFullName#.struct], zmm0
            end if
        }

        macro fwrsff_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovd       dword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsff2_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovq       qword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsff4_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     xword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsff8_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     yword [r02+fieldFullName#.struct], ymm0
            end if
        }

        macro fwrsfb_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            mov         byte  [r02+fieldFullName#.struct], bsc0
            end if
        }

        macro fwrsfb2_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovd       dsc0, xmm0
                            mov         word  [r02+fieldFullName#.struct], wsc0
            end if
        }

        macro fwrsfb4_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovd       dword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfb8_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovq       qword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfs_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            mov         word  [r02+fieldFullName#.struct], wsc0
            end if
        }

        macro fwrsfs2_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovd       dword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfs4_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovq       qword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfs8_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     xword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfi_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            mov         dword [r02+fieldFullName#.struct], dsc0
            end if
        }

        macro fwrsfi2_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovq       qword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfi4_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     xword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfi8_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     yword [r02+fieldFullName#.struct], ymm0
            end if
        }

        macro fwrsfl_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            mov         qword [r02+fieldFullName#.struct], qsc0
            end if
        }

        macro fwrsfl2_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     xword [r02+fieldFullName#.struct], xmm0
            end if
        }

        macro fwrsfl4_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu     yword [r02+fieldFullName#.struct], ymm0
            end if
        }

        macro fwrsfl8_g fieldFullName*, globalmember* {
            if(globalmember eq null)
                            fthrow      NullPointerException
            else
                            _fwrsf_g    globalmember
                            vmovdqu64   zword [r02+fieldFullName#.struct], zmm0
            end if
        }
    ; </fold>
; </fold>