Float2.inc

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

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

; <fold avt.lang.Float2 — родной код>
    if(used avt.lang.Float2$toInt2Bits$float2$) ; <fold returns int2>
                    fast        avt.lang.Float2$toInt2Bits$float2$, \
                                value, float2
                    fenter
                    vmovdqa     xmm0, [.value]
                    fleave
    end if ; </fold>

    if(used avt.lang.Float2$max$float2$float2$) ; <fold returns float2>
                    fast        avt.lang.Float2$max$float2$float2$, \
                                value0, float2, \
                                value1, float2
                    fenter
                    vmovdqa     xmm0, [.value0]
                    vmovdqa     xmm1, [.value1]
                    vmovdqa     xmm6, [avt.lang.Float8$MASK_NOT_A_NUMBER]
                    vmovdqa     xmm7, [avt.lang.Float8$MASK_NEGATIVE_ZERO]
                    vpand       xmm2, xmm0, xmm6
                    vpand       xmm3, xmm1, xmm6
                    vpor        xmm4, xmm0, xmm1
                    vpor        xmm4, xmm4, xmm7
                    vpcmpeqd    msk1, xmm4, xmm7
                    vpcmpeqd    msk2, xmm3, xmm6
                    vpcmpeqd    msk3, xmm2, xmm6
                    korw        msk2, msk2, msk3
                    korw        msk3, msk1, msk2
                    knotw       msk3, msk3
                    vpandd      xmm2{k1}{z}, xmm0, xmm1
                    vpord       xmm3{k2}{z}, xmm6, xmm7
                    vmaxps      xmm5{k3}{z}, xmm0, xmm1
                    vpor        xmm0, xmm2, xmm3
                    vpor        xmm0, xmm0, xmm5
                    fleave
    end if ; </fold>

    if(used avt.lang.Float2$min$float2$float2$) ; <fold returns float2>
                    fast        avt.lang.Float2$min$float2$float2$, \
                                value0, float2, \
                                value1, float2
                    fenter
                    vmovdqa     xmm0, [.value0]
                    vmovdqa     xmm1, [.value1]
                    vmovdqa     xmm6, [avt.lang.Float8$MASK_NOT_A_NUMBER]
                    vmovdqa     xmm7, [avt.lang.Float8$MASK_NEGATIVE_ZERO]
                    vpand       xmm2, xmm0, xmm6
                    vpand       xmm3, xmm1, xmm6
                    vpor        xmm4, xmm0, xmm1
                    vpor        xmm4, xmm4, xmm7
                    vpcmpeqd    msk1, xmm4, xmm7
                    vpcmpeqd    msk2, xmm3, xmm6
                    vpcmpeqd    msk3, xmm2, xmm6
                    korw        msk2, msk2, msk3
                    korw        msk3, msk1, msk2
                    knotw       msk3, msk3
                    vpord       xmm2{k1}{z}, xmm0, xmm1
                    vpord       xmm3{k2}{z}, xmm6, xmm7
                    vminps      xmm5{k3}{z}, xmm0, xmm1
                    vpor        xmm0, xmm2, xmm3
                    vpor        xmm0, xmm0, xmm5
                    fleave
    end if ; </fold>

    if(used avt.lang.Float2$setElement$float2$int$float$) ; <fold returns float2>
                    fast        avt.lang.Float2$setElement$float2$int$float$, \
                                value, float2, \
                                index, int, \
                                element, float
                    fenter
                    mov         r01d, [.index]
                    cmp         r01d, $02
                    jb          @F
                    fthrow      VectorIndexOutOfBoundsException
             @@:    mov         r00d, [.element]
                    mov         dword [.value+r01*4+$00], r00d
                    vmovdqa     xmm0, [.value]
                    fleave
    end if ; </fold>
; </fold>