vector.sub.inc

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

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

; <fold векторное вычитание>
    ; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — на аккумуляторе>
        macro vsubd {
                        ssubd
        }

        macro vsubd2 {
                        ssubd2
        }

        macro vsubd4 {
                        ssubd4
        }

        macro vsubd8 {
                        ssubd8
        }

        macro vsubf {
                        ssubf
        }

        macro vsubf2 {
                        ssubf2
        }

        macro vsubf4 {
                        ssubf4
        }

        macro vsubf8 {
                        ssubf8
        }

        macro vsubb {
                        mov         dsc1, [rsp+$00]
                        sub         dsc1, dsc0
                        movsx       dsc0, bsc1
                        __pop       $01
        }

        macro vsubb2 {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubb      xmm0, xmm1, xmm0
                        __pop       $01
        }

        macro vsubb4 {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubb      xmm0, xmm1, xmm0
                        __pop       $01
        }

        macro vsubb8 {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubb      xmm0, xmm1, xmm0
                        __pop       $01
        }

        macro vsubs {
                        mov         dsc1, [rsp+$00]
                        sub         dsc1, dsc0
                        movsx       dsc0, wsc1
                        __pop       $01
        }

        macro vsubs2 {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubw      xmm0, xmm1, xmm0
                        __pop       $01
        }

        macro vsubs4 {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubw      xmm0, xmm1, xmm0
                        __pop       $01
        }

        macro vsubs8 {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubw      xmm0, xmm1, xmm0
                        __pop       $01
        }

        macro vsubi {
                        ssubi
        }

        macro vsubi2 {
                        ssubi2
        }

        macro vsubi4 {
                        ssubi4
        }

        macro vsubi8 {
                        ssubi8
        }

        macro vsubl {
                        ssubl
        }

        macro vsubl2 {
                        ssubl2
        }

        macro vsubl4 {
                        ssubl4
        }

        macro vsubl8 {
                        ssubl8
        }
    ; </fold>

    ; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — на стаке>
        macro vsubd_p {
                        ssubd_p
        }

        macro vsubd2_p {
                        ssubd2_p
        }

        macro vsubd4_p {
                        ssubd4_p
        }

        macro vsubd8_p {
                        ssubd8_p
        }

        macro vsubf_p {
                        ssubf_p
        }

        macro vsubf2_p {
                        ssubf2_p
        }

        macro vsubf4_p {
                        ssubf4_p
        }

        macro vsubf8_p {
                        ssubf8_p
        }

        macro vsubb_p {
                        mov         dsc1, [rsp+$00]
                        sub         dsc1, dsc0
                        movsx       dsc0, bsc1
                        mov         dword [rsp+$00], dsc0
        }

        macro vsubb2_p {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubb      xmm0, xmm1, xmm0
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro vsubb4_p {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubb      xmm0, xmm1, xmm0
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro vsubb8_p {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubb      xmm0, xmm1, xmm0
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro vsubs_p {
                        mov         dsc1, [rsp+$00]
                        sub         dsc1, dsc0
                        movsx       dsc0, wsc1
                        mov         dword [rsp+$00], dsc0
        }

        macro vsubs2_p {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubw      xmm0, xmm1, xmm0
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro vsubs4_p {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubw      xmm0, xmm1, xmm0
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro vsubs8_p {
                        vmovdqa     xmm1, [rsp+$00]
                        vpsubw      xmm0, xmm1, xmm0
                        vmovdqa     xword [rsp+$00], xmm0
        }

        macro vsubi_p {
                        ssubi_p
        }

        macro vsubi2_p {
                        ssubi2_p
        }

        macro vsubi4_p {
                        ssubi4_p
        }

        macro vsubi8_p {
                        ssubi8_p
        }

        macro vsubl_p {
                        ssubl_p
        }

        macro vsubl2_p {
                        ssubl2_p
        }

        macro vsubl4_p {
                        ssubl4_p
        }

        macro vsubl8_p {
                        ssubl8_p
        }
    ; </fold>

    ; <fold первый операнд — на аккумуляторе, второй операнд — локальная переменная, результат — на аккумуляторе>
        macro vsubd_l localvarName* {
                        ssubd_l     localvarName
        }

        macro vsubd2_l localvarName* {
                        ssubd2_l    localvarName
        }

        macro vsubd4_l localvarName* {
                        ssubd4_l    localvarName
        }

        macro vsubd8_l localvarName* {
                        ssubd8_l    localvarName
        }

        macro vsubf_l localvarName* {
                        ssubf_l     localvarName
        }

        macro vsubf2_l localvarName* {
                        ssubf2_l    localvarName
        }

        macro vsubf4_l localvarName* {
                        ssubf4_l    localvarName
        }

        macro vsubf8_l localvarName* {
                        ssubf8_l    localvarName
        }

        macro vsubb_l localvarName* {
                        ssubi_l     localvarName
                        movsx       dsc0, bsc0
        }

        macro vsubb2_l localvarName* {
                        vpsubb      xmm0, xmm0, [.#localvarName]
        }

        macro vsubb4_l localvarName* {
                        vpsubb      xmm0, xmm0, [.#localvarName]
        }

        macro vsubb8_l localvarName* {
                        vpsubb      xmm0, xmm0, [.#localvarName]
        }

        macro vsubs_l localvarName* {
                        ssubi_l     localvarName
                        movsx       dsc0, wsc0
        }

        macro vsubs2_l localvarName* {
                        vpsubw      xmm0, xmm0, [.#localvarName]
        }

        macro vsubs4_l localvarName* {
                        vpsubw      xmm0, xmm0, [.#localvarName]
        }

        macro vsubs8_l localvarName* {
                        vpsubw      xmm0, xmm0, [.#localvarName]
        }

        macro vsubi_l localvarName* {
                        ssubi_l     localvarName
        }

        macro vsubi2_l localvarName* {
                        ssubi2_l    localvarName
        }

        macro vsubi4_l localvarName* {
                        ssubi4_l    localvarName
        }

        macro vsubi8_l localvarName* {
                        ssubi8_l    localvarName
        }

        macro vsubl_l localvarName* {
                        ssubl_l     localvarName
        }

        macro vsubl2_l localvarName* {
                        ssubl2_l    localvarName
        }

        macro vsubl4_l localvarName* {
                        ssubl4_l    localvarName
        }

        macro vsubl8_l localvarName* {
                        ssubl8_l    localvarName
        }
    ; </fold>

    ; <fold первый операнд — на аккумуляторе, второй операнд — глобальный член, результат — на аккумуляторе>
        macro vsubd_g globalmember* {
                        ssubd_g     globalmember
        }

        macro vsubd2_g globalmember* {
                        ssubd2_g    globalmember
        }

        macro vsubd4_g globalmember* {
                        ssubd4_g    globalmember
        }

        macro vsubd8_g globalmember* {
                        ssubd8_g    globalmember
        }

        macro vsubf_g globalmember* {
                        ssubf_g     globalmember
        }

        macro vsubf2_g globalmember* {
                        ssubf2_g    globalmember
        }

        macro vsubf4_g globalmember* {
                        ssubf4_g    globalmember
        }

        macro vsubf8_g globalmember* {
                        ssubf8_g    globalmember
        }

        macro vsubb_g globalmember* {
                        ssubi_g     globalmember
                        movsx       dsc0, bsc0
        }

        macro vsubb2_g globalmember* {
                        vpsubb      xmm0, xmm0, globalmember
        }

        macro vsubb4_g globalmember* {
                        vpsubb      xmm0, xmm0, globalmember
        }

        macro vsubb8_g globalmember* {
                        vpsubb      xmm0, xmm0, globalmember
        }

        macro vsubs_g globalmember* {
                        ssubi_g     globalmember
                        movsx       dsc0, wsc0
        }

        macro vsubs2_g globalmember* {
                        vpsubw      xmm0, xmm0, globalmember
        }

        macro vsubs4_g globalmember* {
                        vpsubw      xmm0, xmm0, globalmember
        }

        macro vsubs8_g globalmember* {
                        vpsubw      xmm0, xmm0, globalmember
        }

        macro vsubi_g globalmember* {
                        ssubi_g     globalmember
        }

        macro vsubi2_g globalmember* {
                        ssubi2_g    globalmember
        }

        macro vsubi4_g globalmember* {
                        ssubi4_g    globalmember
        }

        macro vsubi8_g globalmember* {
                        ssubi8_g    globalmember
        }

        macro vsubl_g globalmember* {
                        ssubl_g     globalmember
        }

        macro vsubl2_g globalmember* {
                        ssubl2_g    globalmember
        }

        macro vsubl4_g globalmember* {
                        ssubl4_g    globalmember
        }

        macro vsubl8_g globalmember* {
                        ssubl8_g    globalmember
        }
    ; </fold>
; </fold>