;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold изменение значения переменных на 1>
; <fold увеличение значения на 1>
macro incc_l localvarName* {
inc word [.#localvarName]
}
macro ince_l localvarName* {
fld tbyte [.#localvarName]
fld1
faddp esc1, esc0
fstp tbyte [.#localvarName]
}
macro incd_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddsd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incd2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddpd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incd4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vaddpd ymm0, ymm0, [cons$double8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro incd8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
vaddpd zmm0, zmm0, [cons$double8.1]
vmovdqu64 zword [.#localvarName], zmm0
}
macro incf_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddss xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incf2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incf4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incf8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vaddps ymm0, ymm0, [cons$float8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro incb_l localvarName* {
mov dsc0, [.#localvarName]
inc dsc0
movsx dsc0, bsc0
mov dword [.#localvarName], dsc0
}
macro incb2_l localvarName* {
inc byte [.#localvarName]
}
macro incb4_l localvarName* {
inc byte [.#localvarName]
}
macro incb8_l localvarName* {
inc byte [.#localvarName]
}
macro incs_l localvarName* {
mov dsc0, [.#localvarName]
inc dsc0
movsx dsc0, wsc0
mov dword [.#localvarName], dsc0
}
macro incs2_l localvarName* {
inc word [.#localvarName]
}
macro incs4_l localvarName* {
inc word [.#localvarName]
}
macro incs8_l localvarName* {
inc word [.#localvarName]
}
macro inci_l localvarName* {
inc dword [.#localvarName]
}
macro inci2_l localvarName* {
inc dword [.#localvarName]
}
macro inci4_l localvarName* {
inc dword [.#localvarName]
}
macro inci8_l localvarName* {
inc dword [.#localvarName]
}
macro incl_l localvarName* {
inc qword [.#localvarName]
}
macro incl2_l localvarName* {
inc qword [.#localvarName]
}
macro incl4_l localvarName* {
inc qword [.#localvarName]
}
macro incl8_l localvarName* {
inc qword [.#localvarName]
}
; </fold>
; <fold уменьшение значения на 1>
macro decc_l localvarName* {
dec word [.#localvarName]
}
macro dece_l localvarName* {
fld tbyte [.#localvarName]
fld1
fsubp esc1, esc0
fstp tbyte [.#localvarName]
}
macro decd_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubsd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decd2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubpd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decd4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vsubpd ymm0, ymm0, [cons$double8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro decd8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
vsubpd zmm0, zmm0, [cons$double8.1]
vmovdqu64 zword [.#localvarName], zmm0
}
macro decf_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubss xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decf2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decf4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decf8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vsubps ymm0, ymm0, [cons$float8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro decb_l localvarName* {
mov dsc0, [.#localvarName]
dec dsc0
movsx dsc0, bsc0
mov dword [.#localvarName], dsc0
}
macro decb2_l localvarName* {
dec byte [.#localvarName]
}
macro decb4_l localvarName* {
dec byte [.#localvarName]
}
macro decb8_l localvarName* {
dec byte [.#localvarName]
}
macro decs_l localvarName* {
mov dsc0, [.#localvarName]
dec dsc0
movsx dsc0, wsc0
mov dword [.#localvarName], dsc0
}
macro decs2_l localvarName* {
dec word [.#localvarName]
}
macro decs4_l localvarName* {
dec word [.#localvarName]
}
macro decs8_l localvarName* {
dec word [.#localvarName]
}
macro deci_l localvarName* {
dec dword [.#localvarName]
}
macro deci2_l localvarName* {
dec dword [.#localvarName]
}
macro deci4_l localvarName* {
dec dword [.#localvarName]
}
macro deci8_l localvarName* {
dec dword [.#localvarName]
}
macro decl_l localvarName* {
dec qword [.#localvarName]
}
macro decl2_l localvarName* {
dec qword [.#localvarName]
}
macro decl4_l localvarName* {
dec qword [.#localvarName]
}
macro decl8_l localvarName* {
dec qword [.#localvarName]
}
; </fold>
; <fold увеличение на 1 и последующая загрузка значения>
macro incloadc_l localvarName* {
inc word [.#localvarName]
mov dsc0, [.#localvarName]
}
macro incloade_l localvarName* {
fld tbyte [.#localvarName]
fld1
faddp esc1, esc0
fld esc0
fstp tbyte [.#localvarName]
}
macro incloadd_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddsd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incloadd2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddpd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incloadd4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vaddpd ymm0, ymm0, [cons$double8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro incloadd8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
vaddpd zmm0, zmm0, [cons$double8.1]
vmovdqu64 zword [.#localvarName], zmm0
}
macro incloadf_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddss xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incloadf2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incloadf4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro incloadf8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vaddps ymm0, ymm0, [cons$float8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro incloadb_l localvarName* {
mov dsc0, [.#localvarName]
inc dsc0
movsx dsc0, bsc0
mov dword [.#localvarName], dsc0
}
macro incloadb2_l localvarName* {
inc byte [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloadb4_l localvarName* {
inc byte [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloadb8_l localvarName* {
inc byte [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloads_l localvarName* {
mov dsc0, [.#localvarName]
inc dsc0
movsx dsc0, wsc0
mov dword [.#localvarName], dsc0
}
macro incloads2_l localvarName* {
inc word [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloads4_l localvarName* {
inc word [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloads8_l localvarName* {
inc word [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloadi_l localvarName* {
inc dword [.#localvarName]
mov dsc0, [.#localvarName]
}
macro incloadi2_l localvarName* {
inc dword [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloadi4_l localvarName* {
inc dword [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloadi8_l localvarName* {
inc dword [.#localvarName]
vmovdqu ymm0, [.#localvarName]
}
macro incloadl_l localvarName* {
inc qword [.#localvarName]
mov qsc0, [.#localvarName]
}
macro incloadl2_l localvarName* {
inc qword [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro incloadl4_l localvarName* {
inc qword [.#localvarName]
vmovdqu ymm0, [.#localvarName]
}
macro incloadl8_l localvarName* {
inc qword [.#localvarName]
vmovdqu64 zmm0, [.#localvarName]
}
; </fold>
; <fold уменьшение на 1 и последующая загрузка значения>
macro decloadc_l localvarName* {
dec word [.#localvarName]
mov dsc0, [.#localvarName]
}
macro decloade_l localvarName* {
fld tbyte [.#localvarName]
fld1
fsubp esc1, esc0
fld esc0
fstp tbyte [.#localvarName]
}
macro decloadd_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubsd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decloadd2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubpd xmm0, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decloadd4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vsubpd ymm0, ymm0, [cons$double8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro decloadd8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
vsubpd zmm0, zmm0, [cons$double8.1]
vmovdqu64 zword [.#localvarName], zmm0
}
macro decloadf_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubss xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decloadf2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decloadf4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubps xmm0, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm0
}
macro decloadf8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vsubps ymm0, ymm0, [cons$float8.1]
vmovdqu yword [.#localvarName], ymm0
}
macro decloadb_l localvarName* {
mov dsc0, [.#localvarName]
dec dsc0
movsx dsc0, bsc0
mov dword [.#localvarName], dsc0
}
macro decloadb2_l localvarName* {
dec byte [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloadb4_l localvarName* {
dec byte [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloadb8_l localvarName* {
dec byte [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloads_l localvarName* {
mov dsc0, [.#localvarName]
dec dsc0
movsx dsc0, wsc0
mov dword [.#localvarName], dsc0
}
macro decloads2_l localvarName* {
dec word [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloads4_l localvarName* {
dec word [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloads8_l localvarName* {
dec word [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloadi_l localvarName* {
dec dword [.#localvarName]
mov dsc0, [.#localvarName]
}
macro decloadi2_l localvarName* {
dec dword [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloadi4_l localvarName* {
dec dword [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloadi8_l localvarName* {
dec dword [.#localvarName]
vmovdqu ymm0, [.#localvarName]
}
macro decloadl_l localvarName* {
dec qword [.#localvarName]
mov qsc0, [.#localvarName]
}
macro decloadl2_l localvarName* {
dec qword [.#localvarName]
vmovdqa xmm0, [.#localvarName]
}
macro decloadl4_l localvarName* {
dec qword [.#localvarName]
vmovdqu ymm0, [.#localvarName]
}
macro decloadl8_l localvarName* {
dec qword [.#localvarName]
vmovdqu64 zmm0, [.#localvarName]
}
; </fold>
; <fold загрузка и последующее увеличение значения на 1>
macro loadincc_l localvarName* {
mov dsc0, [.#localvarName]
inc word [.#localvarName]
}
macro loadince_l localvarName* {
fld tbyte [.#localvarName]
fld esc0
fld1
faddp esc1, esc0
fstp tbyte [.#localvarName]
}
macro loadincd_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddsd xmm1, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loadincd2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddpd xmm1, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loadincd4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vaddpd ymm1, ymm0, [cons$double8.1]
vmovdqu yword [.#localvarName], ymm1
}
macro loadincd8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
vaddpd zmm1, zmm0, [cons$double8.1]
vmovdqu64 zword [.#localvarName], zmm1
}
macro loadincf_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddss xmm1, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loadincf2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddps xmm1, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loadincf4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vaddps xmm1, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loadincf8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vaddps ymm1, ymm0, [cons$float8.1]
vmovdqu yword [.#localvarName], ymm1
}
macro loadincb_l localvarName* {
mov dsc0, [.#localvarName]
lea dsc1, [dsc0+$01]
movsx dsc1, bsc1
mov dword [.#localvarName], dsc1
}
macro loadincb2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc byte [.#localvarName]
}
macro loadincb4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc byte [.#localvarName]
}
macro loadincb8_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc byte [.#localvarName]
}
macro loadincs_l localvarName* {
mov dsc0, [.#localvarName]
lea dsc1, [dsc0+$01]
movsx dsc1, wsc1
mov dword [.#localvarName], dsc1
}
macro loadincs2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc word [.#localvarName]
}
macro loadincs4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc word [.#localvarName]
}
macro loadincs8_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc word [.#localvarName]
}
macro loadinci_l localvarName* {
mov dsc0, [.#localvarName]
inc dword [.#localvarName]
}
macro loadinci2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc dword [.#localvarName]
}
macro loadinci4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc dword [.#localvarName]
}
macro loadinci8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
inc dword [.#localvarName]
}
macro loadincl_l localvarName* {
mov qsc0, [.#localvarName]
inc qword [.#localvarName]
}
macro loadincl2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
inc qword [.#localvarName]
}
macro loadincl4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
inc qword [.#localvarName]
}
macro loadincl8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
inc qword [.#localvarName]
}
; </fold>
; <fold загрузка и последующее уменьшение значения на 1>
macro loaddecc_l localvarName* {
mov dsc0, [.#localvarName]
dec word [.#localvarName]
}
macro loaddece_l localvarName* {
fld tbyte [.#localvarName]
fld esc0
fld1
fsubp esc1, esc0
fstp tbyte [.#localvarName]
}
macro loaddecd_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubsd xmm1, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loaddecd2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubpd xmm1, xmm0, [cons$double8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loaddecd4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vsubpd ymm1, ymm0, [cons$double8.1]
vmovdqu yword [.#localvarName], ymm1
}
macro loaddecd8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
vsubpd zmm1, zmm0, [cons$double8.1]
vmovdqu64 zword [.#localvarName], zmm1
}
macro loaddecf_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubss xmm1, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loaddecf2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubps xmm1, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loaddecf4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
vsubps xmm1, xmm0, [cons$float8.1]
vmovdqa xword [.#localvarName], xmm1
}
macro loaddecf8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
vsubps ymm1, ymm0, [cons$float8.1]
vmovdqu yword [.#localvarName], ymm1
}
macro loaddecb_l localvarName* {
mov dsc0, [.#localvarName]
lea dsc1, [dsc0-$01]
movsx dsc1, bsc1
mov dword [.#localvarName], dsc1
}
macro loaddecb2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec byte [.#localvarName]
}
macro loaddecb4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec byte [.#localvarName]
}
macro loaddecb8_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec byte [.#localvarName]
}
macro loaddecs_l localvarName* {
mov dsc0, [.#localvarName]
lea dsc1, [dsc0-$01]
movsx dsc1, wsc1
mov dword [.#localvarName], dsc1
}
macro loaddecs2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec word [.#localvarName]
}
macro loaddecs4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec word [.#localvarName]
}
macro loaddecs8_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec word [.#localvarName]
}
macro loaddeci_l localvarName* {
mov dsc0, [.#localvarName]
dec dword [.#localvarName]
}
macro loaddeci2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec dword [.#localvarName]
}
macro loaddeci4_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec dword [.#localvarName]
}
macro loaddeci8_l localvarName* {
vmovdqu ymm0, [.#localvarName]
dec dword [.#localvarName]
}
macro loaddecl_l localvarName* {
mov qsc0, [.#localvarName]
dec qword [.#localvarName]
}
macro loaddecl2_l localvarName* {
vmovdqa xmm0, [.#localvarName]
dec qword [.#localvarName]
}
macro loaddecl4_l localvarName* {
vmovdqu ymm0, [.#localvarName]
dec qword [.#localvarName]
}
macro loaddecl8_l localvarName* {
vmovdqu64 zmm0, [.#localvarName]
dec qword [.#localvarName]
}
; </fold>
; </fold>