;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; 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>