;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold приведение значения типа double* к другим типам>
; <fold double>
macro castdtoe {
vmovq qword [rbx+ctxt$tm2], xmm0
fld qword [rbx+ctxt$tm2]
}
macro castdtof {
vpxor xmm1, xmm0, xmm0
vcvtsd2ss xmm0, xmm1, xmm0
}
macro castdtob {
castdtoi
castitob
}
macro castdtos {
castdtoi
castitos
}
macro castdtoi {
call inst$castdtoi
}
macro castdtol {
call inst$castdtol
}
macro castdtod2 { }
macro castdtod4 { }
macro castdtod8 { }
; </fold>
; <fold double2>
macro castd2tof2 {
vcvtpd2ps xmm0, xmm0
}
macro castd2tob2 {
castd2toi2
casti2tob2
}
macro castd2tos2 {
castd2toi2
casti2tos2
}
macro castd2toi2 {
call inst$castd2toi2
}
macro castd2tol2 {
call inst$castd2tol2
}
macro castd2tod {
vpand xmm0, xmm0, [cons$long2.m1_0]
}
macro castd2tod4 { }
macro castd2tod8 { }
; </fold>
; <fold double4>
macro castd4tof4 {
vcvtpd2ps xmm0, ymm0
}
macro castd4tob4 {
castd4toi4
casti4tob4
}
macro castd4tos4 {
castd4toi4
casti4tos4
}
macro castd4toi4 {
call inst$castd4toi4
}
macro castd4tol4 {
call inst$castd4tol4
}
macro castd4tod {
vpand xmm0, xmm0, [cons$long2.m1_0]
}
macro castd4tod2 {
vmovdqa xmm0, xmm0
}
macro castd4tod8 { }
; </fold>
; <fold double8>
macro castd8tof8 {
vcvtpd2ps ymm0, zmm0
}
macro castd8tob8 {
castd8toi8
casti8tob8
}
macro castd8tos8 {
castd8toi8
casti8tos8
}
macro castd8toi8 {
call inst$castd8toi8
}
macro castd8tol8 {
call inst$castd8tol8
}
macro castd8tod {
vpand xmm0, xmm0, [cons$long2.m1_0]
}
macro castd8tod2 {
vmovdqa xmm0, xmm0
}
macro castd8tod4 {
vmovdqa ymm0, ymm0
}
; </fold>
; </fold>