cast.float.inc

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

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

; <fold приведение значения типа float* к другим типам>
    ; <fold float>
        macro castftoe {
                        vmovd       dword [rbx+ctxt$tm2], xmm0
                        fld         dword [rbx+ctxt$tm2]
        }

        macro castftod {
                        vcvtss2sd   xmm0, xmm0, xmm0
        }

        macro castftob {
                        castftoi
                        castitob
        }

        macro castftos {
                        castftoi
                        castitos
        }

        macro castftoi {
                        call        inst$castftoi
        }

        macro castftol {
                        call        inst$castftol
        }

        macro castftof2 {  }

        macro castftof4 {  }

        macro castftof8 {  }
    ; </fold>

    ; <fold float2>
        macro castf2tod2 {
                        vcvtps2pd   xmm0, xmm0
        }

        macro castf2tob2 {
                        castf2toi2
                        casti2tob2
        }

        macro castf2tos2 {
                        castf2toi2
                        casti2tos2
        }

        macro castf2toi2 {
                        call        inst$castf2toi2
        }

        macro castf2tol2 {
                        call        inst$castf2tol2
        }

        macro castf2tof {
                        vpand       xmm0, xmm0, [cons$int4.m1_0]
        }

        macro castf2tof4 {  }

        macro castf2tof8 {  }
    ; </fold>

    ; <fold float4>
        macro castf4tod4 {
                        vcvtps2pd   ymm0, xmm0
        }

        macro castf4tob4 {
                        castf4toi4
                        casti4tob4
        }

        macro castf4tos4 {
                        castf4toi4
                        casti4tos4
        }

        macro castf4toi4 {
                        call        inst$castf4toi4
        }

        macro castf4tol4 {
                        call        inst$castf4tol4
        }

        macro castf4tof {
                        vpand       xmm0, xmm0, [cons$int4.m1_0]
        }

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

        macro castf4tof8 {  }
    ; </fold>

    ; <fold float8>
        macro castf8tod8 {
                        vcvtps2pd   zmm0, ymm0
        }

        macro castf8tob8 {
                        castf8toi8
                        casti8tob8
        }

        macro castf8tos8 {
                        castf8toi8
                        casti8tos8
        }

        macro castf8toi8 {
                        call        inst$castf8toi8
        }

        macro castf8tol8 {
                        call        inst$castf8tol8
        }

        macro castf8tof {
                        vpand       xmm0, xmm0, [cons$int4.m1_0]
        }

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

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