;
; Реализация среды исполнения языка программирования
; Объектно-ориентированный продвинутый векторный транслятор
;
; Copyright © 2021, 2024 Малик Разработчик
;
; Это свободная программа: вы можете перераспространять ее и/или изменять
; ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
; в каком она была опубликована Фондом свободного программного обеспечения;
; либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
;
; Эта программа распространяется в надежде, что она будет полезной,
; но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
; или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
; общественной лицензии GNU.
;
; Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
; вместе с этой программой. Если это не так, см.
; <https://www.gnu.org/licenses/>.
;
; <fold скалярное не равно>
; <fold приватные макросы — должны использоваться только этим текстом исходного кода>
macro _setcmpnes {
sete bsc0
dec bsc0
movsx dsc0, bsc0
}
macro _setcmpnev2 {
and dsc0, $03
cmp dsc0, $03
_setcmpnes
}
macro _setcmpnev4 {
and dsc0, $0f
cmp dsc0, $0f
_setcmpnes
}
macro _setcmpnev8 {
cmp bsc0, $ff
_setcmpnes
}
macro _jcmpnev2 labelIsTrue* {
and dsc0, $03
cmp dsc0, $03
jne labelIsTrue
}
macro _jcmpnev4 labelIsTrue* {
and dsc0, $0f
cmp dsc0, $0f
jne labelIsTrue
}
macro _jcmpnev8 labelIsTrue* {
cmp bsc0, $ff
jne labelIsTrue
}
; </fold>
; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — на аккумуляторе>
macro setsnee {
fld tbyte [rsp+$00]
__pop $01
fcomip esc0, esc1
releasee
_setcmpg
_setcmpnes
}
macro setsned {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcomisd xmm1, xmm0
_setcmpg
_setcmpnes
}
macro setsned2 {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcmppd xmm0, xmm1, xmm0, $00
vmovmskpd dsc0, xmm0
_setcmpnev2
}
macro setsned4 {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vcmppd ymm0, ymm1, ymm0, $00
vmovmskpd dsc0, ymm0
_setcmpnev4
}
macro setsned8 {
vmovdqu64 zmm1, [rsp+$00]
__cltag_z $00
__pop $04
vcmppd msk1, zmm1, zmm0, $00
kmovw dsc0, msk1
_setcmpnev8
}
macro setsnef {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcomiss xmm1, xmm0
_setcmpg
_setcmpnes
}
macro setsnef2 {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcmpps xmm0, xmm1, xmm0, $00
vmovmskps dsc0, xmm0
_setcmpnev2
}
macro setsnef4 {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcmpps xmm0, xmm1, xmm0, $00
vmovmskps dsc0, xmm0
_setcmpnev4
}
macro setsnef8 {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vcmpps ymm0, ymm1, ymm0, $00
vmovmskps dsc0, ymm0
_setcmpnev8
}
macro setsnei {
mov dsc1, [rsp+$00]
__pop $01
cmp dsc1, dsc0
_setcmpnes
}
macro setsnei2 {
vmovdqa xmm1, [rsp+$00]
__pop $01
vpcmpeqd xmm0, xmm1, xmm0
vmovmskps dsc0, xmm0
_setcmpnev2
}
macro setsnei4 {
vmovdqa xmm1, [rsp+$00]
__pop $01
vpcmpeqd xmm0, xmm1, xmm0
vmovmskps dsc0, xmm0
_setcmpnev4
}
macro setsnei8 {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vpcmpeqd ymm0, ymm1, ymm0
vmovmskps dsc0, ymm0
_setcmpnev8
}
macro setsnel {
mov qsc1, [rsp+$00]
__pop $01
cmp qsc1, qsc0
_setcmpnes
}
macro setsnel2 {
vmovdqa xmm1, [rsp+$00]
__pop $01
vpcmpeqq xmm0, xmm1, xmm0
vmovmskpd dsc0, xmm0
_setcmpnev2
}
macro setsnel4 {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vpcmpeqq ymm0, ymm1, ymm0
vmovmskpd dsc0, ymm0
_setcmpnev4
}
macro setsnel8 {
vmovdqu64 zmm1, [rsp+$00]
__cltag_z $00
__pop $04
vpcmpeqq msk1, zmm1, zmm0
kmovw dsc0, msk1
_setcmpnev8
}
; </fold>
; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — на стаке>
macro setsnee_p {
fld tbyte [rsp+$00]
fcomip esc0, esc1
releasee
_setcmpg
_setcmpnes
_wrstb
}
macro setsned_p {
vmovdqa xmm1, [rsp+$00]
vcomisd xmm1, xmm0
_setcmpg
_setcmpnes
_wrstb
}
macro setsned2_p {
vmovdqa xmm1, [rsp+$00]
vcmppd xmm0, xmm1, xmm0, $00
vmovmskpd dsc0, xmm0
_setcmpnev2
_wrstb
}
macro setsned4_p {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $01
vcmppd ymm0, ymm1, ymm0, $00
vmovmskpd dsc0, ymm0
_setcmpnev4
_wrstb
}
macro setsned8_p {
vmovdqu64 zmm1, [rsp+$00]
__cltag_z $00
__pop $03
vcmppd msk1, zmm1, zmm0, $00
kmovw dsc0, msk1
_setcmpnev8
_wrstb
}
macro setsnef_p {
vmovdqa xmm1, [rsp+$00]
vcomiss xmm1, xmm0
_setcmpg
_setcmpnes
_wrstb
}
macro setsnef2_p {
vmovdqa xmm1, [rsp+$00]
vcmpps xmm0, xmm1, xmm0, $00
vmovmskps dsc0, xmm0
_setcmpnev2
_wrstb
}
macro setsnef4_p {
vmovdqa xmm1, [rsp+$00]
vcmpps xmm0, xmm1, xmm0, $00
vmovmskps dsc0, xmm0
_setcmpnev4
_wrstb
}
macro setsnef8_p {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $01
vcmpps ymm0, ymm1, ymm0, $00
vmovmskps dsc0, ymm0
_setcmpnev8
_wrstb
}
macro setsnei_p {
cmp dword [rsp+$00], dsc0
_setcmpnes
_wrstb
}
macro setsnei2_p {
vmovdqa xmm1, [rsp+$00]
vpcmpeqd xmm0, xmm1, xmm0
vmovmskps dsc0, xmm0
_setcmpnev2
_wrstb
}
macro setsnei4_p {
vmovdqa xmm1, [rsp+$00]
vpcmpeqd xmm0, xmm1, xmm0
vmovmskps dsc0, xmm0
_setcmpnev4
_wrstb
}
macro setsnei8_p {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $01
vpcmpeqd ymm0, ymm1, ymm0
vmovmskps dsc0, ymm0
_setcmpnev8
_wrstb
}
macro setsnel_p {
cmp qword [rsp+$00], qsc0
_setcmpnes
_wrstb
}
macro setsnel2_p {
vmovdqa xmm1, [rsp+$00]
vpcmpeqq xmm0, xmm1, xmm0
vmovmskpd dsc0, xmm0
_setcmpnev2
_wrstb
}
macro setsnel4_p {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $01
vpcmpeqq ymm0, ymm1, ymm0
vmovmskpd dsc0, ymm0
_setcmpnev4
_wrstb
}
macro setsnel8_p {
vmovdqu64 zmm1, [rsp+$00]
__cltag_z $00
__pop $03
vpcmpeqq msk1, zmm1, zmm0
kmovw dsc0, msk1
_setcmpnev8
_wrstb
}
; </fold>
; <fold первый операнд — на аккумуляторе, второй операнд — локальная переменная, результат — на аккумуляторе>
macro setsnee_l localvarName* {
fld tbyte [.#localvarName]
fxch
fcomip esc0, esc1
releasee
_setcmpg
_setcmpnes
}
macro setsned_l localvarName* {
vcomisd xmm0, [.#localvarName]
_setcmpg
_setcmpnes
}
macro setsned2_l localvarName* {
vcmppd xmm0, xmm0, [.#localvarName], $00
vmovmskpd dsc0, xmm0
_setcmpnev2
}
macro setsned4_l localvarName* {
vmovdqu ymm1, [.#localvarName]
vcmppd ymm0, ymm0, ymm1, $00
vmovmskpd dsc0, ymm0
_setcmpnev4
}
macro setsned8_l localvarName* {
vmovdqu64 zmm1, [.#localvarName]
vcmppd msk1, zmm0, zmm1, $00
kmovw dsc0, msk1
_setcmpnev8
}
macro setsnef_l localvarName* {
vcomiss xmm0, [.#localvarName]
_setcmpg
_setcmpnes
}
macro setsnef2_l localvarName* {
vcmpps xmm0, xmm0, [.#localvarName], $00
vmovmskps dsc0, xmm0
_setcmpnev2
}
macro setsnef4_l localvarName* {
vcmpps xmm0, xmm0, [.#localvarName], $00
vmovmskps dsc0, xmm0
_setcmpnev4
}
macro setsnef8_l localvarName* {
vmovdqu ymm1, [.#localvarName]
vcmpps ymm0, ymm0, ymm1, $00
vmovmskps dsc0, ymm0
_setcmpnev8
}
macro setsnei_l localvarName* {
cmp dsc0, [.#localvarName]
_setcmpnes
}
macro setsnei2_l localvarName* {
vpcmpeqd xmm0, xmm0, [.#localvarName]
vmovmskps dsc0, xmm0
_setcmpnev2
}
macro setsnei4_l localvarName* {
vpcmpeqd xmm0, xmm0, [.#localvarName]
vmovmskps dsc0, xmm0
_setcmpnev4
}
macro setsnei8_l localvarName* {
vmovdqu ymm1, [.#localvarName]
vpcmpeqd ymm0, ymm0, ymm1
vmovmskps dsc0, ymm0
_setcmpnev8
}
macro setsnel_l localvarName* {
cmp qsc0, [.#localvarName]
_setcmpnes
}
macro setsnel2_l localvarName* {
vpcmpeqq xmm0, xmm0, [.#localvarName]
vmovmskpd dsc0, xmm0
_setcmpnev2
}
macro setsnel4_l localvarName* {
vmovdqu ymm1, [.#localvarName]
vpcmpeqq ymm0, ymm0, ymm1
vmovmskpd dsc0, ymm0
_setcmpnev4
}
macro setsnel8_l localvarName* {
vmovdqu64 zmm1, [.#localvarName]
vpcmpeqq msk1, zmm0, zmm1
kmovw dsc0, msk1
_setcmpnev8
}
; </fold>
; <fold первый операнд — на аккумуляторе, второй операнд — глобальный член, результат — на аккумуляторе>
macro setsnee_g globalmember* {
fld tbyte globalmember
fxch
fcomip esc0, esc1
releasee
_setcmpg
_setcmpnes
}
macro setsned_g globalmember* {
vcomisd xmm0, globalmember
_setcmpg
_setcmpnes
}
macro setsned2_g globalmember* {
vcmppd xmm0, xmm0, globalmember, $00
vmovmskpd dsc0, xmm0
_setcmpnev2
}
macro setsned4_g globalmember* {
vcmppd ymm0, ymm0, globalmember, $00
vmovmskpd dsc0, ymm0
_setcmpnev4
}
macro setsned8_g globalmember* {
vcmppd msk1, zmm0, globalmember, $00
kmovw dsc0, msk1
_setcmpnev8
}
macro setsnef_g globalmember* {
vcomiss xmm0, globalmember
_setcmpg
_setcmpnes
}
macro setsnef2_g globalmember* {
vcmpps xmm0, xmm0, globalmember, $00
vmovmskps dsc0, xmm0
_setcmpnev2
}
macro setsnef4_g globalmember* {
vcmpps xmm0, xmm0, globalmember, $00
vmovmskps dsc0, xmm0
_setcmpnev4
}
macro setsnef8_g globalmember* {
vcmpps ymm0, ymm0, globalmember, $00
vmovmskps dsc0, ymm0
_setcmpnev8
}
macro setsnei_g globalmember* {
cmp dsc0, globalmember
_setcmpnes
}
macro setsnei2_g globalmember* {
vpcmpeqd xmm0, xmm0, globalmember
vmovmskps dsc0, xmm0
_setcmpnev2
}
macro setsnei4_g globalmember* {
vpcmpeqd xmm0, xmm0, globalmember
vmovmskps dsc0, xmm0
_setcmpnev4
}
macro setsnei8_g globalmember* {
vpcmpeqd ymm0, ymm0, globalmember
vmovmskps dsc0, ymm0
_setcmpnev8
}
macro setsnel_g globalmember* {
cmp qsc0, globalmember
_setcmpnes
}
macro setsnel2_g globalmember* {
vpcmpeqq xmm0, xmm0, globalmember
vmovmskpd dsc0, xmm0
_setcmpnev2
}
macro setsnel4_g globalmember* {
vpcmpeqq ymm0, ymm0, globalmember
vmovmskpd dsc0, ymm0
_setcmpnev4
}
macro setsnel8_g globalmember* {
vpcmpeqq msk1, zmm0, globalmember
kmovw dsc0, msk1
_setcmpnev8
}
; </fold>
; <fold первый операнд — на стаке, второй операнд — на аккумуляторе, результат — переход>
macro jsnee labelIsTrue* {
fld tbyte [rsp+$00]
__pop $01
fcomip esc0, esc1
releasee
_setcmpg
jne labelIsTrue
}
macro jsned labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcomisd xmm1, xmm0
_setcmpg
jne labelIsTrue
}
macro jsned2 labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcmppd xmm0, xmm1, xmm0, $00
vmovmskpd dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsned4 labelIsTrue* {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vcmppd ymm0, ymm1, ymm0, $00
vmovmskpd dsc0, ymm0
_jcmpnev4 labelIsTrue
}
macro jsned8 labelIsTrue* {
vmovdqu64 zmm1, [rsp+$00]
__cltag_z $00
__pop $04
vcmppd msk1, zmm1, zmm0, $00
kmovw dsc0, msk1
_jcmpnev8 labelIsTrue
}
macro jsnef labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcomiss xmm1, xmm0
_setcmpg
jne labelIsTrue
}
macro jsnef2 labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcmpps xmm0, xmm1, xmm0, $00
vmovmskps dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnef4 labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vcmpps xmm0, xmm1, xmm0, $00
vmovmskps dsc0, xmm0
_jcmpnev4 labelIsTrue
}
macro jsnef8 labelIsTrue* {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vcmpps ymm0, ymm1, ymm0, $00
vmovmskps dsc0, ymm0
_jcmpnev8 labelIsTrue
}
macro jsnei labelIsTrue* {
mov dsc1, [rsp+$00]
__pop $01
cmp dsc1, dsc0
jne labelIsTrue
}
macro jsnei2 labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vpcmpeqd xmm0, xmm1, xmm0
vmovmskps dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnei4 labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vpcmpeqd xmm0, xmm1, xmm0
vmovmskps dsc0, xmm0
_jcmpnev4 labelIsTrue
}
macro jsnei8 labelIsTrue* {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vpcmpeqd ymm0, ymm1, ymm0
vmovmskps dsc0, ymm0
_jcmpnev8 labelIsTrue
}
macro jsnel labelIsTrue* {
mov qsc1, [rsp+$00]
__pop $01
cmp qsc1, qsc0
jne labelIsTrue
}
macro jsnel2 labelIsTrue* {
vmovdqa xmm1, [rsp+$00]
__pop $01
vpcmpeqq xmm0, xmm1, xmm0
vmovmskpd dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnel4 labelIsTrue* {
vmovdqu ymm1, [rsp+$00]
__cltag_y $00
__pop $02
vpcmpeqq ymm0, ymm1, ymm0
vmovmskpd dsc0, ymm0
_jcmpnev4 labelIsTrue
}
macro jsnel8 labelIsTrue* {
vmovdqu64 zmm1, [rsp+$00]
__cltag_z $00
__pop $04
vpcmpeqq msk1, zmm1, zmm0
kmovw dsc0, msk1
_jcmpnev8 labelIsTrue
}
; </fold>
; <fold первый операнд — на аккумуляторе, второй операнд — локальная переменная, результат — переход>
macro jsnee_l labelIsTrue*, localvarName* {
fld tbyte [.#localvarName]
fxch
fcomip esc0, esc1
releasee
_setcmpg
jne labelIsTrue
}
macro jsned_l labelIsTrue*, localvarName* {
vcomisd xmm0, [.#localvarName]
_setcmpg
jne labelIsTrue
}
macro jsned2_l labelIsTrue*, localvarName* {
vcmppd xmm0, xmm0, [.#localvarName], $00
vmovmskpd dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsned4_l labelIsTrue*, localvarName* {
vmovdqu ymm1, [.#localvarName]
vcmppd ymm0, ymm0, ymm1, $00
vmovmskpd dsc0, ymm0
_jcmpnev4 labelIsTrue
}
macro jsned8_l labelIsTrue*, localvarName* {
vmovdqu64 zmm1, [.#localvarName]
vcmppd msk1, zmm0, zmm1, $00
kmovw dsc0, msk1
_jcmpnev8 labelIsTrue
}
macro jsnef_l labelIsTrue*, localvarName* {
vcomiss xmm0, [.#localvarName]
_setcmpg
jne labelIsTrue
}
macro jsnef2_l labelIsTrue*, localvarName* {
vcmpps xmm0, xmm0, [.#localvarName], $00
vmovmskps dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnef4_l labelIsTrue*, localvarName* {
vcmpps xmm0, xmm0, [.#localvarName], $00
vmovmskps dsc0, xmm0
_jcmpnev4 labelIsTrue
}
macro jsnef8_l labelIsTrue*, localvarName* {
vmovdqu ymm1, [.#localvarName]
vcmpps ymm0, ymm0, ymm1, $00
vmovmskps dsc0, ymm0
_jcmpnev8 labelIsTrue
}
macro jsnei_l labelIsTrue*, localvarName* {
cmp dsc0, [.#localvarName]
jne labelIsTrue
}
macro jsnei2_l labelIsTrue*, localvarName* {
vpcmpeqd xmm0, xmm0, [.#localvarName]
vmovmskps dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnei4_l labelIsTrue*, localvarName* {
vpcmpeqd xmm0, xmm0, [.#localvarName]
vmovmskps dsc0, xmm0
_jcmpnev4 labelIsTrue
}
macro jsnei8_l labelIsTrue*, localvarName* {
vmovdqu ymm1, [.#localvarName]
vpcmpeqd ymm0, ymm0, ymm1
vmovmskps dsc0, ymm0
_jcmpnev8 labelIsTrue
}
macro jsnel_l labelIsTrue*, localvarName* {
cmp qsc0, [.#localvarName]
jne labelIsTrue
}
macro jsnel2_l labelIsTrue*, localvarName* {
vpcmpeqq xmm0, xmm0, [.#localvarName]
vmovmskpd dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnel4_l labelIsTrue*, localvarName* {
vmovdqu ymm1, [.#localvarName]
vpcmpeqq ymm0, ymm0, ymm1
vmovmskpd dsc0, ymm0
_jcmpnev4 labelIsTrue
}
macro jsnel8_l labelIsTrue*, localvarName* {
vmovdqu64 zmm1, [.#localvarName]
vpcmpeqq msk1, zmm0, zmm1
kmovw dsc0, msk1
_jcmpnev8 labelIsTrue
}
; </fold>
; <fold первый операнд — на аккумуляторе, второй операнд — глобальный член, результат — переход>
macro jsnee_g labelIsTrue*, globalmember* {
fld tbyte globalmember
fxch
fcomip esc0, esc1
releasee
_setcmpg
jne labelIsTrue
}
macro jsned_g labelIsTrue*, globalmember* {
vcomisd xmm0, globalmember
_setcmpg
jne labelIsTrue
}
macro jsned2_g labelIsTrue*, globalmember* {
vcmppd xmm0, xmm0, globalmember, $00
vmovmskpd dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsned4_g labelIsTrue*, globalmember* {
vcmppd ymm0, ymm0, globalmember, $00
vmovmskpd dsc0, ymm0
_jcmpnev4 labelIsTrue
}
macro jsned8_g labelIsTrue*, globalmember* {
vcmppd msk1, zmm0, globalmember, $00
kmovw dsc0, msk1
_jcmpnev8 labelIsTrue
}
macro jsnef_g labelIsTrue*, globalmember* {
vcomiss xmm0, globalmember
_setcmpg
jne labelIsTrue
}
macro jsnef2_g labelIsTrue*, globalmember* {
vcmpps xmm0, xmm0, globalmember, $00
vmovmskps dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnef4_g labelIsTrue*, globalmember* {
vcmpps xmm0, xmm0, globalmember, $00
vmovmskps dsc0, xmm0
_jcmpnev4 labelIsTrue
}
macro jsnef8_g labelIsTrue*, globalmember* {
vcmpps ymm0, ymm0, globalmember, $00
vmovmskps dsc0, ymm0
_jcmpnev8 labelIsTrue
}
macro jsnei_g labelIsTrue*, globalmember* {
cmp dsc0, globalmember
jne labelIsTrue
}
macro jsnei2_g labelIsTrue*, globalmember* {
vpcmpeqd xmm0, xmm0, globalmember
vmovmskps dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnei4_g labelIsTrue*, globalmember* {
vpcmpeqd xmm0, xmm0, globalmember
vmovmskps dsc0, xmm0
_jcmpnev4 labelIsTrue
}
macro jsnei8_g labelIsTrue*, globalmember* {
vpcmpeqd ymm0, ymm0, globalmember
vmovmskps dsc0, ymm0
_jcmpnev8 labelIsTrue
}
macro jsnel_g labelIsTrue*, globalmember* {
cmp qsc0, globalmember
jne labelIsTrue
}
macro jsnel2_g labelIsTrue*, globalmember* {
vpcmpeqq xmm0, xmm0, globalmember
vmovmskpd dsc0, xmm0
_jcmpnev2 labelIsTrue
}
macro jsnel4_g labelIsTrue*, globalmember* {
vpcmpeqq ymm0, ymm0, globalmember
vmovmskpd dsc0, ymm0
_jcmpnev4 labelIsTrue
}
macro jsnel8_g labelIsTrue*, globalmember* {
vpcmpeqq msk1, zmm0, globalmember
kmovw dsc0, msk1
_jcmpnev8 labelIsTrue
}
; </fold>
; </fold>