;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold множественное ветвление>
macro switch_l labelDefault*, [valueOfCase, labelOfCase] {
forward
if(~(valueOfCase eq) & ~(labelOfCase eq))
cmp r00d, valueOfCase
je labelOfCase
end if
common
local .L.0000
if((defined .L.0000) & (defined labelDefault) & (.L.0000 <> labelDefault))
jmp labelDefault
end if
.L.0000:
}
macro switch_t labelDefault*, valueOfCase*, [labelOfCase] {
common
local .L.0000
local .countOfCase
.countOfCase = 0
forward
if(~(labelOfCase eq))
.countOfCase = .countOfCase+1
end if
common
sub r00d, valueOfCase
jl labelDefault
cmp r00d, .countOfCase
jge labelDefault
lea r01q, [.L.0000]
movsxd r02q, [r01+r00*4+$00]
lea r00q, [r01+r02*1+$00]
jmp r00q
repeat((-$) and 3)
db $cc
end repeat
.L.0000:
forward
if(~(labelOfCase eq))
dd -.L.0000+(labelOfCase)
end if
common
dw $cccc, $cccc, $cccc, $cccc, $cccc, $cccc, $cccc
}
; </fold>