;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold приведение значения типа byte* к другим типам>
; <fold byte2>
macro castb2tod2 {
vpmovsxbd xmm0, xmm0
vcvtdq2pd xmm0, xmm0
}
macro castb2tof2 {
vpmovsxbd xmm0, xmm0
vcvtdq2ps xmm0, xmm0
}
macro castb2tos2 {
vpmovsxbw xmm0, xmm0
}
macro castb2toi2 {
vpmovsxbd xmm0, xmm0
}
macro castb2tol2 {
vpmovsxbq xmm0, xmm0
}
macro castb2tob {
vmovd dsc0, xmm0
movsx dsc0, bsc0
}
macro castb2tob4 { }
macro castb2tob8 { }
; </fold>
; <fold byte4>
macro castb4tod4 {
vpmovsxbd xmm0, xmm0
vcvtdq2pd ymm0, xmm0
}
macro castb4tof4 {
vpmovsxbd xmm0, xmm0
vcvtdq2ps xmm0, xmm0
}
macro castb4tos4 {
vpmovsxbw xmm0, xmm0
}
macro castb4toi4 {
vpmovsxbd xmm0, xmm0
}
macro castb4tol4 {
vpmovsxbq ymm0, xmm0
}
macro castb4tob {
vmovd dsc0, xmm0
movsx dsc0, bsc0
}
macro castb4tob2 {
vpand xmm0, xmm0, [cons$byte8.mask2]
}
macro castb4tob8 { }
; </fold>
; <fold byte8>
macro castb8tod8 {
vpmovsxbd ymm0, xmm0
vcvtdq2pd zmm0, ymm0
}
macro castb8tof8 {
vpmovsxbd ymm0, xmm0
vcvtdq2ps ymm0, ymm0
}
macro castb8tos8 {
vpmovsxbw xmm0, xmm0
}
macro castb8toi8 {
vpmovsxbd ymm0, xmm0
}
macro castb8tol8 {
vpmovsxbq zmm0, xmm0
}
macro castb8tob {
vmovd dsc0, xmm0
movsx dsc0, bsc0
}
macro castb8tob2 {
vpand xmm0, xmm0, [cons$byte8.mask2]
}
macro castb8tob4 {
vpand xmm0, xmm0, [cons$byte8.mask4]
}
; </fold>
; </fold>