Long.inc

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

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

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

    if(used avt.lang.Long$toShort4Bits$long$) ; <fold returns short4>
                    fast        avt.lang.Long$toShort4Bits$long$, \
                                value, long
                    fenter
                    vmovdqa     xmm0, [.value]
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$signum$long$) ; <fold returns int>
                    fast        avt.lang.Long$signum$long$, \
                                value, long
                    fenter
                    mov         r00q, [.value]
                    cmp         r00q, $00
                    jle         @F
                    mov         r00d, $01
                    freturn
             @@:    sar         r00q, $1f
                    shr         r00q, $20
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$compare$long$long$) ; <fold returns int>
                    fast        avt.lang.Long$compare$long$long$, \
                                value0, long, \
                                value1, long
                    fenter
                    mov         r00q, [.value0]
                    cmp         r00q, [.value1]
                    je          .L.0000
                    jg          .L.0001
                    mov         r00d, $ffffffff
                    freturn
        .L.0000:    mov         r00d, $00000000
                    freturn
        .L.0001:    mov         r00d, $00000001
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$compareUnsigned$long$long$) ; <fold returns int>
                    fast        avt.lang.Long$compareUnsigned$long$long$, \
                                value0, long, \
                                value1, long
                    fenter
                    mov         r00q, [.value0]
                    cmp         r00q, [.value1]
                    je          .L.0000
                    ja          .L.0001
                    mov         r00d, $ffffffff
                    freturn
        .L.0000:    mov         r00d, $00000000
                    freturn
        .L.0001:    mov         r00d, $00000001
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$toInt2Bits$long$) ; <fold returns int2>
                    fast        avt.lang.Long$toInt2Bits$long$, \
                                value, long
                    fenter
                    vmovdqa     xmm0, [.value]
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$max$long$long$) ; <fold returns long>
                    fast        avt.lang.Long$max$long$long$, \
                                value0, long, \
                                value1, long
                    fenter
                    mov         r00q, [.value0]
                    mov         r01q, [.value1]
                    cmp         r00q, r01q
                    jge         @F
                    mov         r00q, r01q
             @@:    fleave
    end if ; </fold>

    if(used avt.lang.Long$maxUnsigned$long$long$) ; <fold returns long>
                    fast        avt.lang.Long$maxUnsigned$long$long$, \
                                value0, long, \
                                value1, long
                    fenter
                    mov         r00q, [.value0]
                    mov         r01q, [.value1]
                    cmp         r00q, r01q
                    jae         @F
                    mov         r00q, r01q
             @@:    fleave
    end if ; </fold>

    if(used avt.lang.Long$min$long$long$) ; <fold returns long>
                    fast        avt.lang.Long$min$long$long$, \
                                value0, long, \
                                value1, long
                    fenter
                    mov         r00q, [.value0]
                    mov         r01q, [.value1]
                    cmp         r00q, r01q
                    jle         @F
                    mov         r00q, r01q
             @@:    fleave
    end if ; </fold>

    if(used avt.lang.Long$minUnsigned$long$long$) ; <fold returns long>
                    fast        avt.lang.Long$minUnsigned$long$long$, \
                                value0, long, \
                                value1, long
                    fenter
                    mov         r00q, [.value0]
                    mov         r01q, [.value1]
                    cmp         r00q, r01q
                    jbe         @F
                    mov         r00q, r01q
             @@:    fleave
    end if ; </fold>

    if(used avt.lang.Long$rotateLeft$long$int$) ; <fold returns long>
                    fast        avt.lang.Long$rotateLeft$long$int$, \
                                value, long, \
                                bits, int
                    fenter
                    mov         r00q, [.value]
                    mov         r01d, [.bits]
                    rol         r00q, r01b
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$rotateRight$long$int$) ; <fold returns long>
                    fast        avt.lang.Long$rotateRight$long$int$, \
                                value, long, \
                                bits, int
                    fenter
                    mov         r00q, [.value]
                    mov         r01d, [.bits]
                    ror         r00q, r01b
                    fleave
    end if ; </fold>

    if(used avt.lang.Long$toDoubleBits$long$) ; <fold returns double>
                    fast        avt.lang.Long$toDoubleBits$long$, \
                                value, long
                    fenter
                    vmovdqa     xmm0, [.value]
                    fleave
    end if ; </fold>
; </fold>