;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold векторное сложение>
; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — на аккумуляторе>
macro vaddd {
saddd
}
macro vaddd2 {
saddd2
}
macro vaddd4 {
saddd4
}
macro vaddd8 {
saddd8
}
macro vaddf {
saddf
}
macro vaddf2 {
saddf2
}
macro vaddf4 {
saddf4
}
macro vaddf8 {
saddf8
}
macro vaddb {
add dsc0, [rsp+$00]
movsx dsc0, bsc0
__pop $01
}
macro vaddb2 {
vpaddb xmm0, xmm0, [rsp+$00]
__pop $01
}
macro vaddb4 {
vpaddb xmm0, xmm0, [rsp+$00]
__pop $01
}
macro vaddb8 {
vpaddb xmm0, xmm0, [rsp+$00]
__pop $01
}
macro vadds {
add dsc0, [rsp+$00]
movsx dsc0, wsc0
__pop $01
}
macro vadds2 {
vpaddw xmm0, xmm0, [rsp+$00]
__pop $01
}
macro vadds4 {
vpaddw xmm0, xmm0, [rsp+$00]
__pop $01
}
macro vadds8 {
vpaddw xmm0, xmm0, [rsp+$00]
__pop $01
}
macro vaddi {
saddi
}
macro vaddi2 {
saddi2
}
macro vaddi4 {
saddi4
}
macro vaddi8 {
saddi8
}
macro vaddl {
saddl
}
macro vaddl2 {
saddl2
}
macro vaddl4 {
saddl4
}
macro vaddl8 {
saddl8
}
; </fold>
; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — на стаке>
macro vaddd_p {
saddd_p
}
macro vaddd2_p {
saddd2_p
}
macro vaddd4_p {
saddd4_p
}
macro vaddd8_p {
saddd8_p
}
macro vaddf_p {
saddf_p
}
macro vaddf2_p {
saddf2_p
}
macro vaddf4_p {
saddf4_p
}
macro vaddf8_p {
saddf8_p
}
macro vaddb_p {
add dsc0, [rsp+$00]
movsx dsc0, bsc0
mov dword [rsp+$00], dsc0
}
macro vaddb2_p {
vpaddb xmm0, xmm0, [rsp+$00]
vmovdqa xword [rsp+$00], xmm0
}
macro vaddb4_p {
vpaddb xmm0, xmm0, [rsp+$00]
vmovdqa xword [rsp+$00], xmm0
}
macro vaddb8_p {
vpaddb xmm0, xmm0, [rsp+$00]
vmovdqa xword [rsp+$00], xmm0
}
macro vadds_p {
add dsc0, [rsp+$00]
movsx dsc0, wsc0
mov dword [rsp+$00], dsc0
}
macro vadds2_p {
vpaddw xmm0, xmm0, [rsp+$00]
vmovdqa xword [rsp+$00], xmm0
}
macro vadds4_p {
vpaddw xmm0, xmm0, [rsp+$00]
vmovdqa xword [rsp+$00], xmm0
}
macro vadds8_p {
vpaddw xmm0, xmm0, [rsp+$00]
vmovdqa xword [rsp+$00], xmm0
}
macro vaddi_p {
saddi_p
}
macro vaddi2_p {
saddi2_p
}
macro vaddi4_p {
saddi4_p
}
macro vaddi8_p {
saddi8_p
}
macro vaddl_p {
saddl_p
}
macro vaddl2_p {
saddl2_p
}
macro vaddl4_p {
saddl4_p
}
macro vaddl8_p {
saddl8_p
}
; </fold>
; <fold первый операнд — на аккумуляторе, второй операнд — локальная переменная, результат — на аккумуляторе>
macro vaddd_l localvarName* {
saddd_l localvarName
}
macro vaddd2_l localvarName* {
saddd2_l localvarName
}
macro vaddd4_l localvarName* {
saddd4_l localvarName
}
macro vaddd8_l localvarName* {
saddd8_l localvarName
}
macro vaddf_l localvarName* {
saddf_l localvarName
}
macro vaddf2_l localvarName* {
saddf2_l localvarName
}
macro vaddf4_l localvarName* {
saddf4_l localvarName
}
macro vaddf8_l localvarName* {
saddf8_l localvarName
}
macro vaddb_l localvarName* {
saddi_l localvarName
movsx dsc0, bsc0
}
macro vaddb2_l localvarName* {
vpaddb xmm0, xmm0, [.#localvarName]
}
macro vaddb4_l localvarName* {
vpaddb xmm0, xmm0, [.#localvarName]
}
macro vaddb8_l localvarName* {
vpaddb xmm0, xmm0, [.#localvarName]
}
macro vadds_l localvarName* {
saddi_l localvarName
movsx dsc0, wsc0
}
macro vadds2_l localvarName* {
vpaddw xmm0, xmm0, [.#localvarName]
}
macro vadds4_l localvarName* {
vpaddw xmm0, xmm0, [.#localvarName]
}
macro vadds8_l localvarName* {
vpaddw xmm0, xmm0, [.#localvarName]
}
macro vaddi_l localvarName* {
saddi_l localvarName
}
macro vaddi2_l localvarName* {
saddi2_l localvarName
}
macro vaddi4_l localvarName* {
saddi4_l localvarName
}
macro vaddi8_l localvarName* {
saddi8_l localvarName
}
macro vaddl_l localvarName* {
saddl_l localvarName
}
macro vaddl2_l localvarName* {
saddl2_l localvarName
}
macro vaddl4_l localvarName* {
saddl4_l localvarName
}
macro vaddl8_l localvarName* {
saddl8_l localvarName
}
; </fold>
; <fold первый операнд — на аккумуляторе, второй операнд — глобальный член, результат — на аккумуляторе>
macro vaddd_g globalmember* {
saddd_g globalmember
}
macro vaddd2_g globalmember* {
saddd2_g globalmember
}
macro vaddd4_g globalmember* {
saddd4_g globalmember
}
macro vaddd8_g globalmember* {
saddd8_g globalmember
}
macro vaddf_g globalmember* {
saddf_g globalmember
}
macro vaddf2_g globalmember* {
saddf2_g globalmember
}
macro vaddf4_g globalmember* {
saddf4_g globalmember
}
macro vaddf8_g globalmember* {
saddf8_g globalmember
}
macro vaddb_g globalmember* {
saddi_g globalmember
movsx dsc0, bsc0
}
macro vaddb2_g globalmember* {
vpaddb xmm0, xmm0, globalmember
}
macro vaddb4_g globalmember* {
vpaddb xmm0, xmm0, globalmember
}
macro vaddb8_g globalmember* {
vpaddb xmm0, xmm0, globalmember
}
macro vadds_g globalmember* {
saddi_g globalmember
movsx dsc0, wsc0
}
macro vadds2_g globalmember* {
vpaddw xmm0, xmm0, globalmember
}
macro vadds4_g globalmember* {
vpaddw xmm0, xmm0, globalmember
}
macro vadds8_g globalmember* {
vpaddw xmm0, xmm0, globalmember
}
macro vaddi_g globalmember* {
saddi_g globalmember
}
macro vaddi2_g globalmember* {
saddi2_g globalmember
}
macro vaddi4_g globalmember* {
saddi4_g globalmember
}
macro vaddi8_g globalmember* {
saddi8_g globalmember
}
macro vaddl_g globalmember* {
saddl_g globalmember
}
macro vaddl2_g globalmember* {
saddl2_g globalmember
}
macro vaddl4_g globalmember* {
saddl4_g globalmember
}
macro vaddl8_g globalmember* {
saddl8_g globalmember
}
; </fold>
; </fold>