;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold приведение значения типа long* к другим типам>
; <fold long>
macro castltoe {
mov qword [rbx+ctxt$tm2], qsc0
fild qword [rbx+ctxt$tm2]
}
macro castltod {
vmovq xmm0, qsc0
vcvtsi2sd xmm0, xmm0, qsc0
}
macro castltof {
vmovd xmm0, dsc0
vcvtsi2ss xmm0, xmm0, qsc0
}
macro castltob {
movsx dsc0, bsc0
}
macro castltos {
movsx dsc0, wsc0
}
macro castltoi {
mov dsc0, dsc0
}
macro castltol2 {
vmovq xmm0, qsc0
}
macro castltol4 {
vmovq xmm0, qsc0
}
macro castltol8 {
vmovq xmm0, qsc0
}
; </fold>
; <fold long2>
macro castl2tod2 {
vcvtqq2pd xmm0, xmm0
}
macro castl2tof2 {
vcvtqq2ps xmm0, xmm0
}
macro castl2tob2 {
call inst$castl2tob2
}
macro castl2tos2 {
call inst$castl2tos2
}
macro castl2toi2 {
call inst$castl2toi2
}
macro castl2tol {
vmovq qsc0, xmm0
}
macro castl2tol4 { }
macro castl2tol8 { }
; </fold>
; <fold long4>
macro castl4tod4 {
vcvtqq2pd ymm0, ymm0
}
macro castl4tof4 {
vcvtqq2ps xmm0, ymm0
}
macro castl4tob4 {
call inst$castl4tob4
}
macro castl4tos4 {
call inst$castl4tos4
}
macro castl4toi4 {
call inst$castl4toi4
}
macro castl4tol {
vmovq qsc0, xmm0
}
macro castl4tol2 {
vmovdqa xmm0, xmm0
}
macro castl4tol8 { }
; </fold>
; <fold long8>
macro castl8tod8 {
vcvtqq2pd zmm0, zmm0
}
macro castl8tof8 {
vcvtqq2ps ymm0, zmm0
}
macro castl8tob8 {
call inst$castl8tob8
}
macro castl8tos8 {
call inst$castl8tos8
}
macro castl8toi8 {
call inst$castl8toi8
}
macro castl8tol {
vmovq qsc0, xmm0
}
macro castl8tol2 {
vmovdqa xmm0, xmm0
}
macro castl8tol4 {
vmovdqa ymm0, ymm0
}
; </fold>
; </fold>