;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold запись переменных>
; <fold локальная переменная>
macro storer_l localvarName* {
xchg qword [.#localvarName], qsc0
tstdecrcoth qsc0
}
macro storee_l localvarName* {
fstp tbyte [.#localvarName]
}
macro stored_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro stored2_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro stored4_l localvarName* {
vmovdqu yword [.#localvarName], ymm0
}
macro stored8_l localvarName* {
vmovdqu64 zword [.#localvarName], zmm0
}
macro storef_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storef2_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storef4_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storef8_l localvarName* {
vmovdqu yword [.#localvarName], ymm0
}
macro storeb2_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storeb4_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storeb8_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro stores2_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro stores4_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro stores8_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storei_l localvarName* {
mov dword [.#localvarName], dsc0
}
macro storei2_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storei4_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storei8_l localvarName* {
vmovdqu yword [.#localvarName], ymm0
}
macro storel_l localvarName* {
mov qword [.#localvarName], qsc0
}
macro storel2_l localvarName* {
vmovdqa xword [.#localvarName], xmm0
}
macro storel4_l localvarName* {
vmovdqu yword [.#localvarName], ymm0
}
macro storel8_l localvarName* {
vmovdqu64 zword [.#localvarName], zmm0
}
; </fold>
; <fold локальная переменная и непосредственный операнд>
macro storer_lc localvarName*, immediate* {
if(immediate eq null)
xor qsc0, qsc0
else
lea qsc0, [immediate]
incrcoth qsc0
end if
storer_l localvarName
}
macro storei_lc localvarName*, immediate* {
mov dword [.#localvarName], immediate
}
; </fold>
; <fold глобальный член>
macro storer_g globalmember* {
xchg qword globalmember, qsc0
tstdecrcoth qsc0
}
macro storee_g globalmember* {
fstp tbyte globalmember
}
macro stored_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro stored2_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro stored4_g globalmember* {
vmovdqa yword globalmember, ymm0
}
macro stored8_g globalmember* {
vmovdqa64 zword globalmember, zmm0
}
macro storef_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storef2_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storef4_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storef8_g globalmember* {
vmovdqa yword globalmember, ymm0
}
macro storeb2_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storeb4_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storeb8_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro stores2_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro stores4_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro stores8_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storei_g globalmember* {
mov dword globalmember, dsc0
}
macro storei2_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storei4_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storei8_g globalmember* {
vmovdqa yword globalmember, ymm0
}
macro storel_g globalmember* {
mov qword globalmember, qsc0
}
macro storel2_g globalmember* {
vmovdqa xword globalmember, xmm0
}
macro storel4_g globalmember* {
vmovdqa yword globalmember, ymm0
}
macro storel8_g globalmember* {
vmovdqa64 zword globalmember, zmm0
}
; </fold>
; <fold глобальный член и непосредственный операнд>
macro storer_gc globalmember*, immediate* {
if(immediate eq null)
xor qsc0, qsc0
else
lea qsc0, [immediate]
incrcoth qsc0
end if
storer_g globalmember
}
macro storei_gc globalmember*, immediate* {
mov dword globalmember, immediate
}
; </fold>
; </fold>