read.array-component.inc

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

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

; <fold чтение компонентов массивов>
    ; <fold приватные макросы — должны использоваться только этим текстом исходного кода>
        macro _rdac type* {
                        _rdac_p
                        __pop       $01
                        call        inst$rdac#type
        }

        macro _rdac_p {
                        mov         r02d, r00d
                        mov         r08q, [rsp+$00]
                        __cltag_x   $00
        }

        macro _rdac_l localvarName*, type* {
                        mov         r02d, [.#localvarName]
                        lea         r08q, [r00+$00]
                        call        inst$rdac#type
        }

        macro _rdac_g globalmember*, type* {
                        mov         r02d, globalmember
                        lea         r08q, [r00+$00]
                        call        inst$rdac#type
        }
    ; </fold>

    ; <fold объектная ссылка на стаке, индекс на аккумуляторе, результат на аккумуляторе>
        macro rdacr {
                        _rdac       r
        }

        macro rdacc {
                        _rdac       c
        }

        macro rdace {
                        _rdac       e
        }

        macro rdacd {
                        _rdac       d
        }

        macro rdacd2 {
                        _rdac       d2
        }

        macro rdacd4 {
                        _rdac       d4
        }

        macro rdacd8 {
                        _rdac       d8
        }

        macro rdacf {
                        _rdac       f
        }

        macro rdacf2 {
                        _rdac       f2
        }

        macro rdacf4 {
                        _rdac       f4
        }

        macro rdacf8 {
                        _rdac       f8
        }

        macro rdacb {
                        _rdac       b
        }

        macro rdacb2 {
                        _rdac       b2
        }

        macro rdacb4 {
                        _rdac       b4
        }

        macro rdacb8 {
                        _rdac       b8
        }

        macro rdacs {
                        _rdac       s
        }

        macro rdacs2 {
                        _rdac       s2
        }

        macro rdacs4 {
                        _rdac       s4
        }

        macro rdacs8 {
                        _rdac       s8
        }

        macro rdaci {
                        _rdac       i
        }

        macro rdaci2 {
                        _rdac       i2
        }

        macro rdaci4 {
                        _rdac       i4
        }

        macro rdaci8 {
                        _rdac       i8
        }

        macro rdacl {
                        _rdac       l
        }

        macro rdacl2 {
                        _rdac       l2
        }

        macro rdacl4 {
                        _rdac       l4
        }

        macro rdacl8 {
                        _rdac       l8
        }
    ; </fold>

    ; <fold объектная ссылка на стаке, индекс на аккумуляторе, результат на стаке>
        macro rdacr_p {
                        _rdac_p
                        call        inst$rdacr
                        mov         qword [rsp+$00], qsc0
                        __sttag_x   $00,  TAG_OBJECT
        }

        macro rdacc_p {
                        _rdac_p
                        call        inst$rdacc
                        mov         qword [rsp+$00], qsc0
        }

        macro rdace_p {
                        _rdac_p
                        call        inst$rdace
                        fstp        tbyte [rsp+$00]
        }

        macro rdacd_p {
                        _rdac_p
                        call        inst$rdacd
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacd2_p {
                        _rdac_p
                        call        inst$rdacd2
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacd4_p {
                        _rdac_p
                        call        inst$rdacd4
                        __push      $01
                        vmovdqu     yword [rsp+$00], ymm0
                        __sttag_y   $00,  TAG_DOUBLE4
        }

        macro rdacd8_p {
                        _rdac_p
                        call        inst$rdacd8
                        __push      $03
                        vmovdqu64   zword [rsp+$00], zmm0
                        __sttag_z   $00,  TAG_DOUBLE8
        }

        macro rdacf_p {
                        _rdac_p
                        call        inst$rdacf
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacf2_p {
                        _rdac_p
                        call        inst$rdacf2
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacf4_p {
                        _rdac_p
                        call        inst$rdacf4
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacf8_p {
                        _rdac_p
                        call        inst$rdacf8
                        __push      $01
                        vmovdqu     yword [rsp+$00], ymm0
                        __sttag_y   $00,  TAG_FLOAT8
        }

        macro rdacb_p {
                        _rdac_p
                        call        inst$rdacb
                        mov         qword [rsp+$00], qsc0
        }

        macro rdacb2_p {
                        _rdac_p
                        call        inst$rdacb2
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacb4_p {
                        _rdac_p
                        call        inst$rdacb4
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacb8_p {
                        _rdac_p
                        call        inst$rdacb8
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacs_p {
                        _rdac_p
                        call        inst$rdacs
                        mov         qword [rsp+$00], qsc0
        }

        macro rdacs2_p {
                        _rdac_p
                        call        inst$rdacs2
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacs4_p {
                        _rdac_p
                        call        inst$rdacs4
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacs8_p {
                        _rdac_p
                        call        inst$rdacs8
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdaci_p {
                        _rdac_p
                        call        inst$rdaci
                        mov         qword [rsp+$00], qsc0
        }

        macro rdaci2_p {
                        _rdac_p
                        call        inst$rdaci2
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdaci4_p {
                        _rdac_p
                        call        inst$rdaci4
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdaci8_p {
                        _rdac_p
                        call        inst$rdaci8
                        __push      $01
                        vmovdqu     yword [rsp+$00], ymm0
                        __sttag_y   $00,  TAG_INT8
        }

        macro rdacl_p {
                        _rdac_p
                        call        inst$rdacl
                        mov         qword [rsp+$00], qsc0
        }

        macro rdacl2_p {
                        _rdac_p
                        call        inst$rdacl2
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro rdacl4_p {
                        _rdac_p
                        call        inst$rdacl4
                        __push      $01
                        vmovdqu     yword [rsp+$00], ymm0
                        __sttag_y   $00,  TAG_LONG4
        }

        macro rdacl8_p {
                        _rdac_p
                        call        inst$rdacl8
                        __push      $03
                        vmovdqu64   zword [rsp+$00], zmm0
                        __sttag_z   $00,  TAG_LONG8
        }
    ; </fold>

    ; <fold объектная ссылка на аккумуляторе, индекс в локальной переменной, результат на аккумуляторе>
        macro rdacr_l localvarName* {
                        _rdac_l     localvarName, r
        }

        macro rdacc_l localvarName* {
                        _rdac_l     localvarName, c
        }

        macro rdace_l localvarName* {
                        _rdac_l     localvarName, e
        }

        macro rdacd_l localvarName* {
                        _rdac_l     localvarName, d
        }

        macro rdacd2_l localvarName* {
                        _rdac_l     localvarName, d2
        }

        macro rdacd4_l localvarName* {
                        _rdac_l     localvarName, d4
        }

        macro rdacd8_l localvarName* {
                        _rdac_l     localvarName, d8
        }

        macro rdacf_l localvarName* {
                        _rdac_l     localvarName, f
        }

        macro rdacf2_l localvarName* {
                        _rdac_l     localvarName, f2
        }

        macro rdacf4_l localvarName* {
                        _rdac_l     localvarName, f4
        }

        macro rdacf8_l localvarName* {
                        _rdac_l     localvarName, f8
        }

        macro rdacb_l localvarName* {
                        _rdac_l     localvarName, b
        }

        macro rdacb2_l localvarName* {
                        _rdac_l     localvarName, b2
        }

        macro rdacb4_l localvarName* {
                        _rdac_l     localvarName, b4
        }

        macro rdacb8_l localvarName* {
                        _rdac_l     localvarName, b8
        }

        macro rdacs_l localvarName* {
                        _rdac_l     localvarName, s
        }

        macro rdacs2_l localvarName* {
                        _rdac_l     localvarName, s2
        }

        macro rdacs4_l localvarName* {
                        _rdac_l     localvarName, s4
        }

        macro rdacs8_l localvarName* {
                        _rdac_l     localvarName, s8
        }

        macro rdaci_l localvarName* {
                        _rdac_l     localvarName, i
        }

        macro rdaci2_l localvarName* {
                        _rdac_l     localvarName, i2
        }

        macro rdaci4_l localvarName* {
                        _rdac_l     localvarName, i4
        }

        macro rdaci8_l localvarName* {
                        _rdac_l     localvarName, i8
        }

        macro rdacl_l localvarName* {
                        _rdac_l     localvarName, l
        }

        macro rdacl2_l localvarName* {
                        _rdac_l     localvarName, l2
        }

        macro rdacl4_l localvarName* {
                        _rdac_l     localvarName, l4
        }

        macro rdacl8_l localvarName* {
                        _rdac_l     localvarName, l8
        }
    ; </fold>

    ; <fold объектная ссылка на аккумуляторе, индекс в глобальном члене, результат на аккумуляторе>
        macro rdacr_g globalmember* {
                        _rdac_g     globalmember, r
        }

        macro rdacc_g globalmember* {
                        _rdac_g     globalmember, c
        }

        macro rdace_g globalmember* {
                        _rdac_g     globalmember, e
        }

        macro rdacd_g globalmember* {
                        _rdac_g     globalmember, d
        }

        macro rdacd2_g globalmember* {
                        _rdac_g     globalmember, d2
        }

        macro rdacd4_g globalmember* {
                        _rdac_g     globalmember, d4
        }

        macro rdacd8_g globalmember* {
                        _rdac_g     globalmember, d8
        }

        macro rdacf_g globalmember* {
                        _rdac_g     globalmember, f
        }

        macro rdacf2_g globalmember* {
                        _rdac_g     globalmember, f2
        }

        macro rdacf4_g globalmember* {
                        _rdac_g     globalmember, f4
        }

        macro rdacf8_g globalmember* {
                        _rdac_g     globalmember, f8
        }

        macro rdacb_g globalmember* {
                        _rdac_g     globalmember, b
        }

        macro rdacb2_g globalmember* {
                        _rdac_g     globalmember, b2
        }

        macro rdacb4_g globalmember* {
                        _rdac_g     globalmember, b4
        }

        macro rdacb8_g globalmember* {
                        _rdac_g     globalmember, b8
        }

        macro rdacs_g globalmember* {
                        _rdac_g     globalmember, s
        }

        macro rdacs2_g globalmember* {
                        _rdac_g     globalmember, s2
        }

        macro rdacs4_g globalmember* {
                        _rdac_g     globalmember, s4
        }

        macro rdacs8_g globalmember* {
                        _rdac_g     globalmember, s8
        }

        macro rdaci_g globalmember* {
                        _rdac_g     globalmember, i
        }

        macro rdaci2_g globalmember* {
                        _rdac_g     globalmember, i2
        }

        macro rdaci4_g globalmember* {
                        _rdac_g     globalmember, i4
        }

        macro rdaci8_g globalmember* {
                        _rdac_g     globalmember, i8
        }

        macro rdacl_g globalmember* {
                        _rdac_g     globalmember, l
        }

        macro rdacl2_g globalmember* {
                        _rdac_g     globalmember, l2
        }

        macro rdacl4_g globalmember* {
                        _rdac_g     globalmember, l4
        }

        macro rdacl8_g globalmember* {
                        _rdac_g     globalmember, l8
        }
    ; </fold>
; </fold>