;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold приведение значения типа short* к другим типам>
; <fold short2>
macro casts2tod2 {
vpmovsxwd xmm0, xmm0
vcvtdq2pd xmm0, xmm0
}
macro casts2tof2 {
vpmovsxwd xmm0, xmm0
vcvtdq2ps xmm0, xmm0
}
macro casts2tob2 {
vpand xmm0, xmm0, [cons$short8.$00ff]
vpackuswb xmm0, xmm0, [cons$zero]
}
macro casts2toi2 {
vpmovsxwd xmm0, xmm0
}
macro casts2tol2 {
vpmovsxwq xmm0, xmm0
}
macro casts2tos {
vmovd dsc0, xmm0
movsx dsc0, wsc0
}
macro casts2tos4 { }
macro casts2tos8 { }
; </fold>
; <fold short4>
macro casts4tod4 {
vpmovsxwd xmm0, xmm0
vcvtdq2pd ymm0, xmm0
}
macro casts4tof4 {
vpmovsxwd xmm0, xmm0
vcvtdq2ps xmm0, xmm0
}
macro casts4tob4 {
vpand xmm0, xmm0, [cons$short8.$00ff]
vpackuswb xmm0, xmm0, [cons$zero]
}
macro casts4toi4 {
vpmovsxwd xmm0, xmm0
}
macro casts4tol4 {
vpmovsxwq ymm0, xmm0
}
macro casts4tos {
vmovd dsc0, xmm0
movsx dsc0, wsc0
}
macro casts4tos2 {
vpand xmm0, xmm0, [cons$short8.mask2]
}
macro casts4tos8 { }
; </fold>
; <fold short8>
macro casts8tod8 {
vpmovsxwd ymm0, xmm0
vcvtdq2pd zmm0, ymm0
}
macro casts8tof8 {
vpmovsxwd ymm0, xmm0
vcvtdq2ps ymm0, ymm0
}
macro casts8tob8 {
vpand xmm0, xmm0, [cons$short8.$00ff]
vpackuswb xmm0, xmm0, [cons$zero]
}
macro casts8toi8 {
vpmovsxwd ymm0, xmm0
}
macro casts8tol8 {
vpmovsxwq zmm0, xmm0
}
macro casts8tos {
vmovd dsc0, xmm0
movsx dsc0, wsc0
}
macro casts8tos2 {
vpand xmm0, xmm0, [cons$short8.mask2]
}
macro casts8tos4 {
vpand xmm0, xmm0, [cons$short8.mask4]
}
; </fold>
; </fold>