cast.int.inc

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

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

; <fold приведение значения типа int* к другим типам>
    ; <fold int>
        macro castitoc {
                        movzx       dsc0, wsc0
        }

        macro castitoe {
                        mov         dword [rbx+ctxt$tm2], dsc0
                        fild        dword [rbx+ctxt$tm2]
        }

        macro castitod {
                        vmovd       xmm0, dsc0
                        vcvtsi2sd   xmm0, xmm0, dsc0
        }

        macro castitof {
                        vmovd       xmm0, dsc0
                        vcvtsi2ss   xmm0, xmm0, dsc0
        }

        macro castitob {
                        movsx       dsc0, bsc0
        }

        macro castitos {
                        movsx       dsc0, wsc0
        }

        macro castitol {
                        movsxd      qsc0, dsc0
        }

        macro castitob2 {
                        movzx       dsc0, bsc0
                        vmovd       xmm0, dsc0
        }

        macro castitob4 {
                        movzx       dsc0, bsc0
                        vmovd       xmm0, dsc0
        }

        macro castitob8 {
                        movzx       dsc0, bsc0
                        vmovd       xmm0, dsc0
        }

        macro castitos2 {
                        movzx       dsc0, wsc0
                        vmovd       xmm0, dsc0
        }

        macro castitos4 {
                        movzx       dsc0, wsc0
                        vmovd       xmm0, dsc0
        }

        macro castitos8 {
                        movzx       dsc0, wsc0
                        vmovd       xmm0, dsc0
        }

        macro castitoi2 {
                        vmovd       xmm0, dsc0
        }

        macro castitoi4 {
                        vmovd       xmm0, dsc0
        }

        macro castitoi8 {
                        vmovd       xmm0, dsc0
        }
    ; </fold>

    ; <fold int2>
        macro casti2tod2 {
                        vcvtdq2pd   xmm0, xmm0
        }

        macro casti2tof2 {
                        vcvtdq2ps   xmm0, xmm0
        }

        macro casti2tob2 {
                        vpand       xmm0, xmm0, [cons$int8.maskb]
                        vpackusdw   xmm0, xmm0, [cons$zero]
                        vpackuswb   xmm0, xmm0, [cons$zero]
        }

        macro casti2tos2 {
                        vpand       xmm0, xmm0, [cons$int8.maskw]
                        vpackusdw   xmm0, xmm0, [cons$zero]
        }

        macro casti2tol2 {
                        vpmovsxdq   xmm0, xmm0
        }

        macro casti2toi {
                        vmovd       dsc0, xmm0
        }

        macro casti2toi4 {  }

        macro casti2toi8 {  }
    ; </fold>

    ; <fold int4>
        macro casti4tod4 {
                        vcvtdq2pd   ymm0, xmm0
        }

        macro casti4tof4 {
                        vcvtdq2ps   xmm0, xmm0
        }

        macro casti4tob4 {
                        vpand       xmm0, xmm0, [cons$int8.maskb]
                        vpackusdw   xmm0, xmm0, [cons$zero]
                        vpackuswb   xmm0, xmm0, [cons$zero]
        }

        macro casti4tos4 {
                        vpand       xmm0, xmm0, [cons$int8.maskw]
                        vpackusdw   xmm0, xmm0, [cons$zero]
        }

        macro casti4tol4 {
                        vpmovsxdq   ymm0, xmm0
        }

        macro casti4toi {
                        vmovd       dsc0, xmm0
        }

        macro casti4toi2 {
                        vpand       xmm0, xmm0, [cons$int8.m1_0]
        }

        macro casti4toi8 {  }
    ; </fold>

    ; <fold int8>
        macro casti8tod8 {
                        vcvtdq2pd   zmm0, ymm0
        }

        macro casti8tof8 {
                        vcvtdq2ps   ymm0, ymm0
        }

        macro casti8tob8 {
                        vpand       ymm0, ymm0, [cons$int8.maskb]
                        vextracti128 xmm1, ymm0, $01
                        vpackusdw   xmm0, xmm0, xmm1
                        vpackuswb   xmm0, xmm0, [cons$zero]
        }

        macro casti8tos8 {
                        vpand       ymm0, ymm0, [cons$int8.maskw]
                        vextracti128 xmm1, ymm0, $01
                        vpackusdw   xmm0, xmm0, xmm1
        }

        macro casti8tol8 {
                        vpmovsxdq   zmm0, ymm0
        }

        macro casti8toi {
                        vmovd       dsc0, xmm0
        }

        macro casti8toi2 {
                        vpand       xmm0, xmm0, [cons$int8.m1_0]
        }

        macro casti8toi4 {
                        vmovdqa     xmm0, xmm0
        }
    ; </fold>
; </fold>