;ÂÐÅÌÅÍÍÛÅ ÌÀÊÐÎÑÛ ÂÛÑÎÊÎÓÐÎÂÍÅÂÎÃÎ ÑÈÍÒÀÊÑÈÑÀ
;Â ÍÎÂÛÕ ÂÅÐÑÈßÕ ml64 ÎÍÈ ÂÎÇÌÎÆÍÎ ÁÓÄÓÒ ÂÑÒÐÎÅÍÍÛ 
;ÎÏÖÈß DOTNAME - ÍÅÎÁÕÎÄÈÌÀ
;	vasil211@yandex.ru
comment * Comparison run-time operators

     Operator      Meaning
 
     ==            Equal
     {}            Not equal
     }             Greater than
     }=            Greater than or equal to
     {             Less than
     {=            Less than or equal to
     &             Bit test (format: expression & bitnumber)
     ~             Logical NOT
     |	         Bit test
     &&            Logical AND

     ||            Logical OR
 
     CARRY?        Carry bit set
     OVERFLOW?     Overflow bit set
     PARITY?       Parity bit set
     SIGN?         Sign bit set
     ZERO?         Zero bit set
     CARRY?|ZERO?	ìåíüíå èëè ðàâíî
     ~(CARRY?|ZERO?)	áîëüøå
     äëÿ ñðàâíåíèÿ ÷èñåë ñî çíàêîì
     ~ZERO?&(SIGN?==OVERFLOW?)	áîëüøå(greate than)
     SIGN?==OVERFLOW?		áîëüøå èëè ðàâíî(greate than or equal)
     SIGN?{}OVERFLOW?		ìåíüøå(less than)
     ZERO?|(SIGN?{}OVERFLOW?)		ìåíüøå èëè ðàâíî(less than or equal)
*
ld macro ld_arg1,ld_arg2
	movst ld_arg1,ld_arg2
	EXITM<ld_arg1>
endm
lda macro ld_arg1
	movReg64Arg rax,ld_arg1
	EXITM<rax>
endm
ldea macro ld_arg1
	movReg32Arg eax,ld_arg1
	EXITM<eax>
endm
ldc macro ld_arg1
	movReg64Arg rcx,ld_arg1
	EXITM<rcx>
endm
ldd macro ld_arg1
	movReg64Arg rdx,ld_arg1
	EXITM<rdx>
endm
IMM_EXPR	equ 100b
MEM_EXPR	equ 10b
REG_EXPR	equ 10000b
LABEL_EXPR	equ 1b
VALID_REF	equ 100000b
DIRECT_ADDR	equ 1000b
VIMM_EXPR	equ (VALID_REF OR IMM_EXPR)
TAB_CHAR		equ 9
SPACE_CHAR		equ 20h
CR_CHAR			equ 13
LF_CHAR			equ 10
COMMA_CHAR		equ 2Ch
COLON_CHAR		equ 3Ah
SEMICOLON_CHAR	equ 3Bh
LEFT_PARENTHESES	equ 28h
RIGHT_PARENTHESES	equ 29h
EXCLAMATION_MARK	equ 21h
LEFT_ANGLE	equ 3Ch
RIGHT_ANGLE	equ 3Eh
LEFT_SLASH	equ 5Ch	;\
RIGHT_SLASH	equ 2Fh	;/
NOT_A_REG64	equ 16
NOT_A_REG32	equ 16
NOT_A_REG16	equ 16
NOT_A_REG8	equ 16
NOT_A_REG	equ 16
LOWER_MASK	equ 20202020h
SHORT_LOW	equ 2020h
LOW_CHAR	equ 20h
LT_CHAR	equ 3Ch
GT_CHAR	equ 3Eh
IFNDEF retn
retn MACRO stackBytes
	IFIDN <stackBytes>,<>
		db 0C3h
	ELSE
		db 0C2h
		dw stackBytes
	ENDIF
ENDM
retnw MACRO stackBytes
	db 66h
	retn stackBytes
ENDM
enterw MACRO toStackRes,lvlEmb
	dw 0C866h,toStackRes
	db lvlEmb
ENDM
leavew MACRO
	dw 0C966h
ENDM
ENDIF
TotalIfs = 0
TotalRept = 0
TotalWhile = 0
UntilConds0 TEXTEQU <>
UntilConds1 TEXTEQU <>
UntilConds2 TEXTEQU <>
UntilConds3 TEXTEQU <>
UntilConds4 TEXTEQU <>
UntilConds5 TEXTEQU <>
UntilConds6 TEXTEQU <>
UntilConds7 TEXTEQU <>
UntilConds8 TEXTEQU <>
UntilConds9 TEXTEQU <>
UntilConds10 TEXTEQU <>
UntilConds11 TEXTEQU <>
UntilConds12 TEXTEQU <>
UntilConds13 TEXTEQU <>
UntilConds14 TEXTEQU <>
UntilConds15 TEXTEQU <>
UntilConds16 TEXTEQU <>
UntilConds17 TEXTEQU <>
UntilConds18 TEXTEQU <>
UntilConds19 TEXTEQU <>
LastUntilConds TEXTEQU <>
SaveUntilCondsLabel MACRO
	IFIDN UntilConds0,<>
		UntilConds0 CATSTR <locconds0_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds0
	ELSEIFIDN UntilConds1,<> 
		UntilConds1 CATSTR <locconds1_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds1
	ELSEIFIDN UntilConds2,<>
		UntilConds2 CATSTR <locconds2_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds2
	ELSEIFIDN UntilConds3,<>
		UntilConds3 CATSTR <locconds3_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds3
	ELSEIFIDN UntilConds4,<>
		UntilConds4 CATSTR <locconds4_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds4
	ELSEIFIDN UntilConds5,<>
		UntilConds5 CATSTR <locconds5_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds5
	ELSEIFIDN UntilConds6,<>
		UntilConds6 CATSTR <locconds6_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds6
	ELSEIFIDN UntilConds7,<>
		UntilConds7 CATSTR <locconds7_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds7
	ELSEIFIDN UntilConds8,<>
		UntilConds8 CATSTR <locconds8_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds8
	ELSEIFIDN UntilConds9,<>
		UntilConds9 CATSTR <locconds9_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds9
	ELSEIFIDN UntilConds10,<>
		UntilConds10 CATSTR <locconds10_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds10
	ELSEIFIDN UntilConds11,<>
		UntilConds11 CATSTR <locconds11_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds11
	ELSEIFIDN UntilConds12,<>
		UntilConds12 CATSTR <locconds12_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds12
	ELSEIFIDN UntilConds13,<>
		UntilConds13 CATSTR <locconds13_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds13
	ELSEIFIDN UntilConds14,<>
		UntilConds14 CATSTR <locconds14_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds14
	ELSEIFIDN UntilConds15,<>
		UntilConds15 CATSTR <locconds15_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds15
	ELSEIFIDN UntilConds16,<>
		UntilConds16 CATSTR <locconds16_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds16
	ELSEIFIDN UntilConds17,<>
		UntilConds17 CATSTR <locconds17_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds17
	ELSEIFIDN UntilConds18,<>
		UntilConds18 CATSTR <locconds18_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds18
	ELSEIFIDN UntilConds19,<>
		UntilConds19 CATSTR <locconds19_>,@CatStr(%TotalWhile)
		LastUntilConds TEXTEQU UntilConds19
	ELSE
		.err <Too much nesting level.>
	ENDIF
	TotalWhile = TotalWhile+1
ENDM
GetUntilCondsLabel MACRO
	IFDIF UntilConds19,<>
		LastUntilConds TEXTEQU UntilConds19
	ELSEIFDIF UntilConds18,<>
		LastUntilConds TEXTEQU UntilConds18
	ELSEIFDIF UntilConds17,<>
		LastUntilConds TEXTEQU UntilConds17
	ELSEIFDIF UntilConds16,<>
		LastUntilConds TEXTEQU UntilConds16
	ELSEIFDIF UntilConds15,<>
		LastUntilConds TEXTEQU UntilConds15
	ELSEIFDIF UntilConds14,<>
		LastUntilConds TEXTEQU UntilConds14
	ELSEIFDIF UntilConds13,<>
		LastUntilConds TEXTEQU UntilConds13	
	ELSEIFDIF UntilConds12,<>
		LastUntilConds TEXTEQU UntilConds12
	ELSEIFDIF UntilConds11,<>
		LastUntilConds TEXTEQU UntilConds11	
	ELSEIFDIF UntilConds10,<>
		LastUntilConds TEXTEQU UntilConds10
	ELSEIFDIF UntilConds9,<>
		LastUntilConds TEXTEQU UntilConds9
	ELSEIFDIF UntilConds8,<>
		LastUntilConds TEXTEQU UntilConds8
	ELSEIFDIF UntilConds7,<>
		LastUntilConds TEXTEQU UntilConds7
	ELSEIFDIF UntilConds6,<>
		LastUntilConds TEXTEQU UntilConds6
	ELSEIFDIF UntilConds5,<>
		LastUntilConds TEXTEQU UntilConds5
	ELSEIFDIF UntilConds4,<>
		LastUntilConds TEXTEQU UntilConds4
	ELSEIFDIF UntilConds3,<>
		LastUntilConds TEXTEQU UntilConds3	
	ELSEIFDIF UntilConds2,<>
		LastUntilConds TEXTEQU UntilConds2
	ELSEIFDIF UntilConds1,<>
		LastUntilConds TEXTEQU UntilConds1	
	ELSEIFDIF UntilConds0,<>
		LastUntilConds TEXTEQU UntilConds0
	ELSE
		LastUntilConds TEXTEQU <>
	ENDIF		
ENDM
DelUntilCondsLabel MACRO
	IFDIF UntilConds19,<>
		UntilConds19 TEXTEQU <>
	ELSEIFDIF UntilConds18,<>
		UntilConds18 TEXTEQU <>
	ELSEIFDIF UntilConds17,<>
		UntilConds17 TEXTEQU <>
	ELSEIFDIF UntilConds16,<>
		UntilConds16 TEXTEQU <>
	ELSEIFDIF UntilConds15,<>
		UntilConds15 TEXTEQU <>
	ELSEIFDIF UntilConds14,<>
		UntilConds14 TEXTEQU <>
	ELSEIFDIF UntilConds13,<>
		UntilConds13 TEXTEQU <>	
	ELSEIFDIF UntilConds12,<>
		UntilConds12 TEXTEQU <>
	ELSEIFDIF UntilConds11,<>
		UntilConds11 TEXTEQU <>	
	ELSEIFDIF UntilConds10,<>
		UntilConds10 TEXTEQU <>
	ELSEIFDIF UntilConds9,<>
		UntilConds9 TEXTEQU <>
	ELSEIFDIF UntilConds8,<>
		UntilConds8 TEXTEQU <>
	ELSEIFDIF UntilConds7,<>
		UntilConds7 TEXTEQU <>
	ELSEIFDIF UntilConds6,<>
		UntilConds6 TEXTEQU <>
	ELSEIFDIF UntilConds5,<>
		UntilConds5 TEXTEQU <>
	ELSEIFDIF UntilConds4,<>
		UntilConds4 TEXTEQU <>
	ELSEIFDIF UntilConds3,<>
		UntilConds3 TEXTEQU <>	
	ELSEIFDIF UntilConds2,<>
		UntilConds2 TEXTEQU <>
	ELSEIFDIF UntilConds1,<>
		UntilConds1 TEXTEQU <>	
	ELSEIFDIF UntilConds0,<>
		UntilConds0 TEXTEQU <>
	ENDIF
ENDM
UntilLevel0 TEXTEQU <>
UntilLevel1 TEXTEQU <>
UntilLevel2 TEXTEQU <>
UntilLevel3 TEXTEQU <>
UntilLevel4 TEXTEQU <>
UntilLevel5 TEXTEQU <>
UntilLevel6 TEXTEQU <>
UntilLevel7 TEXTEQU <>
UntilLevel8 TEXTEQU <>
UntilLevel9 TEXTEQU <>
UntilLevel10 TEXTEQU <>
UntilLevel11 TEXTEQU <>
UntilLevel12 TEXTEQU <>
UntilLevel13 TEXTEQU <>
UntilLevel14 TEXTEQU <>
UntilLevel15 TEXTEQU <>
UntilLevel16 TEXTEQU <>
UntilLevel17 TEXTEQU <>
UntilLevel18 TEXTEQU <>
UntilLevel19 TEXTEQU <>
LastUntilLabel TEXTEQU <>
SaveUntilLabel MACRO
	IFIDN UntilLevel0,<>
		UntilLevel0 CATSTR <locuntil0_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel0
	ELSEIFIDN UntilLevel1,<> 
		UntilLevel1 CATSTR <locuntil1_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel1
	ELSEIFIDN UntilLevel2,<> 
		UntilLevel2 CATSTR <locuntil2_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel2
	ELSEIFIDN UntilLevel3,<> 
		UntilLevel3 CATSTR <locuntil3_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel3
	ELSEIFIDN UntilLevel4,<> 
		UntilLevel4 CATSTR <locuntil4_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel4
	ELSEIFIDN UntilLevel5,<> 
		UntilLevel5 CATSTR <locuntil5_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel5
	ELSEIFIDN UntilLevel6,<> 
		UntilLevel6 CATSTR <locuntil6_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel6
	ELSEIFIDN UntilLevel7,<> 
		UntilLevel7 CATSTR <locuntil7_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel7
	ELSEIFIDN UntilLevel8,<> 
		UntilLevel8 CATSTR <locuntil8_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel8
	ELSEIFIDN UntilLevel9,<> 
		UntilLevel9 CATSTR <locuntil9_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel9
	ELSEIFIDN UntilLevel10,<>
		UntilLevel10 CATSTR <locuntil10_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel10
	ELSEIFIDN UntilLevel11,<> 
		UntilLevel11 CATSTR <locuntil11_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel11
	ELSEIFIDN UntilLevel12,<> 
		UntilLevel12 CATSTR <locuntil12_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel12
	ELSEIFIDN UntilLevel13,<> 
		UntilLevel13 CATSTR <locuntil13_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel13
	ELSEIFIDN UntilLevel14,<> 
		UntilLevel14 CATSTR <locuntil14_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel14
	ELSEIFIDN UntilLevel15,<> 
		UntilLevel15 CATSTR <locuntil15_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel15
	ELSEIFIDN UntilLevel16,<> 
		UntilLevel16 CATSTR <locuntil16_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel16
	ELSEIFIDN UntilLevel17,<> 
		UntilLevel17 CATSTR <locuntil17_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel17
	ELSEIFIDN UntilLevel18,<> 
		UntilLevel18 CATSTR <locuntil18_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel18
	ELSEIFIDN UntilLevel19,<> 
		UntilLevel19 CATSTR <locuntil19_>,@CatStr(%TotalRept)
		LastUntilLabel TEXTEQU UntilLevel19
	ELSE
		.err <Too much nesting level.>
	ENDIF
	TotalRept = TotalRept+1
ENDM
GetUntilLabel MACRO
	IFDIF UntilLevel19,<>
		LastUntilLabel TEXTEQU UntilLevel19
	ELSEIFDIF UntilLevel18,<>
		LastUntilLabel TEXTEQU UntilLevel18
	ELSEIFDIF UntilLevel17,<>
		LastUntilLabel TEXTEQU UntilLevel17
	ELSEIFDIF UntilLevel16,<>
		LastUntilLabel TEXTEQU UntilLevel16
	ELSEIFDIF UntilLevel15,<>
		LastUntilLabel TEXTEQU UntilLevel15
	ELSEIFDIF UntilLevel14,<>
		LastUntilLabel TEXTEQU UntilLevel14
	ELSEIFDIF UntilLevel13,<>
		LastUntilLabel TEXTEQU UntilLevel13	
	ELSEIFDIF UntilLevel12,<>
		LastUntilLabel TEXTEQU UntilLevel12
	ELSEIFDIF UntilLevel11,<>
		LastUntilLabel TEXTEQU UntilLevel11	
	ELSEIFDIF UntilLevel10,<>
		LastUntilLabel TEXTEQU UntilLevel10
	ELSEIFDIF UntilLevel9,<>
		LastUntilLabel TEXTEQU UntilLevel9
	ELSEIFDIF UntilLevel8,<>
		LastUntilLabel TEXTEQU UntilLevel8
	ELSEIFDIF UntilLevel7,<>
		LastUntilLabel TEXTEQU UntilLevel7
	ELSEIFDIF UntilLevel6,<>
		LastUntilLabel TEXTEQU UntilLevel6
	ELSEIFDIF UntilLevel5,<>
		LastUntilLabel TEXTEQU UntilLevel5
	ELSEIFDIF UntilLevel4,<>
		LastUntilLabel TEXTEQU UntilLevel4
	ELSEIFDIF UntilLevel3,<>
		LastUntilLabel TEXTEQU UntilLevel3	
	ELSEIFDIF UntilLevel2,<>
		LastUntilLabel TEXTEQU UntilLevel2
	ELSEIFDIF UntilLevel1,<>
		LastUntilLabel TEXTEQU UntilLevel1	
	ELSEIFDIF UntilLevel0,<>
		LastUntilLabel TEXTEQU UntilLevel0
	ELSE
		LastUntilLabel TEXTEQU <>
	ENDIF		
ENDM
DelUntilLabel MACRO
	IFDIF UntilLevel19,<>
		UntilLevel19 TEXTEQU <>
	ELSEIFDIF UntilLevel18,<>
		UntilLevel18 TEXTEQU <>
	ELSEIFDIF UntilLevel17,<>
		UntilLevel17 TEXTEQU <>
	ELSEIFDIF UntilLevel16,<>
		UntilLevel16 TEXTEQU <>
	ELSEIFDIF UntilLevel15,<>
		UntilLevel15 TEXTEQU <>
	ELSEIFDIF UntilLevel14,<>
		UntilLevel14 TEXTEQU <>
	ELSEIFDIF UntilLevel13,<>
		UntilLevel13 TEXTEQU <>	
	ELSEIFDIF UntilLevel12,<>
		UntilLevel12 TEXTEQU <>
	ELSEIFDIF UntilLevel11,<>
		UntilLevel11 TEXTEQU <>	
	ELSEIFDIF UntilLevel10,<>
		UntilLevel10 TEXTEQU <>
	ELSEIFDIF UntilLevel9,<>
		UntilLevel9 TEXTEQU <>
	ELSEIFDIF UntilLevel8,<>
		UntilLevel8 TEXTEQU <>
	ELSEIFDIF UntilLevel7,<>
		UntilLevel7 TEXTEQU <>
	ELSEIFDIF UntilLevel6,<>
		UntilLevel6 TEXTEQU <>
	ELSEIFDIF UntilLevel5,<>
		UntilLevel5 TEXTEQU <>
	ELSEIFDIF UntilLevel4,<>
		UntilLevel4 TEXTEQU <>
	ELSEIFDIF UntilLevel3,<>
		UntilLevel3 TEXTEQU <>	
	ELSEIFDIF UntilLevel2,<>
		UntilLevel2 TEXTEQU <>
	ELSEIFDIF UntilLevel1,<>
		UntilLevel1 TEXTEQU <>	
	ELSEIFDIF UntilLevel0,<>
		UntilLevel0 TEXTEQU <>
	ENDIF
ENDM
TotalRept = 0
UntilOut0 TEXTEQU <>
UntilOut1 TEXTEQU <>
UntilOut2 TEXTEQU <>
UntilOut3 TEXTEQU <>
UntilOut4 TEXTEQU <>
UntilOut5 TEXTEQU <>
UntilOut6 TEXTEQU <>
UntilOut7 TEXTEQU <>
UntilOut8 TEXTEQU <>
UntilOut9 TEXTEQU <>
UntilOut10 TEXTEQU <>
UntilOut11 TEXTEQU <>
UntilOut12 TEXTEQU <>
UntilOut13 TEXTEQU <>
UntilOut14 TEXTEQU <>
UntilOut15 TEXTEQU <>
UntilOut16 TEXTEQU <>
UntilOut17 TEXTEQU <>
UntilOut18 TEXTEQU <>
UntilOut19 TEXTEQU <>
LastUntilOutLabel TEXTEQU <>
SaveUntilOutLabel MACRO
	IFIDN UntilOut0,<>
		UntilOut0 CATSTR <locuntilout0_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut0
	ELSEIFIDN UntilOut1,<> 
		UntilOut1 CATSTR <locuntilout1_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut1
	ELSEIFIDN UntilOut2,<> 
		UntilOut2 CATSTR <locuntilout2_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut2
	ELSEIFIDN UntilOut3,<> 
		UntilOut3 CATSTR <locuntilout3_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut3
	ELSEIFIDN UntilOut4,<> 
		UntilOut4 CATSTR <locuntilout4_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut4
	ELSEIFIDN UntilOut5,<> 
		UntilOut5 CATSTR <locuntilout5_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut5
	ELSEIFIDN UntilOut6,<> 
		UntilOut6 CATSTR <locuntilout6_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut6
	ELSEIFIDN UntilOut7,<> 
		UntilOut7 CATSTR <locuntilout7_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut7
	ELSEIFIDN UntilOut8,<> 
		UntilOut8 CATSTR <locuntilout8_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut8
	ELSEIFIDN UntilOut9,<> 
		UntilOut9 CATSTR <locuntilout9_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut9
	ELSEIFIDN UntilOut10,<>
		UntilOut10 CATSTR <locuntilout10_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut10
	ELSEIFIDN UntilOut11,<> 
		UntilOut11 CATSTR <locuntilout11_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut11
	ELSEIFIDN UntilOut12,<> 
		UntilOut12 CATSTR <locuntilout12_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut12
	ELSEIFIDN UntilOut13,<> 
		UntilOut13 CATSTR <locuntilout13_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut13
	ELSEIFIDN UntilOut14,<> 
		UntilOut14 CATSTR <locuntilout14_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut14
	ELSEIFIDN UntilOut15,<> 
		UntilOut15 CATSTR <locuntilout15_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut15
	ELSEIFIDN UntilOut16,<> 
		UntilOut16 CATSTR <locuntilout16_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut16
	ELSEIFIDN UntilOut17,<> 
		UntilOut17 CATSTR <locuntilout17_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut17
	ELSEIFIDN UntilOut18,<> 
		UntilOut18 CATSTR <locuntilout18_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut18
	ELSEIFIDN UntilOut19,<> 
		UntilOut19 CATSTR <locuntilout19_>,@CatStr(%TotalRept)
		LastUntilOutLabel TEXTEQU UntilOut19
	ELSE
		.err <Too much nesting level.>
	ENDIF
ENDM
GetUntilOutLabel MACRO
	IFDIF UntilOut19,<>
		LastUntilOutLabel TEXTEQU UntilOut19
	ELSEIFDIF UntilOut18,<>
		LastUntilOutLabel TEXTEQU UntilOut18
	ELSEIFDIF UntilOut17,<>
		LastUntilOutLabel TEXTEQU UntilOut17
	ELSEIFDIF UntilOut16,<>
		LastUntilOutLabel TEXTEQU UntilOut16
	ELSEIFDIF UntilOut15,<>
		LastUntilOutLabel TEXTEQU UntilOut15
	ELSEIFDIF UntilOut14,<>
		LastUntilOutLabel TEXTEQU UntilOut14
	ELSEIFDIF UntilOut13,<>
		LastUntilOutLabel TEXTEQU UntilOut13	
	ELSEIFDIF UntilOut12,<>
		LastUntilOutLabel TEXTEQU UntilOut12
	ELSEIFDIF UntilOut11,<>
		LastUntilOutLabel TEXTEQU UntilOut11	
	ELSEIFDIF UntilOut10,<>
		LastUntilOutLabel TEXTEQU UntilOut10
	ELSEIFDIF UntilOut9,<>
		LastUntilOutLabel TEXTEQU UntilOut9
	ELSEIFDIF UntilOut8,<>
		LastUntilOutLabel TEXTEQU UntilOut8
	ELSEIFDIF UntilOut7,<>
		LastUntilOutLabel TEXTEQU UntilOut7
	ELSEIFDIF UntilOut6,<>
		LastUntilOutLabel TEXTEQU UntilOut6
	ELSEIFDIF UntilOut5,<>
		LastUntilOutLabel TEXTEQU UntilOut5
	ELSEIFDIF UntilOut4,<>
		LastUntilOutLabel TEXTEQU UntilOut4
	ELSEIFDIF UntilOut3,<>
		LastUntilOutLabel TEXTEQU UntilOut3	
	ELSEIFDIF UntilOut2,<>
		LastUntilOutLabel TEXTEQU UntilOut2
	ELSEIFDIF UntilOut1,<>
		LastUntilOutLabel TEXTEQU UntilOut1	
	ELSEIFDIF UntilOut0,<>
		LastUntilOutLabel TEXTEQU UntilOut0
	ELSE
		LastUntilOutLabel TEXTEQU <>
	ENDIF		
ENDM
DelUntilOutLabel MACRO
	IFDIF UntilOut19,<>
		UntilOut19 TEXTEQU <>
	ELSEIFDIF UntilOut18,<>
		UntilOut18 TEXTEQU <>
	ELSEIFDIF UntilOut17,<>
		UntilOut17 TEXTEQU <>
	ELSEIFDIF UntilOut16,<>
		UntilOut16 TEXTEQU <>
	ELSEIFDIF UntilOut15,<>
		UntilOut15 TEXTEQU <>
	ELSEIFDIF UntilOut14,<>
		UntilOut14 TEXTEQU <>
	ELSEIFDIF UntilOut13,<>
		UntilOut13 TEXTEQU <>	
	ELSEIFDIF UntilOut12,<>
		UntilOut12 TEXTEQU <>
	ELSEIFDIF UntilOut11,<>
		UntilOut11 TEXTEQU <>	
	ELSEIFDIF UntilOut10,<>
		UntilOut10 TEXTEQU <>
	ELSEIFDIF UntilOut9,<>
		UntilOut9 TEXTEQU <>
	ELSEIFDIF UntilOut8,<>
		UntilOut8 TEXTEQU <>
	ELSEIFDIF UntilOut7,<>
		UntilOut7 TEXTEQU <>
	ELSEIFDIF UntilOut6,<>
		UntilOut6 TEXTEQU <>
	ELSEIFDIF UntilOut5,<>
		UntilOut5 TEXTEQU <>
	ELSEIFDIF UntilOut4,<>
		UntilOut4 TEXTEQU <>
	ELSEIFDIF UntilOut3,<>
		UntilOut3 TEXTEQU <>	
	ELSEIFDIF UntilOut2,<>
		UntilOut2 TEXTEQU <>
	ELSEIFDIF UntilOut1,<>
		UntilOut1 TEXTEQU <>	
	ELSEIFDIF UntilOut0,<>
		UntilOut0 TEXTEQU <>
	ENDIF
ENDM
OutLevel0 TEXTEQU <>
OutLevel1 TEXTEQU <>
OutLevel2 TEXTEQU <>
OutLevel3 TEXTEQU <>
OutLevel4 TEXTEQU <>
OutLevel5 TEXTEQU <>
OutLevel6 TEXTEQU <>
OutLevel7 TEXTEQU <>
OutLevel8 TEXTEQU <>
OutLevel9 TEXTEQU <>
OutLevel10 TEXTEQU <>
OutLevel11 TEXTEQU <>
OutLevel12 TEXTEQU <>
OutLevel13 TEXTEQU <>
OutLevel14 TEXTEQU <>
OutLevel15 TEXTEQU <>
OutLevel16 TEXTEQU <>
OutLevel17 TEXTEQU <>
OutLevel18 TEXTEQU <>
OutLevel19 TEXTEQU <>
LastOutLabel TEXTEQU <>
SaveOutLabel MACRO
	IFIDN OutLevel0,<>
		OutLevel0 CATSTR <locout0_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel1,<> 
		OutLevel1 CATSTR <locout1_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel2,<> 
		OutLevel2 CATSTR <locout2_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel3,<> 
		OutLevel3 CATSTR <locout3_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel4,<> 
		OutLevel4 CATSTR <locout4_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel5,<> 
		OutLevel5 CATSTR <locout5_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel6,<> 
		OutLevel6 CATSTR <locout6_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel7,<> 
		OutLevel7 CATSTR <locout7_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel8,<> 
		OutLevel8 CATSTR <locout8_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel9,<> 
		OutLevel9 CATSTR <locout9_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel10,<>
		OutLevel10 CATSTR <locout10_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel11,<> 
		OutLevel11 CATSTR <locout11_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel12,<> 
		OutLevel12 CATSTR <locout12_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel13,<> 
		OutLevel13 CATSTR <locout13_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel14,<> 
		OutLevel14 CATSTR <locout14_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel15,<> 
		OutLevel15 CATSTR <locout15_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel16,<> 
		OutLevel16 CATSTR <locout16_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel17,<> 
		OutLevel17 CATSTR <locout17_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel18,<> 
		OutLevel18 CATSTR <locout18_>,@CatStr(%TotalIfs)
	ELSEIFIDN OutLevel19,<> 
		OutLevel19 CATSTR <locout19_>,@CatStr(%TotalIfs)
	ELSE
		.err <Too much nesting level.>
	ENDIF
ENDM
GetOutLabel MACRO
	IFDIF OutLevel19,<>
		LastOutLabel TEXTEQU OutLevel19
	ELSEIFDIF OutLevel18,<>
		LastOutLabel TEXTEQU OutLevel18
	ELSEIFDIF OutLevel17,<>
		LastOutLabel TEXTEQU OutLevel17
	ELSEIFDIF OutLevel16,<>
		LastOutLabel TEXTEQU OutLevel16
	ELSEIFDIF OutLevel15,<>
		LastOutLabel TEXTEQU OutLevel15
	ELSEIFDIF OutLevel14,<>
		LastOutLabel TEXTEQU OutLevel14
	ELSEIFDIF OutLevel13,<>
		LastOutLabel TEXTEQU OutLevel13	
	ELSEIFDIF OutLevel12,<>
		LastOutLabel TEXTEQU OutLevel12
	ELSEIFDIF OutLevel11,<>
		LastOutLabel TEXTEQU OutLevel11	
	ELSEIFDIF OutLevel10,<>
		LastOutLabel TEXTEQU OutLevel10
	ELSEIFDIF OutLevel9,<>
		LastOutLabel TEXTEQU OutLevel9
	ELSEIFDIF OutLevel8,<>
		LastOutLabel TEXTEQU OutLevel8
	ELSEIFDIF OutLevel7,<>
		LastOutLabel TEXTEQU OutLevel7
	ELSEIFDIF OutLevel6,<>
		LastOutLabel TEXTEQU OutLevel6
	ELSEIFDIF OutLevel5,<>
		LastOutLabel TEXTEQU OutLevel5
	ELSEIFDIF OutLevel4,<>
		LastOutLabel TEXTEQU OutLevel4
	ELSEIFDIF OutLevel3,<>
		LastOutLabel TEXTEQU OutLevel3	
	ELSEIFDIF OutLevel2,<>
		LastOutLabel TEXTEQU OutLevel2
	ELSEIFDIF OutLevel1,<>
		LastOutLabel TEXTEQU OutLevel1	
	ELSEIFDIF OutLevel0,<>
		LastOutLabel TEXTEQU OutLevel0
	ELSE
		LastOutLabel TEXTEQU <>
	ENDIF		
ENDM
DelOutLabel MACRO
	IFDIF OutLevel19,<>
		OutLevel19 TEXTEQU <>
	ELSEIFDIF OutLevel18,<>
		OutLevel18 TEXTEQU <>
	ELSEIFDIF OutLevel17,<>
		OutLevel17 TEXTEQU <>
	ELSEIFDIF OutLevel16,<>
		OutLevel16 TEXTEQU <>
	ELSEIFDIF OutLevel15,<>
		OutLevel15 TEXTEQU <>
	ELSEIFDIF OutLevel14,<>
		OutLevel14 TEXTEQU <>
	ELSEIFDIF OutLevel13,<>
		OutLevel13 TEXTEQU <>	
	ELSEIFDIF OutLevel12,<>
		OutLevel12 TEXTEQU <>
	ELSEIFDIF OutLevel11,<>
		OutLevel11 TEXTEQU <>	
	ELSEIFDIF OutLevel10,<>
		OutLevel10 TEXTEQU <>
	ELSEIFDIF OutLevel9,<>
		OutLevel9 TEXTEQU <>
	ELSEIFDIF OutLevel8,<>
		OutLevel8 TEXTEQU <>
	ELSEIFDIF OutLevel7,<>
		OutLevel7 TEXTEQU <>
	ELSEIFDIF OutLevel6,<>
		OutLevel6 TEXTEQU <>
	ELSEIFDIF OutLevel5,<>
		OutLevel5 TEXTEQU <>
	ELSEIFDIF OutLevel4,<>
		OutLevel4 TEXTEQU <>
	ELSEIFDIF OutLevel3,<>
		OutLevel3 TEXTEQU <>	
	ELSEIFDIF OutLevel2,<>
		OutLevel2 TEXTEQU <>
	ELSEIFDIF OutLevel1,<>
		OutLevel1 TEXTEQU <>	
	ELSEIFDIF OutLevel0,<>
		OutLevel0 TEXTEQU <>
	ENDIF
ENDM
IfLevel0 TEXTEQU <>
IfLevel1 TEXTEQU <>
IfLevel2 TEXTEQU <>
IfLevel3 TEXTEQU <>
IfLevel4 TEXTEQU <>
IfLevel5 TEXTEQU <>
IfLevel6 TEXTEQU <>
IfLevel7 TEXTEQU <>
IfLevel8 TEXTEQU <>
IfLevel9 TEXTEQU <>
IfLevel10 TEXTEQU <>
IfLevel11 TEXTEQU <>
IfLevel12 TEXTEQU <>
IfLevel13 TEXTEQU <>
IfLevel14 TEXTEQU <>
IfLevel15 TEXTEQU <>
IfLevel16 TEXTEQU <>
IfLevel17 TEXTEQU <>
IfLevel18 TEXTEQU <>
IfLevel19 TEXTEQU <>
LastDefLabel TEXTEQU <>
SaveCurrentLabel MACRO
	IFIDN IfLevel0,<>
		IfLevel0 CATSTR <locif0_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel0
	ELSEIFIDN IfLevel1,<> 
		IfLevel1 CATSTR <locif1_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel1
	ELSEIFIDN IfLevel2,<> 
		IfLevel2 CATSTR <locif2_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel2
	ELSEIFIDN IfLevel3,<> 
		IfLevel3 CATSTR <locif3_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel3
	ELSEIFIDN IfLevel4,<> 
		IfLevel4 CATSTR <locif4_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel4
	ELSEIFIDN IfLevel5,<> 
		IfLevel5 CATSTR <locif5_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel5
	ELSEIFIDN IfLevel6,<> 
		IfLevel6 CATSTR <locif6_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel6
	ELSEIFIDN IfLevel7,<> 
		IfLevel7 CATSTR <locif7_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel7
	ELSEIFIDN IfLevel8,<> 
		IfLevel8 CATSTR <locif8_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel8
	ELSEIFIDN IfLevel9,<> 
		IfLevel9 CATSTR <locif9_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel9
	ELSEIFIDN IfLevel10,<>
		IfLevel10 CATSTR <locif10_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel10
	ELSEIFIDN IfLevel11,<> 
		IfLevel11 CATSTR <locif11_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel11
	ELSEIFIDN IfLevel12,<> 
		IfLevel12 CATSTR <locif12_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel12
	ELSEIFIDN IfLevel13,<> 
		IfLevel13 CATSTR <locif13_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel13
	ELSEIFIDN IfLevel14,<> 
		IfLevel14 CATSTR <locif14_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel14
	ELSEIFIDN IfLevel15,<> 
		IfLevel15 CATSTR <locif15_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel15
	ELSEIFIDN IfLevel16,<> 
		IfLevel16 CATSTR <locif16_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel16
	ELSEIFIDN IfLevel17,<> 
		IfLevel17 CATSTR <locif17_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel17
	ELSEIFIDN IfLevel18,<> 
		IfLevel18 CATSTR <locif18_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel18
	ELSEIFIDN IfLevel19,<> 
		IfLevel19 CATSTR <locif19_>,@CatStr(%TotalIfs)
		LastDefLabel TEXTEQU IfLevel19
	ELSE
		.err <Too much nesting level.>
	ENDIF
	TotalIfs = TotalIfs+1
ENDM
GetCurrentLabel MACRO
	IFDIF IfLevel19,<>
		LastDefLabel TEXTEQU IfLevel19
	ELSEIFDIF IfLevel18,<>
		LastDefLabel TEXTEQU IfLevel18
	ELSEIFDIF IfLevel17,<>
		LastDefLabel TEXTEQU IfLevel17
	ELSEIFDIF IfLevel16,<>
		LastDefLabel TEXTEQU IfLevel16
	ELSEIFDIF IfLevel15,<>
		LastDefLabel TEXTEQU IfLevel15
	ELSEIFDIF IfLevel14,<>
		LastDefLabel TEXTEQU IfLevel14
	ELSEIFDIF IfLevel13,<>
		LastDefLabel TEXTEQU IfLevel13	
	ELSEIFDIF IfLevel12,<>
		LastDefLabel TEXTEQU IfLevel12
	ELSEIFDIF IfLevel11,<>
		LastDefLabel TEXTEQU IfLevel11	
	ELSEIFDIF IfLevel10,<>
		LastDefLabel TEXTEQU IfLevel10
	ELSEIFDIF IfLevel9,<>
		LastDefLabel TEXTEQU IfLevel9
	ELSEIFDIF IfLevel8,<>
		LastDefLabel TEXTEQU IfLevel8
	ELSEIFDIF IfLevel7,<>
		LastDefLabel TEXTEQU IfLevel7
	ELSEIFDIF IfLevel6,<>
		LastDefLabel TEXTEQU IfLevel6
	ELSEIFDIF IfLevel5,<>
		LastDefLabel TEXTEQU IfLevel5
	ELSEIFDIF IfLevel4,<>
		LastDefLabel TEXTEQU IfLevel4
	ELSEIFDIF IfLevel3,<>
		LastDefLabel TEXTEQU IfLevel3	
	ELSEIFDIF IfLevel2,<>
		LastDefLabel TEXTEQU IfLevel2
	ELSEIFDIF IfLevel1,<>
		LastDefLabel TEXTEQU IfLevel1	
	ELSEIFDIF IfLevel0,<>
		LastDefLabel TEXTEQU IfLevel0
	ELSE
		LastDefLabel TEXTEQU <>
	ENDIF		
ENDM
DelCurrentLabel MACRO
	IFDIF IfLevel19,<>
		IfLevel19 TEXTEQU <>
	ELSEIFDIF IfLevel18,<>
		IfLevel18 TEXTEQU <>
	ELSEIFDIF IfLevel17,<>
		IfLevel17 TEXTEQU <>
	ELSEIFDIF IfLevel16,<>
		IfLevel16 TEXTEQU <>
	ELSEIFDIF IfLevel15,<>
		IfLevel15 TEXTEQU <>
	ELSEIFDIF IfLevel14,<>
		IfLevel14 TEXTEQU <>
	ELSEIFDIF IfLevel13,<>
		IfLevel13 TEXTEQU <>	
	ELSEIFDIF IfLevel12,<>
		IfLevel12 TEXTEQU <>
	ELSEIFDIF IfLevel11,<>
		IfLevel11 TEXTEQU <>	
	ELSEIFDIF IfLevel10,<>
		IfLevel10 TEXTEQU <>
	ELSEIFDIF IfLevel9,<>
		IfLevel9 TEXTEQU <>
	ELSEIFDIF IfLevel8,<>
		IfLevel8 TEXTEQU <>
	ELSEIFDIF IfLevel7,<>
		IfLevel7 TEXTEQU <>
	ELSEIFDIF IfLevel6,<>
		IfLevel6 TEXTEQU <>
	ELSEIFDIF IfLevel5,<>
		IfLevel5 TEXTEQU <>
	ELSEIFDIF IfLevel4,<>
		IfLevel4 TEXTEQU <>
	ELSEIFDIF IfLevel3,<>
		IfLevel3 TEXTEQU <>	
	ELSEIFDIF IfLevel2,<>
		IfLevel2 TEXTEQU <>
	ELSEIFDIF IfLevel1,<>
		IfLevel1 TEXTEQU <>	
	ELSEIFDIF IfLevel0,<>
		IfLevel0 TEXTEQU <>
	ENDIF
ENDM
;ÓÑËÎÂÈß
.if MACRO args:VARARG
	SaveOutLabel
	SaveCurrentLabel
	J_POLY_COND LastDefLabel,FALSE,<args>
ENDM
.elseif MACRO args:VARARG
	GetOutLabel
	jmp LastOutLabel
	GetCurrentLabel
LastDefLabel:
	DelCurrentLabel
	SaveCurrentLabel
	J_POLY_COND LastDefLabel,FALSE,<args>	
ENDM
.nextif MACRO args:VARARG
	GetCurrentLabel
	J_POLY_COND LastDefLabel,TRUE,<args>
ENDM
.else MACRO
	GetOutLabel
	jmp LastOutLabel	
	GetCurrentLabel
LastDefLabel:
	DelCurrentLabel
	SaveCurrentLabel
ENDM
.endif MACRO
	GetCurrentLabel
LastDefLabel:
	DelCurrentLabel
	GetOutLabel
LastOutLabel:
	DelOutLabel
ENDM
;SaveUntilCondsLabel
;GetUntilCondsLabel
;DelUntilCondsLabel
while_cnt=0
.repeat MACRO
	while_cnt=while_cnt+1
	SaveUntilCondsLabel
	SaveUntilOutLabel
	SaveUntilLabel	
LastUntilLabel:
ENDM
j_test equ 1
.break MACRO args:VARARG
	GetUntilOutLabel
	IF @SizeStr(<args>) NE 0
		J_POLY_COND LastUntilOutLabel,TRUE,@SubStr(<args>,5,@SizeStr(<args>)-4)
		GOTO EndBreak		
	ELSE
		jmp LastUntilOutLabel
	ENDIF
:EndBreak
ENDM
.continue MACRO args:VARARG
	GetUntilCondsLabel
	IF @SizeStr(<args>) NE 0
		J_POLY_COND LastUntilConds,TRUE,@SubStr(<args>,5,@SizeStr(<args>)-4)		
	ELSE
		jmp LastUntilConds
	ENDIF
ENDM
.skip MACRO args:VARARG
	GetUntilLabel
	IF @SizeStr(<args>) NE 0
		J_POLY_COND LastUntilLabel,TRUE,@SubStr(<args>,5,@SizeStr(<args>)-4)		
	ELSE
		jmp LastUntilLabel
	ENDIF
ENDM
.until MACRO args:VARARG
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	IF @SizeStr(<args>) NE 0
		J_POLY_COND LastUntilLabel,FALSE,args
	ELSE
		jmp LastUntilLabel
	ENDIF
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1	
ENDM
.untilcxz MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	loop LastUntilLabel
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
.untilcxzd MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	loopd LastUntilLabel
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
.untilcxze MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	loope LastUntilLabel
	DelUntilLabel	
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
.untilcxzne MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	loopne LastUntilLabel
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
.untilcxzed MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	looped LastUntilLabel
	DelUntilLabel	
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
.untilcxzned MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	loopned LastUntilLabel
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
WhileLevel0 TEXTEQU <>
WhileLevel1 TEXTEQU <>
WhileLevel2 TEXTEQU <>
WhileLevel3 TEXTEQU <>
WhileLevel4 TEXTEQU <>
WhileLevel5 TEXTEQU <>
WhileLevel6 TEXTEQU <>
WhileLevel7 TEXTEQU <>
WhileLevel8 TEXTEQU <>
WhileLevel9 TEXTEQU <>
WhileLevel10 TEXTEQU <>
WhileLevel11 TEXTEQU <>
WhileLevel12 TEXTEQU <>
WhileLevel13 TEXTEQU <>
WhileLevel14 TEXTEQU <>
WhileLevel15 TEXTEQU <>
WhileLevel16 TEXTEQU <>
WhileLevel17 TEXTEQU <>
WhileLevel18 TEXTEQU <>
WhileLevel19 TEXTEQU <>
wcond0l=0
wcond1l=0
wcond2l=0
wcond3l=0
wcond4l=0
wcond5l=0
wcond6l=0
wcond7l=0
wcond8l=0
wcond9l=0
wcond10l=0
wcond11l=0
wcond12l=0
wcond13l=0
wcond14l=0
wcond15l=0
wcond16l=0
wcond17l=0
wcond18l=0
wcond19l=0
.while MACRO args:VARARG
	SaveUntilCondsLabel
	IFDIF <args>,<TRUE>
		jmp LastUntilConds
	ENDIF
	SaveUntilOutLabel
	SaveUntilLabel	
LastUntilLabel:
	while_cnt=while_cnt+1
	IF while_cnt EQ 1
		WhileLevel0 TEXTEQU <args>
		wcond0l SIZESTR <args>
	ELSEIF while_cnt EQ 2
		WhileLevel1 TEXTEQU <args>
		wcond1l SIZESTR <args>
	ELSEIF while_cnt EQ 3
		WhileLevel2 TEXTEQU <args>
		wcond2l SIZESTR <args>
	ELSEIF while_cnt EQ 4
		WhileLevel3 TEXTEQU <args>
		wcond3l SIZESTR <args>
	ELSEIF while_cnt EQ 5
		WhileLevel4 TEXTEQU <args>
		wcond4l SIZESTR <args>
	ELSEIF while_cnt EQ 6
		WhileLevel5 TEXTEQU <args>
		wcond5l SIZESTR <args>
	ELSEIF while_cnt EQ 7
		WhileLevel6 TEXTEQU <args>
		wcond6l SIZESTR <args>
	ELSEIF while_cnt EQ 8
		WhileLevel7 TEXTEQU <args>
		wcond7l SIZESTR <args>
	ELSEIF while_cnt EQ 9
		WhileLevel8 TEXTEQU <args>
		wcond8l SIZESTR <args>
	ELSEIF while_cnt EQ 10
		WhileLevel9 TEXTEQU <args>
		wcond9l SIZESTR <args>
	ELSEIF while_cnt EQ 11
		WhileLevel10 TEXTEQU <args>
		wcond10l SIZESTR <args>
	ELSEIF while_cnt EQ 12
		WhileLevel11 TEXTEQU <args>
		wcond11l SIZESTR <args>
	ELSEIF while_cnt EQ 13
		WhileLevel12 TEXTEQU <args>
		wcond12l SIZESTR <args>
	ELSEIF while_cnt EQ 14
		WhileLevel13 TEXTEQU <args>
		wcond13l SIZESTR <args>
	ELSEIF while_cnt EQ 15
		WhileLevel14 TEXTEQU <args>
		wcond14l SIZESTR <args>
	ELSEIF while_cnt EQ 16
		WhileLevel15 TEXTEQU <args>
		wcond15l SIZESTR <args>
	ELSEIF while_cnt EQ 17
		WhileLevel16 TEXTEQU <args>
		wcond16l SIZESTR <args>
	ELSEIF while_cnt EQ 18
		WhileLevel17 TEXTEQU <args>
		wcond17l SIZESTR <args>
	ELSEIF while_cnt EQ 19
		WhileLevel18 TEXTEQU <args>
		wcond18l SIZESTR <args>
	ELSEIF while_cnt EQ 20
		WhileLevel19 TEXTEQU <args>
		wcond19l SIZESTR <args>
	ELSE
		.err <Too much nesting level.>
	ENDIF
ENDM
.endw MACRO
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	IF (while_cnt EQ 1) AND (wcond0l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel0
	ELSEIF (while_cnt EQ 2) AND (wcond1l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel1
	ELSEIF (while_cnt EQ 3) AND (wcond2l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel2
	ELSEIF (while_cnt EQ 4) AND (wcond3l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel3
	ELSEIF (while_cnt EQ 5) AND (wcond4l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel4
	ELSEIF (while_cnt EQ 6) AND (wcond5l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel5
	ELSEIF (while_cnt EQ 7) AND (wcond6l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel6
	ELSEIF (while_cnt EQ 8) AND (wcond7l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel7
	ELSEIF (while_cnt EQ 9) AND (wcond8l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel8
	ELSEIF (while_cnt EQ 10) AND (wcond9l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel9
	ELSEIF (while_cnt EQ 11) AND (wcond10l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel10
	ELSEIF (while_cnt EQ 12) AND (wcond11l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel11
	ELSEIF (while_cnt EQ 13) AND (wcond12l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel12
	ELSEIF (while_cnt EQ 14) AND (wcond13l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel13
	ELSEIF (while_cnt EQ 15) AND (wcond14l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel14
	ELSEIF (while_cnt EQ 16) AND (wcond15l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel15
	ELSEIF (while_cnt EQ 17) AND (wcond16l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel16
	ELSEIF (while_cnt EQ 18) AND (wcond17l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel17
	ELSEIF (while_cnt EQ 19) AND (wcond18l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel18
	ELSEIF (while_cnt EQ 20) AND (wcond19l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel19
	ENDIF
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM
;ÁÓÊÂÀ ÈËÈ ÖÈÔÐÀ
IS_ALNUM MACRO char
CharPosition INSTR 1,<0123456789abcdefghijklmnopqrstvuwxyzABCDEFGHIJKLMNOPQRSTVUWXYZ>,<char>
	exitm <@CatStr(%CharPosition)>
ENDM
IS_INT_REG MACRO val
RegPosition INSTR 1,< rsi al bl cl dl ah bh ch dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b eax ebx ecx edx esi edi ebp esp r14d r15d >,<val>
	IF RegPosition EQ 0
		RegPosition INSTR 1,< rax rbx rdx rcx rsi rdi rbp rsp r8w r9w r10w r11w r12w r13w r14w r15w r8d r9d r10d r11d r12d r13d r8 r9 r10 r11 r12 r13 r14 r15 >,<val>
	ENDIF
	exitm <@CatStr(%RegPosition)>
ENDM
constStringsNum=0
regIndex=0
ItemLen=0
AddrArg TEXTEQU <>
constStr TEXTEQU <>
itemSize=0
reg32v TEXTEQU <>
movReg64Arg MACRO reg:REQ,item:REQ,____regIndex:=<NOT_A_REG64>
	IFDIF <reg>,<item>
		IF ____regIndex EQ NOT_A_REG64
			regIndex=Reg64Index(reg)
		ELSE
			regIndex=____regIndex
		ENDIF
		itemSize=8
		itemOpattr=0
		imm_nullification=0
		IF regIndex NE NOT_A_REG64
			ItemLen=@SizeStr(<item>)
			IF (ItemLen GE 6) and (@InStr(1,%ToLower(<item>),<addr >) EQ 1)
				AddrArg SUBSTR <item>,6,ItemLen-5
				lea reg,AddrArg
			ELSEIF (ItemLen GE 2) and (@InStr(1,<item>,<&>) EQ 1)
				AddrArg SUBSTR <item>,2,ItemLen-1
				lea reg,AddrArg
			ELSE
				IFIDN @SubStr(<item>,1,1),<">
					constStr	CATSTR <constString>,@CatStr(%constStringsNum)
					CONSTANT constStr db item,0
					lea reg,constStr
					constStringsNum=constStringsNum+1
				ELSE
					itemOpattr=OPATTR (item)
					IF itemOpattr and (MEM_EXPR or REG_EXPR)
						itemSize=TYPE (item)
						IF (itemSize EQ 8) or (itemSize EQ 0)
							mov reg,item
						ELSE
							reg32v	TEXTEQU <GetReg32(regIndex)>
							IF itemSize EQ 4
								mov reg32v,item
							ELSEIF (itemSize EQ 2) or (itemSize EQ 1)
								movzx reg32v,item
							ENDIF
						ENDIF
					ELSEIF itemOpattr and LABEL_EXPR
						mov reg,item
					ELSEIF itemOpattr and IMM_EXPR
						imm_nullification=4
						itemSize=TYPE (item)
						IF itemSize EQ 1
							reg32v	TEXTEQU <GetReg8(regIndex)>
							IF (item) EQ 0
								xor reg32v,reg32v
								imm_nullification=1
							ELSE
								mov reg32v,item
							ENDIF
						ELSEIF itemSize EQ 2
							reg32v	TEXTEQU <GetReg16(regIndex)>
							IF (item) EQ 0
								xor reg32v,reg32v
								imm_nullification=1
							ELSE
								mov reg32v,item
							ENDIF
						ELSEIF itemSize EQ 4
							reg32v	TEXTEQU <GetReg32(regIndex)>
							IF (item) EQ 0
								xor reg32v,reg32v
								imm_nullification=1
							ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFFFFFh)
								or reg32v,-1
							ELSE
								mov reg32v,item
							ENDIF
						ELSE
							imm_nullification=3
							IF (item) LT 0
								IF ((item) EQ -1) or ((item) EQ 0FFFFFFFFFFFFFFFFh)
									or reg,-1
								ELSE
									mov reg,item
								ENDIF
								itemSize=8
							ELSE
								itemSize=4
								reg32v	TEXTEQU <GetReg32(regIndex)>
								IF (item) EQ 0
									xor reg32v,reg32v
									imm_nullification=2
								ELSEIF ((item) EQ 0FFFFFFFFh)
									or reg32v,-1
								ELSEIF ((item) LE 0FFFFFFFEh)
									mov reg32v,item
								ELSE
									itemSize=8
									mov reg,item
								ENDIF
							ENDIF
						ENDIF
					ELSE
						mov reg,item
					ENDIF
				ENDIF
			ENDIF
		ELSE
			.err <NOT_A_REG64>
		ENDIF
	ENDIF
ENDM
movReg32Arg MACRO reg:REQ,item:REQ,____regIndex:=<NOT_A_REG32>
	IFDIF <reg>,<item>
		IF ____regIndex EQ NOT_A_REG32
			regIndex=Reg32Index(reg)
		ELSE
			regIndex=____regIndex
		ENDIF
		itemSize=4
		itemOpattr=0
		imm_nullification=0
		IF regIndex NE NOT_A_REG32
			ItemLen=@SizeStr(<item>)
			IF (ItemLen GE 6) and (@InStr(1,%ToLower(<item>),<addr >) EQ 1)
				AddrArg SUBSTR <item>,6,ItemLen-5
				lea reg,AddrArg
			ELSEIF (ItemLen GE 2) and (@InStr(1,<item>,<&>) EQ 1)
				AddrArg SUBSTR <item>,2,ItemLen-1
				lea reg,AddrArg
			ELSE
				IFIDN @SubStr(<item>,1,1),<">
					constStr	CATSTR <constString>,@CatStr(%constStringsNum)
					CONSTANT constStr db item,0
					lea reg,constStr
					constStringsNum=constStringsNum+1
				ELSE
					itemOpattr=OPATTR (item)
					IF itemOpattr and (MEM_EXPR or REG_EXPR)
						itemSize=TYPE (item)
							IF (itemSize EQ 4) or (itemSize EQ 0)
								mov reg,item
							ELSEIF (itemSize EQ 2) or (itemSize EQ 1)
								movzx reg,item
							ELSE
								mov reg,dword ptr item
							ENDIF
					ELSEIF itemOpattr and LABEL_EXPR
						mov reg,item
					ELSEIF itemOpattr and IMM_EXPR
						imm_nullification=4
						itemSize=TYPE (item)
						IF itemSize EQ 1
							IF (item) EQ 0
								xor reg,reg
								imm_nullification=1
							ELSE
								mov reg,item
							ENDIF
						ELSEIF itemSize EQ 2
							IF (item) EQ 0
								xor reg,reg
								imm_nullification=1
							ELSE
								mov reg,item
							ENDIF
						ELSEIF itemSize EQ 4
							IF (item) EQ 0
								xor reg,reg
								imm_nullification=1
							ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFFFFFh)
								or reg,-1
							ELSE
								mov reg,item
							ENDIF
						ELSE
							imm_nullification=3
							IF (item) LT 0
								IF ((item) EQ -1)
									or reg,-1
								ELSE
									mov reg,item
								ENDIF
								itemSize=4
							ELSE
								itemSize=4
								IF (item) EQ 0
									xor reg,reg
									imm_nullification=2
								ELSEIF ((item) LE 7FFFFFFFh)
									mov reg,item
								ELSE
									itemSize=4
									mov reg,item
								ENDIF
							ENDIF
						ENDIF
					ELSE
						mov reg,item
					ENDIF
				ENDIF
			ENDIF
		ELSE
			.err <NOT_A_REG32>
		ENDIF
	ENDIF
ENDM
movReg16Arg MACRO reg:REQ,item:REQ,____regIndex:=<NOT_A_REG16>
	IFDIF <reg>,<item>
		IF ____regIndex EQ NOT_A_REG16
			regIndex=Reg16Index(reg)
		ELSE
			regIndex=____regIndex
		ENDIF
		itemSize=2
		itemOpattr=0
		imm_nullification=0
		IF regIndex NE NOT_A_REG16
			ItemLen=@SizeStr(<item>)
			IF (ItemLen GE 6) and (@InStr(1,%ToLower(<item>),<addr >) EQ 1)
				AddrArg SUBSTR <item>,6,ItemLen-5
				lea reg,AddrArg
			ELSEIF (ItemLen GE 2) and (@InStr(1,<item>,<&>) EQ 1)
				AddrArg SUBSTR <item>,2,ItemLen-1
				lea reg,AddrArg
			ELSE
				IFIDN @SubStr(<item>,1,1),<">
					constStr	CATSTR <constString>,@CatStr(%constStringsNum)
					CONSTANT constStr db item,0
					lea reg,constStr
					constStringsNum=constStringsNum+1
				ELSE
					itemOpattr=OPATTR (item)
					IF itemOpattr and (MEM_EXPR or REG_EXPR)
						itemSize=TYPE (item)
							IF (itemSize EQ 2) or (itemSize EQ 0)
								mov reg,item
							ELSEIF (itemSize EQ 1)
								movzx reg,item
							ELSE
								mov reg,word ptr item
							ENDIF
					ELSEIF itemOpattr and LABEL_EXPR
						mov reg,item
					ELSEIF itemOpattr and IMM_EXPR
						imm_nullification=4
						itemSize=TYPE (item)
						IF itemSize EQ 1
							IF (item) EQ 0
								xor reg,reg
								imm_nullification=1
							ELSE
								mov reg,item
							ENDIF
						ELSEIF itemSize EQ 2
							IF (item) EQ 0
								xor reg,reg
								imm_nullification=1
							ELSE
								mov reg,item
							ENDIF
						ELSEIF itemSize EQ 4
							IF (item) EQ 0
								xor reg,reg
								imm_nullification=1
							ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFh)
								or reg,-1
							ELSE
								mov reg,item
							ENDIF
						ELSE
							imm_nullification=3
							IF (item) LT 0
								IF ((item) EQ -1)
									or reg,-1
								ELSE
									mov reg,item
								ENDIF
								itemSize=2
							ELSE
								itemSize=2
								IF (item) EQ 0
									xor reg,reg
									imm_nullification=2
								ELSEIF ((item) LE 7FFFh)
									mov reg,item
								ELSE
									itemSize=2
									mov reg,item
								ENDIF
							ENDIF
						ENDIF
					ELSE
						mov reg,item
					ENDIF
				ENDIF
			ENDIF
		ELSE
			.err <NOT_A_REG16>
		ENDIF
	ENDIF
ENDM
movMem64Arg MACRO mem64:REQ,item:REQ
LOCAL AddrArg,ItemLen
LOCAL constStr
	itemSize=8
	itemOpattr=0
	imm_nullification=0
	IFDIF <mem64>,<item>
		ItemLen=@SizeStr(<item>)
		IF (ItemLen GE 6) and (@InStr(1,%ToLower(<item>),<addr >) EQ 1)
			AddrArg SUBSTR <item>,6,ItemLen-5
			lea rax,AddrArg
			mov qword ptr mem64,rax
		ELSEIF (ItemLen GE 2) and (@InStr(1,<item>,<&>) EQ 1)
			AddrArg SUBSTR <item>,2,ItemLen-1
			lea rax,AddrArg
			mov qword ptr mem64,rax
		ELSE
			IFIDN @SubStr(<item>,1,1),<">
				constStr	CATSTR <constString>,@CatStr(%constStringsNum)
				CONSTANT constStr db item,0
				lea rax,constStr
				mov qword ptr mem64,rax
				constStringsNum=constStringsNum+1
			ELSE
				itemOpattr=OPATTR (item)
				IF itemOpattr and REG_EXPR
					itemSize=TYPE (item)
					IF itemSize EQ 8
						mov qword ptr mem64,item
					ELSEIF itemSize EQ 4
						mov dword ptr mem64,item
					ELSEIF itemSize EQ 2
						mov word ptr mem64,item
					ELSEIF itemSize EQ 1
						mov byte ptr mem64,item
					ENDIF
				ELSEIF itemOpattr and MEM_EXPR
					itemSize=TYPE (item)
					IF (itemSize EQ 8) or (itemSize EQ 0)
						mov rax,item
						mov qword ptr mem64,rax
					ELSEIF itemSize EQ 4
						mov eax,item
						mov dword ptr mem64,eax
					ELSEIF itemSize EQ 2
						mov ax,item
						mov word ptr mem64,ax
					ELSEIF itemSize EQ 1
						mov al,item
						mov byte ptr mem64,al
					ENDIF
				ELSEIF itemOpattr and LABEL_EXPR
					mov rax,item
					mov qword ptr mem64,rax
				ELSEIF itemOpattr and IMM_EXPR
					imm_nullification=4
					itemSize=TYPE (item)
					IF (itemSize EQ 0) or (itemSize EQ 8)
						imm_nullification=3
						IF (item) EQ 0
							and qword ptr mem64,0
							imm_nullification=2
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFFFFFFFFFFFFFh)
							or qword ptr mem64,-1
						ELSEIF ((item) GE -80000000h) AND ((item) LE 7FFFFFFFh)
							mov qword ptr mem64,item
						ELSE
							mov rax,item
							mov mem64,rax
						ENDIF
					ELSEIF itemSize EQ 2
						IF (item) EQ 0
							and word ptr mem64,0
							imm_nullification=1
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFh)
							or word ptr mem64,-1
						ELSE
							mov word ptr mem64,item
						ENDIF
					ELSEIF itemSize EQ 4
						IF (item) EQ 0
							and dword ptr mem64,0
							imm_nullification=1
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFFFFFh)
							or dword ptr mem64,-1
						ELSE
							mov dword ptr mem64,item
						ENDIF
					ELSE
						mov mem64,item
					ENDIF
				ELSE
					mov rax,item
					mov mem64,rax
				ENDIF
			ENDIF
		ENDIF
	ENDIF
ENDM
movst MACRO reg:REQ,item:REQ
	IFDIF <reg>,<item>
		movst_rid=Reg64Index(reg)
		IF movst_rid NE NOT_A_REG64
			movReg64Arg reg,item,movst_rid
		ELSE
			movst_rid=Reg32Index(reg)
			IF movst_rid NE NOT_A_REG32
				movReg32Arg reg,item,movst_rid
			ELSE
				movst_rid=Reg16Index(reg)
				IF movst_rid NE NOT_A_REG16
					movReg16Arg reg,item,movst_rid
				ELSE
					movst_rid=Reg8Index(reg)
					IF movst_rid NE NOT_A_REG8
						mov reg,item
					ELSE
						movMem64Arg reg,item
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	ENDIF
ENDM
SetType MACRO mem64:REQ,item:REQ
LOCAL AddrArg,ItemLen
LOCAL constStr
	itemSize=8
	itemOpattr=0
	imm_nullification=0
	must_be_gt=1
	IFDIF <mem64>,<item>
		ItemLen=@SizeStr(<item>)
		IF (ItemLen GE 6) and (@InStr(1,%ToLower(<item>),<addr >) EQ 1)
			
		ELSEIF (ItemLen GE 2) and (@InStr(1,<item>,<&>) EQ 1)
			
		ELSE
			IFDIF @SubStr(<item>,1,1),<">
				itemOpattr=OPATTR (item)
				IF itemOpattr and REG_EXPR
					itemSize=TYPE (item)
				ELSEIF itemOpattr and MEM_EXPR
					itemSize=TYPE (item)
				ELSEIF itemOpattr and IMM_EXPR
					imm_nullification=4
					itemSize=TYPE (item)
					IF (itemSize EQ 0) or (itemSize EQ 8)
						imm_nullification=3
						IF (item) EQ 0
							imm_nullification=2
							must_be_gt=2
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFFFFFFFFFFFFFh)
							must_be_gt=4
						ENDIF
					ELSEIF itemSize EQ 2
						IF (item) EQ 0
							imm_nullification=1
							must_be_gt=2
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFh)
							must_be_gt=3
						ENDIF
					ELSEIF itemSize EQ 4
						IF (item) EQ 0
							imm_nullification=1
							must_be_gt=2
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFFFFFFFh)
							must_be_gt=3
						ENDIF
					ELSEIF itemSize EQ 1
						IF (item) EQ 0
							imm_nullification=1
							must_be_gt=2
						ELSEIF ((item) EQ -1) or ((item) EQ 0FFh)
							must_be_gt=3
						ENDIF
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	ENDIF
ENDM
fb MACRO FuncName:REQ,ArgumentList:VARARG
	IFIDN <ArgumentList>,<>
		call FuncName
	ELSE
		invoke FuncName,ArgumentList
	ENDIF
	EXITM<al>
ENDM
fw MACRO FuncName:REQ,ArgumentList:VARARG
	IFIDN <ArgumentList>,<>
		call FuncName
	ELSE
		invoke FuncName,ArgumentList
	ENDIF
	EXITM<ax>
ENDM
fd MACRO FuncName:REQ,ArgumentList:VARARG
	IFIDN <ArgumentList>,<>
		call FuncName
	ELSE
		invoke FuncName,ArgumentList
	ENDIF
	EXITM<eax>
ENDM
fn MACRO FuncName:REQ,ArgumentList:VARARG
	IFIDN <ArgumentList>,<>
		call FuncName
	ELSE
		invoke FuncName,ArgumentList
	ENDIF
	EXITM<rax>
ENDM
mrm MACRO FirstArgument:REQ,SecondArgument:REQ
	itemSize=TYPE (FirstArgument)
	IF itemSize EQ 1
		mov al,SecondArgument
		mov FirstArgument,al
	ELSEIF itemSize EQ 2
		itemSize=TYPE (SecondArgument)
		IF (itemSize EQ 2) or (itemSize EQ 0)
			mov ax,SecondArgument
			mov FirstArgument,ax
		ELSE
			movzx eax,SecondArgument
			mov FirstArgument,ax
		ENDIF
	ELSEIF itemSize EQ 4
		itemSize=TYPE (SecondArgument)
		IF (itemSize EQ 4) or (itemSize EQ 0)
			mov eax,SecondArgument
			mov FirstArgument,eax
		ELSE
			movzx eax,SecondArgument
			mov FirstArgument,eax
		ENDIF	
	ELSE
		movReg64Arg rax,SecondArgument
		mov FirstArgument,rax
	ENDIF
ENDM
return macro valopt
	IFDIF <valopt>,<>
		movReg64Arg rax,valopt
	ENDIF
	IF ((OPATTR (ToProcsReturnPoint)) AND VALID_REF)
		IF (RegCnt NE 0)
			jmp ToProcsReturnPoint
		ELSE
			ret
		ENDIF
	ELSE
	ToProcsReturnPoint:
		ret
	ENDIF
endm
register MACRO reg,item
TEX TEXTEQU <>
address TEXTEQU <>
IFDIF <reg>,<item>
	IF @SizeStr(<item>) GE 6
		TEX SUBSTR <item>,1,4
		address SUBSTR <item>, 6, @SizeStr(<item>) - 5
		IFIDN TEX,<addr>
			lea reg,address
		ELSEIFIDN TEX,<ADDR>
			lea reg,address
		ELSEIFIDN TEX,<Addr>
			lea reg,address
		ELSE
			mov reg,item
		ENDIF
	ELSE
		mov reg,item
	ENDIF
ENDIF
ENDM
ToUpper MACRO String:VARARG
LOCAL UpperStr,LowNum
	UpperStr TEXTEQU <>
%	FORC char,<String>
		LowNum INSTR 1,<abcdefghijklmnopqrstuvwxyz>,<char>
		IF LowNum NE 0
			UpperStr CATSTR UpperStr,@SubStr(<ABCDEFGHIJKLMNOPQRSTUVWXYZ>,LowNum,1)
		ELSE
			UpperStr CATSTR UpperStr,<char>
		ENDIF
	ENDM
	EXITM <UpperStr>
ENDM
ToLower MACRO String:VARARG
LOCAL UpperStr,LowNum
	UpperStr TEXTEQU <>
%	FORC char,<String>
		LowNum INSTR 1,<ABCDEFGHIJKLMNOPQRSTUVWXYZ>,<char>
		IF LowNum NE 0
			UpperStr CATSTR UpperStr,@SubStr(<abcdefghijklmnopqrstuvwxyz>,LowNum,1)
		ELSE
			UpperStr CATSTR UpperStr,<char>
		ENDIF
	ENDM
	EXITM <UpperStr>
ENDM
JustLeaveFrame = 0
leavef MACRO
	JustLeaveFrame = 1
	ret
	JustLeaveFrame = 0
ENDM
altm MACRO Consts:VARARG 
    EXITM <>
ENDM
rbpFrame=0
rspFrame=0
rbpFirstArgBias=0
userParmsHandler MACRO mips:=<7>,save_rcx:=<0>,save_rdx:=<0>,save_r8:=<0>,save_r9:=<0>
    MaxInvokeParms=mips
	SaveRCX=save_rcx
	SaveRDX=save_rdx
	SaveR8=save_r8
	SaveR9=save_r9
ENDM
SaveRegArgs MACRO
	IF SaveRCX EQ 1
		mov [rbp+10h],cl
	ELSEIF SaveRCX EQ 2
		mov [rbp+10h],cx
	ELSEIF SaveRCX EQ 4
		mov [rbp+10h],ecx
	ELSEIF SaveRCX EQ 8
		mov [rbp+10h],rcx
	ENDIF
	IF SaveRDX EQ 1
		mov [rbp+18h],dl
	ELSEIF SaveRDX EQ 2
		mov [rbp+18h],dx
	ELSEIF SaveRDX EQ 4
		mov [rbp+18h],edx
	ELSEIF SaveRDX EQ 8
		mov [rbp+18h],rdx
	ENDIF
	IF SaveR8 EQ 1
		mov [rbp+20h],r8b
	ELSEIF SaveR8 EQ 2
		mov [rbp+20h],r8w
	ELSEIF SaveR8 EQ 4
		mov [rbp+20h],r8d
	ELSEIF SaveR8 EQ 8
		mov [rbp+20h],r8
	ENDIF
	IF SaveR9 EQ 1
		mov [rbp+28h],r9b
	ELSEIF SaveR9 EQ 2
		mov [rbp+28h],r9w
	ELSEIF SaveR9 EQ 4
		mov [rbp+28h],r9d
	ELSEIF SaveR9 EQ 8
		mov [rbp+28h],r9
	ENDIF
ENDM
rbpFramePrologue MACRO procname,flags,argbytes,localbytes,reglist,userparms:VARARG
	RegCnt=0
	IFNB <reglist>
	    FOR reg,reglist
	    	RegCnt=RegCnt+1
	    ENDM
    ENDIF
    userParmsHandler userparms
    allbytes=localbytes+8*(RegCnt+MaxInvokeParms)
    IF (allbytes AND 7) NE 0
    	allbytes=allbytes-(allbytes AND 7)+8
    ENDIF
    IF (allbytes AND 8) NE 0
    	allbytes=allbytes+8
    ENDIF
    IF (localbytes+argbytes-8) EQ 0
		IFDIF reglist,<>
			FOR reg,reglist
				push reg
			ENDM
			allbytes=8*(RegCnt+MaxInvokeParms)
			IF (allbytes AND 8) EQ 0
				allbytes=(8*MaxInvokeParms)+8
			ELSE
				allbytes=8*MaxInvokeParms
			ENDIF
			IF allbytes LE 4096
				sub rsp,allbytes
			ELSE
				IFDEF __chkstk
					mov rax,allbytes
					call __chkstk
					sub rsp,rax
				ELSE
					sub rsp,allbytes
				ENDIF
			ENDIF
		ENDIF
		rbpFrame=2
		rspFrame=1
	ELSEIF allbytes LE 4096
		rbpFrame=1
		rspFrame=0
		enter allbytes,0
		rbpFirstArgBias=allbytes
		allbytes=allbytes-8*MaxInvokeParms
		IFNB <reglist>
			FOR reg,reglist
				mov [rbp-allbytes],reg
				allbytes=allbytes-8
			ENDM
		ENDIF
		SaveRegArgs
	ELSE
		rbpFrame=1
		rspFrame=0
		push rbp
		mov rbp,rsp
		IFDEF __chkstk
			mov rax,allbytes
			call __chkstk
			sub rsp,rax
		ELSE
			sub rsp,allbytes
		ENDIF
		rbpFirstArgBias=allbytes
		allbytes=allbytes-8*MaxInvokeParms
		IFNB <reglist>
			FOR reg,reglist
				mov [rbp-allbytes],reg
				allbytes=allbytes-8
			ENDM
		ENDIF
		SaveRegArgs
    ENDIF  
	EXITM <localbytes>
ENDM
rbpFrameEpilogue MACRO procname,flags,argbytes,localbytes,reglist,userparms:VARARG
	RegCnt=0
	IFNB <reglist>
	    FOR reg,reglist
	    	RegCnt=RegCnt+1
	    ENDM
    ENDIF
    userParmsHandler userparms
    allbytes=localbytes+8*(RegCnt+MaxInvokeParms)
    IF (allbytes AND 7) NE 0
    	allbytes=allbytes-(allbytes AND 7)+8
    ENDIF
    IF (allbytes AND 8) NE 0
    	allbytes=allbytes+8
    ENDIF
    IF (localbytes+argbytes-8) EQ 0
		allbytes=8*(RegCnt+MaxInvokeParms)
		IF (allbytes AND 8) EQ 0
			allbytes=(8*MaxInvokeParms)+8
		ELSE
			allbytes=8*MaxInvokeParms
		ENDIF
		IFDIF reglist,<>
			add rsp,allbytes
			FOR reg,reglist
				pop reg
			ENDM
		ENDIF	
	ELSE
		allbytes=allbytes-8*(MaxInvokeParms+RegCnt)
		IFNB <reglist>
			FOR reg,reglist
				allbytes=allbytes+8
				mov reg,[rbp-allbytes]
			ENDM
		ENDIF
		leave
    ENDIF
    IF JustLeaveFrame EQ 0
		db 0C3h
	ENDIF
ENDM
StdPrologue MACRO procname, flags, argbytes, localbytes, reglist, userparms:VARARG
pushed_regs=0
FillStack = 1
;;%echo @CatStr(%argbytes)
	IF (localbytes LT 4096) AND (localbytes NE 0)
		enter localbytes,0
	ELSEIF localbytes NE 0
        push rbp
        mov rbp,rsp
        sub rsp,localbytes
    ELSEIF argbytes GT 8
    	enter 0,0
    ENDIF
    ;; USES clause
    IFNB <reglist>
        FOR reg,reglist
        	pushed_regs=pushed_regs+1
            push reg
        ENDM
    ENDIF    
    IFNB <userparms>
    	IF (localbytes EQ 0) AND (argbytes EQ 0)
    		IF (8*(userparms+pushed_regs) AND 8) EQ 0
      			sub rsp,8*userparms+8
      		ELSE
      			sub rsp,8*userparms
      		ENDIF
      	ELSE
      		IF ((8*(userparms+pushed_regs)+localbytes) AND 8) EQ 0
      			sub rsp,8*userparms
      		ELSE
      			sub rsp,8*userparms+8
      		ENDIF
      	ENDIF
    ENDIF
    EXITM <localbytes>
endm
StdEpilogue MACRO procname, flags, argbytes, localbytes, reglist, userparms:VARARG
FillStack = 0
    IFNB <userparms>
    	IF (localbytes EQ 0) AND (argbytes EQ 0)
    		IF (8*(userparms+pushed_regs) AND 8) EQ 0
      			add rsp,8*userparms+8
      		ELSE
      			add rsp,8*userparms
      		ENDIF
      	ELSE
      		IF ((8*(userparms+pushed_regs)+localbytes) AND 8) EQ 0
      			add rsp,8*userparms
      		ELSE
      			add rsp,8*userparms+8
      		ENDIF
      	ENDIF
    ENDIF
    IFNB <reglist>
        FOR reg,reglist
            pop reg
        ENDM
    ENDIF
    IF (argbytes GT 8) OR (localbytes GT 0)
        leave
	ENDIF
	db 0C3h
ENDM
MaxArgs MACRO ArgsNum
	sub rsp,8*ArgsNum
	.if rsp&0Fh
		sub rsp,8
	.endif
ENDM
FillStack = 1
rbpArg14	equ <[rbp-rbpFirstArgBias+8*14-8]>
rbpArg13	equ <[rbp-rbpFirstArgBias+8*13-8]>
rbpArg12	equ <[rbp-rbpFirstArgBias+8*12-8]>
rbpArg11	equ <[rbp-rbpFirstArgBias+8*11-8]>
rbpArg10	equ <[rbp-rbpFirstArgBias+8*10-8]>
rbpArg9		equ <[rbp-rbpFirstArgBias+8*9-8]>
rbpArg8		equ <[rbp-rbpFirstArgBias+8*8-8]>
rbpArg7		equ <[rbp-rbpFirstArgBias+8*7-8]>
rbpArg6		equ <[rbp-rbpFirstArgBias+8*6-8]>
rbpArg5		equ <[rbp-rbpFirstArgBias+8*5-8]>
rbpArg4		equ <[rbp-rbpFirstArgBias+8*4-8]>
rbpArg3		equ <[rbp-rbpFirstArgBias+8*3-8]>
rbpArg2		equ <[rbp-rbpFirstArgBias+8*2-8]>
rbpArg1		equ <[rbp-rbpFirstArgBias+8*1-8]>
rspBorder	= 0A8h
rspArg14	equ <[rsp+8*14-8]>
rspArg13	equ <[rsp+8*13-8]>
rspArg12	equ <[rsp+8*12-8]>
rspArg11	equ <[rsp+8*11-8]>
rspArg10	equ <[rsp+8*10-8]>
rspArg9		equ <[rsp+8*9-8]>
rspArg8		equ <[rsp+8*8-8]>
rspArg7		equ <[rsp+8*7-8]>
rspArg6		equ <[rsp+8*6-8]>
rspArg5		equ <[rsp+8*5-8]>
rspArg4		equ <[rsp+8*4-8]>
rspArg3		equ <[rsp+8*3-8]>
rspArg2		equ <[rsp+8*2-8]>
rspArg1		equ <[rsp+8*1-8]>
invoke14 MACRO procname,args:VARARG
LOCAL numics,is_addr
	txt TEXTEQU <>
	ArgNum = 0
%	FOR item, <args>
		IF ArgNum EQ 0
			movReg64Arg rcx,item
		ELSEIF ArgNum EQ 1
			movReg64Arg rdx,item
		ELSEIF ArgNum EQ 2
			movReg64Arg r8,item
		ELSEIF ArgNum EQ 3
			movReg64Arg r9,item
		ELSE
			txt CATSTR <item>,<!,>,txt
		ENDIF
%		ArgNum=ArgNum+1
	ENDM
	IF rbpFrame EQ 1
		IF ArgNum GT 4
			txt SUBSTR  txt, 1, @SizeStr( %txt ) - 1
			ArgNum=rbpFirstArgBias-8*ArgNum
		%	FOR item,<txt>
				ArgNum=ArgNum+8
				IFDIF <item>,<ready>
					movMem64Arg [rbp-ArgNum],item
				ENDIF
			ENDM	
		ENDIF
		IF (OPATTR (procname)) EQ (VALID_REF OR IMM_EXPR)
			mov rax,[rcx]
			call procname[rax]
		ELSE
			call procname
		ENDIF
	ELSEIF rspFrame EQ 1
		IF ArgNum GT 4
			txt SUBSTR  txt, 1, @SizeStr( %txt ) - 1
		%	FOR item,<txt>
				ArgNum = ArgNum-1
				;;%echo item
				IF IS_INT_REG(< item >) NE 0
					mov [rsp+8*ArgNum],item
				ELSE
					IF (@InStr(1,<0123456789>,@SubStr(<item>,1,1)) NE 0) AND (@SizeStr(<item>) LE 10)
						mov qword ptr [rsp+8*ArgNum],item
					ELSE
						IF ( (@SizeStr(<item>) GE 4) AND (@InStr(1,<item>,<addr >) EQ 1) ) ;;OR (@SubStr(item,1,4),<ADDR>) ;;OR (@SubStr(item,1,4),<Addr>)
							lea rax,@SubStr(<item>,6,@SizeStr(<item>)-5)
						ELSE
							mov rax,item
						ENDIF
						mov [rsp+8*ArgNum],rax
					ENDIF
				ENDIF
			ENDM
		ENDIF
		call procname
	ELSE
		IF ArgNum GT 4
			txt SUBSTR  txt, 1, @SizeStr( %txt ) - 1
			%pushm txt
		ENDIF
		sub rsp,8*4
		call procname
		IF ArgNum GT 4
			add rsp,8*ArgNum
		ELSE
			add rsp,8*4
		ENDIF
	ENDIF	
ENDM
FREE_RAX equ (1 shl 0)
FREE_RBX equ (1 shl 1)
FREE_RCX equ (1 shl 2)
FREE_RDX equ (1 shl 3)
FREE_RSP equ (1 shl 4)
FREE_RBP equ (1 shl 5)
FREE_RDI equ (1 shl 6)
FREE_RSI equ (1 shl 7)
FREE_R8  equ (1 shl 8)
FREE_R9  equ (1 shl 9)
FREE_R10 equ (1 shl 10)
FREE_R11 equ (1 shl 11)
FREE_R12 equ (1 shl 12)
FREE_R13 equ (1 shl 13)
FREE_R14 equ (1 shl 14)
FREE_R15 equ (1 shl 15)
FreeRegs=(FREE_RAX or FREE_RCX or FREE_RDX or FREE_R8 or FREE_R9 or FREE_R10 or FREE_R11)
GetVolatileReg macro
	IF FreeRegs and FREE_RAX
		FreeRegs=FreeRegs and (not FREE_RAX)
		EXITM<0>
	ELSEIF FreeRegs and FREE_RCX
		FreeRegs=FreeRegs and (not FREE_RCX)
		EXITM<1>
	ELSEIF FreeRegs and FREE_RDX
		FreeRegs=FreeRegs and (not FREE_RDX)
		EXITM<2>
	ELSEIF FreeRegs and FREE_R8
		FreeRegs=FreeRegs and (not FREE_R8)
		EXITM<8>
	ELSEIF FreeRegs and FREE_R9
		FreeRegs=FreeRegs and (not FREE_R9)
		EXITM<9>
	ELSEIF FreeRegs and FREE_R10
		FreeRegs=FreeRegs and (not FREE_R10)
		EXITM<10>
	ELSEIF FreeRegs and FREE_R11
		FreeRegs=FreeRegs and (not FREE_R11)
		EXITM<11>
	ENDIF
	EXITM<16>
endm
IN_ARG1_READY equ (1 shl 1)
IN_ARG2_READY equ (1 shl 2)
IN_ARG3_READY equ (1 shl 3)
IN_ARG4_READY equ (1 shl 4)
IN_ARG5_READY equ (1 shl 5)
IN_ARG6_READY equ (1 shl 6)
IN_ARG7_READY equ (1 shl 7)
IN_ARG8_READY equ (1 shl 8)
IN_ARG9_READY equ (1 shl 9)
IN_ARG10_READY equ (1 shl 10)
IN_ARG11_READY equ (1 shl 11)
IN_ARG12_READY equ (1 shl 12)
IN_ARG13_READY equ (1 shl 13)
IN_ARG14_READY equ (1 shl 14)
invoke macro procname,in_arg1,in_arg2,in_arg3,in_arg4,in_arg5,in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
	ReadyInArgs=0
	IFB <in_arg14>
		ReadyInArgs=ReadyInArgs or IN_ARG14_READY
	ENDIF
	IFB <in_arg13>
		ReadyInArgs=ReadyInArgs or IN_ARG13_READY
	ENDIF
	IFB <in_arg12>
		ReadyInArgs=ReadyInArgs or IN_ARG12_READY
	ENDIF
	IFB <in_arg11>
		ReadyInArgs=ReadyInArgs or IN_ARG11_READY
	ENDIF
	IFB <in_arg10>
		ReadyInArgs=ReadyInArgs or IN_ARG10_READY
	ENDIF
	IFB <in_arg9>
		ReadyInArgs=ReadyInArgs or IN_ARG9_READY
	ENDIF
	IFB <in_arg8>
		ReadyInArgs=ReadyInArgs or IN_ARG8_READY
	ENDIF
	IFB <in_arg7>
		ReadyInArgs=ReadyInArgs or IN_ARG7_READY
	ENDIF
	IFB <in_arg6>
		ReadyInArgs=ReadyInArgs or IN_ARG6_READY
	ENDIF
	IFB <in_arg5>
		ReadyInArgs=ReadyInArgs or IN_ARG5_READY
	ENDIF
	IFB <in_arg4>
		ReadyInArgs=ReadyInArgs or IN_ARG4_READY
	ENDIF
	IFB <in_arg3>
		ReadyInArgs=ReadyInArgs or IN_ARG3_READY
	ENDIF
	IFB <in_arg2>
		ReadyInArgs=ReadyInArgs or IN_ARG2_READY
	ENDIF
	IFB <in_arg1>
		ReadyInArgs=ReadyInArgs or IN_ARG1_READY
	ENDIF
	IF rbpFirstArgBias LT rspBorder
	%	LoadEAX rbpArg5,in_arg5,IN_ARG5_READY
	%	LoadEAX rbpArg6,in_arg6,IN_ARG6_READY
	%	LoadEAX rbpArg7,in_arg7,IN_ARG7_READY
	%	LoadEAX rbpArg8,in_arg8,IN_ARG8_READY
	%	LoadEAX rbpArg9,in_arg9,IN_ARG9_READY
	%	LoadEAX rbpArg10,in_arg10,IN_ARG10_READY
	%	LoadEAX rbpArg11,in_arg11,IN_ARG11_READY
	%	LoadEAX rbpArg12,in_arg12,IN_ARG12_READY
	%	LoadEAX rbpArg13,in_arg13,IN_ARG13_READY
	%	LoadEAX rbpArg14,in_arg14,IN_ARG14_READY
		IF (ReadyInArgs and IN_ARG1_READY) EQ 0
		%	movReg64Arg rcx,in_arg1
			ReadyInArgs=ReadyInArgs or IN_ARG1_READY
		%	LoadSameInEDX in_arg1,in_arg2,IN_ARG2_READY,rcx,ecx
		%	LoadSameInR8 in_arg1,in_arg3,IN_ARG3_READY,rcx,ecx
		%	LoadSameInR9 in_arg1,in_arg4,IN_ARG4_READY,rcx,ecx
		%	LoadSameInMemR rbpArg5,in_arg1,in_arg5,IN_ARG5_READY,rcx,ecx
		%	LoadSameInMemR rbpArg6,in_arg1,in_arg6,IN_ARG6_READY,rcx,ecx
		%	LoadSameInMemR rbpArg7,in_arg1,in_arg7,IN_ARG7_READY,rcx,ecx
		%	LoadSameInMemR rbpArg8,in_arg1,in_arg8,IN_ARG8_READY,rcx,ecx
		%	LoadSameInMemR rbpArg9,in_arg1,in_arg9,IN_ARG9_READY,rcx,ecx
		%	LoadSameInMemR rbpArg10,in_arg1,in_arg10,IN_ARG10_READY,rcx,ecx
		%	LoadSameInMemR rbpArg11,in_arg1,in_arg11,IN_ARG11_READY,rcx,ecx
		%	LoadSameInMemR rbpArg12,in_arg1,in_arg12,IN_ARG12_READY,rcx,ecx
		%	LoadSameInMemR rbpArg13,in_arg1,in_arg13,IN_ARG13_READY,rcx,ecx
		%	LoadSameInMemR rbpArg14,in_arg1,in_arg14,IN_ARG14_READY,rcx,ecx
		ENDIF
		IF (ReadyInArgs and IN_ARG2_READY) EQ 0
		%	movReg64Arg rdx,in_arg2
			ReadyInArgs=ReadyInArgs or IN_ARG2_READY
		%	LoadSameInR8 in_arg2,in_arg3,IN_ARG3_READY,rdx,edx
		%	LoadSameInR9 in_arg2,in_arg4,IN_ARG4_READY,rdx,edx
		%	LoadSameInMemR rbpArg5,in_arg2,in_arg5,IN_ARG5_READY,rdx,edx
		%	LoadSameInMemR rbpArg6,in_arg2,in_arg6,IN_ARG6_READY,rdx,edx
		%	LoadSameInMemR rbpArg7,in_arg2,in_arg7,IN_ARG7_READY,rdx,edx
		%	LoadSameInMemR rbpArg8,in_arg2,in_arg8,IN_ARG8_READY,rdx,edx
		%	LoadSameInMemR rbpArg9,in_arg2,in_arg9,IN_ARG9_READY,rdx,edx
		%	LoadSameInMemR rbpArg10,in_arg2,in_arg10,IN_ARG10_READY,rdx,edx
		%	LoadSameInMemR rbpArg11,in_arg2,in_arg11,IN_ARG11_READY,rdx,edx
		%	LoadSameInMemR rbpArg12,in_arg2,in_arg12,IN_ARG12_READY,rdx,edx
		%	LoadSameInMemR rbpArg13,in_arg2,in_arg13,IN_ARG13_READY,rdx,edx
		%	LoadSameInMemR rbpArg14,in_arg2,in_arg14,IN_ARG14_READY,rdx,edx
		ENDIF
		IF (ReadyInArgs and IN_ARG3_READY) EQ 0
		%	movReg64Arg r8,in_arg3
			ReadyInArgs=ReadyInArgs or IN_ARG3_READY
		%	LoadSameInR9 in_arg3,in_arg4,IN_ARG4_READY,r8,r8d
		%	LoadSameInMemR rbpArg5,in_arg3,in_arg5,IN_ARG5_READY,r8,r8d
		%	LoadSameInMemR rbpArg6,in_arg3,in_arg6,IN_ARG6_READY,r8,r8d
		%	LoadSameInMemR rbpArg7,in_arg3,in_arg7,IN_ARG7_READY,r8,r8d
		%	LoadSameInMemR rbpArg8,in_arg3,in_arg8,IN_ARG8_READY,r8,r8d
		%	LoadSameInMemR rbpArg9,in_arg3,in_arg9,IN_ARG9_READY,r8,r8d
		%	LoadSameInMemR rbpArg10,in_arg3,in_arg10,IN_ARG10_READY,r8,r8d
		%	LoadSameInMemR rbpArg11,in_arg3,in_arg11,IN_ARG11_READY,r8,r8d
		%	LoadSameInMemR rbpArg12,in_arg3,in_arg12,IN_ARG12_READY,r8,r8d
		%	LoadSameInMemR rbpArg13,in_arg3,in_arg13,IN_ARG13_READY,r8,r8d
		%	LoadSameInMemR rbpArg14,in_arg3,in_arg14,IN_ARG14_READY,r8,r8d
		ENDIF
		IF (ReadyInArgs and IN_ARG4_READY) EQ 0
		%	movReg64Arg r9,in_arg4
			ReadyInArgs=ReadyInArgs or IN_ARG4_READY
		%	LoadSameInMemR rbpArg5,in_arg4,in_arg5,IN_ARG5_READY,r9,r9d
		%	LoadSameInMemR rbpArg6,in_arg4,in_arg6,IN_ARG6_READY,r9,r9d
		%	LoadSameInMemR rbpArg7,in_arg4,in_arg7,IN_ARG7_READY,r9,r9d
		%	LoadSameInMemR rbpArg8,in_arg4,in_arg8,IN_ARG8_READY,r9,r9d
		%	LoadSameInMemR rbpArg9,in_arg4,in_arg9,IN_ARG9_READY,r9,r9d
		%	LoadSameInMemR rbpArg10,in_arg4,in_arg10,IN_ARG10_READY,r9,r9d
		%	LoadSameInMemR rbpArg11,in_arg4,in_arg11,IN_ARG11_READY,r9,r9d
		%	LoadSameInMemR rbpArg12,in_arg4,in_arg12,IN_ARG12_READY,r9,r9d
		%	LoadSameInMemR rbpArg13,in_arg4,in_arg13,IN_ARG13_READY,r9,r9d
		%	LoadSameInMemR rbpArg14,in_arg4,in_arg14,IN_ARG14_READY,r9,r9d
		ENDIF
		IF (ReadyInArgs and IN_ARG5_READY) EQ 0
		%	SetType rbpArg5,in_arg5
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg5,in_arg5
			ELSE
			%	AppearsCount in_arg5,in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg5
				%	LoadSameInMemR rbpArg5,in_arg5,in_arg5,IN_ARG5_READY,rax,eax
				%	LoadSameInMemR rbpArg6,in_arg5,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rbpArg7,in_arg5,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rbpArg8,in_arg5,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg5,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg5,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg5,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg5,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg5,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg5,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg5,in_arg5
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG5_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG6_READY) EQ 0
		%	SetType rbpArg6,in_arg6
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg6,in_arg6
			ELSE
			%	AppearsCount in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg6
				%	LoadSameInMemR rbpArg6,in_arg6,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rbpArg7,in_arg6,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rbpArg8,in_arg6,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg6,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg6,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg6,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg6,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg6,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg6,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg6,in_arg6
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG6_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG7_READY) EQ 0
		%	SetType rbpArg7,in_arg7
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg7,in_arg7
			ELSE
			%	AppearsCount in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg7
				%	LoadSameInMemR rbpArg7,in_arg7,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rbpArg8,in_arg7,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg7,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg7,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg7,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg7,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg7,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg7,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg7,in_arg7
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG7_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG8_READY) EQ 0
		%	SetType rbpArg8,in_arg8
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg8,in_arg8
			ELSE
			%	AppearsCount in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg8
				%	LoadSameInMemR rbpArg8,in_arg8,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg8,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg8,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg8,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg8,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg8,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg8,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg8,in_arg8
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG8_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG9_READY) EQ 0
		%	SetType rbpArg9,in_arg9
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg9,in_arg9
			ELSE
			%	AppearsCount in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg9
				%	LoadSameInMemR rbpArg9,in_arg9,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg9,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg9,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg9,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg9,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg9,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg9,in_arg9
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG9_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG10_READY) EQ 0
		%	SetType rbpArg10,in_arg10
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg10,in_arg10
			ELSE
			%	AppearsCount in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg10
				%	LoadSameInMemR rbpArg10,in_arg10,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg10,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg10,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg10,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg10,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg10,in_arg10
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG10_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG11_READY) EQ 0
			SetType rbpArg11,in_arg11
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg11,in_arg11
			ELSE
			%	AppearsCount in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg11
				%	LoadSameInMemR rbpArg11,in_arg11,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg11,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg11,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg11,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg11,in_arg11
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG11_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG12_READY) EQ 0
		%	SetType rbpArg12,in_arg12
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg12,in_arg12
			ELSE
			%	AppearsCount in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg12
				%	LoadSameInMemR rbpArg12,in_arg12,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg12,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg12,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg12,in_arg12
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG12_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG13_READY) EQ 0
		%	SetType rbpArg13,in_arg13
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg13,in_arg13
			ELSE
			%	AppearsCount in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg13
				%	LoadSameInMemR rbpArg13,in_arg13,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg13,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg13,in_arg13
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG13_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG14_READY) EQ 0
		%	movMem64Arg rbpArg13,in_arg14
		%	ReadyInArgs=ReadyInArgs or IN_ARG14_READY
		ENDIF
	ELSE
	%	LoadEAX rspArg5,in_arg5,IN_ARG5_READY
	%	LoadEAX rspArg6,in_arg6,IN_ARG6_READY
	%	LoadEAX rspArg7,in_arg7,IN_ARG7_READY
	%	LoadEAX rspArg8,in_arg8,IN_ARG8_READY
	%	LoadEAX rspArg9,in_arg9,IN_ARG9_READY
	%	LoadEAX rspArg10,in_arg10,IN_ARG10_READY
	%	LoadEAX rspArg11,in_arg11,IN_ARG11_READY
	%	LoadEAX rspArg12,in_arg12,IN_ARG12_READY
	%	LoadEAX rspArg13,in_arg13,IN_ARG13_READY
	%	LoadEAX rspArg14,in_arg14,IN_ARG14_READY
		IF (ReadyInArgs and IN_ARG1_READY) EQ 0
		%	movReg64Arg rcx,in_arg1
			ReadyInArgs=ReadyInArgs or IN_ARG1_READY
		%	LoadSameInEDX in_arg1,in_arg2,IN_ARG2_READY,rcx,ecx
		%	LoadSameInR8 in_arg1,in_arg3,IN_ARG3_READY,rcx,ecx
		%	LoadSameInR9 in_arg1,in_arg4,IN_ARG4_READY,rcx,ecx
		%	LoadSameInMemR rspArg5,in_arg1,in_arg5,IN_ARG5_READY,rcx,ecx
		%	LoadSameInMemR rspArg6,in_arg1,in_arg6,IN_ARG6_READY,rcx,ecx
		%	LoadSameInMemR rspArg7,in_arg1,in_arg7,IN_ARG7_READY,rcx,ecx
		%	LoadSameInMemR rspArg8,in_arg1,in_arg8,IN_ARG8_READY,rcx,ecx
		%	LoadSameInMemR rspArg9,in_arg1,in_arg9,IN_ARG9_READY,rcx,ecx
		%	LoadSameInMemR rspArg10,in_arg1,in_arg10,IN_ARG10_READY,rcx,ecx
		%	LoadSameInMemR rspArg11,in_arg1,in_arg11,IN_ARG11_READY,rcx,ecx
		%	LoadSameInMemR rspArg12,in_arg1,in_arg12,IN_ARG12_READY,rcx,ecx
		%	LoadSameInMemR rspArg13,in_arg1,in_arg13,IN_ARG13_READY,rcx,ecx
		%	LoadSameInMemR rspArg14,in_arg1,in_arg14,IN_ARG14_READY,rcx,ecx
		ENDIF
		IF (ReadyInArgs and IN_ARG2_READY) EQ 0
		%	movReg64Arg rdx,in_arg2
			ReadyInArgs=ReadyInArgs or IN_ARG2_READY
		%	LoadSameInR8 in_arg2,in_arg3,IN_ARG3_READY,rdx,edx
		%	LoadSameInR9 in_arg2,in_arg4,IN_ARG4_READY,rdx,edx
		%	LoadSameInMemR rspArg5,in_arg2,in_arg5,IN_ARG5_READY,rdx,edx
		%	LoadSameInMemR rspArg6,in_arg2,in_arg6,IN_ARG6_READY,rdx,edx
		%	LoadSameInMemR rspArg7,in_arg2,in_arg7,IN_ARG7_READY,rdx,edx
		%	LoadSameInMemR rspArg8,in_arg2,in_arg8,IN_ARG8_READY,rdx,edx
		%	LoadSameInMemR rspArg9,in_arg2,in_arg9,IN_ARG9_READY,rdx,edx
		%	LoadSameInMemR rspArg10,in_arg2,in_arg10,IN_ARG10_READY,rdx,edx
		%	LoadSameInMemR rspArg11,in_arg2,in_arg11,IN_ARG11_READY,rdx,edx
		%	LoadSameInMemR rspArg12,in_arg2,in_arg12,IN_ARG12_READY,rdx,edx
		%	LoadSameInMemR rspArg13,in_arg2,in_arg13,IN_ARG13_READY,rdx,edx
		%	LoadSameInMemR rspArg14,in_arg2,in_arg14,IN_ARG14_READY,rdx,edx
		ENDIF
		IF (ReadyInArgs and IN_ARG3_READY) EQ 0
		%	movReg64Arg r8,in_arg3
			ReadyInArgs=ReadyInArgs or IN_ARG3_READY
		%	LoadSameInR9 in_arg3,in_arg4,IN_ARG4_READY,r8,r8d
		%	LoadSameInMemR rspArg5,in_arg3,in_arg5,IN_ARG5_READY,r8,r8d
		%	LoadSameInMemR rspArg6,in_arg3,in_arg6,IN_ARG6_READY,r8,r8d
		%	LoadSameInMemR rspArg7,in_arg3,in_arg7,IN_ARG7_READY,r8,r8d
		%	LoadSameInMemR rspArg8,in_arg3,in_arg8,IN_ARG8_READY,r8,r8d
		%	LoadSameInMemR rspArg9,in_arg3,in_arg9,IN_ARG9_READY,r8,r8d
		%	LoadSameInMemR rspArg10,in_arg3,in_arg10,IN_ARG10_READY,r8,r8d
		%	LoadSameInMemR rspArg11,in_arg3,in_arg11,IN_ARG11_READY,r8,r8d
		%	LoadSameInMemR rspArg12,in_arg3,in_arg12,IN_ARG12_READY,r8,r8d
		%	LoadSameInMemR rspArg13,in_arg3,in_arg13,IN_ARG13_READY,r8,r8d
		%	LoadSameInMemR rspArg14,in_arg3,in_arg14,IN_ARG14_READY,r8,r8d
		ENDIF
		IF (ReadyInArgs and IN_ARG4_READY) EQ 0
		%	movReg64Arg r9,in_arg4
			ReadyInArgs=ReadyInArgs or IN_ARG4_READY
		%	LoadSameInMemR rspArg5,in_arg4,in_arg5,IN_ARG5_READY,r9,r9d
		%	LoadSameInMemR rspArg6,in_arg4,in_arg6,IN_ARG6_READY,r9,r9d
		%	LoadSameInMemR rspArg7,in_arg4,in_arg7,IN_ARG7_READY,r9,r9d
		%	LoadSameInMemR rspArg8,in_arg4,in_arg8,IN_ARG8_READY,r9,r9d
		%	LoadSameInMemR rspArg9,in_arg4,in_arg9,IN_ARG9_READY,r9,r9d
		%	LoadSameInMemR rspArg10,in_arg4,in_arg10,IN_ARG10_READY,r9,r9d
		%	LoadSameInMemR rspArg11,in_arg4,in_arg11,IN_ARG11_READY,r9,r9d
		%	LoadSameInMemR rspArg12,in_arg4,in_arg12,IN_ARG12_READY,r9,r9d
		%	LoadSameInMemR rspArg13,in_arg4,in_arg13,IN_ARG13_READY,r9,r9d
		%	LoadSameInMemR rspArg14,in_arg4,in_arg14,IN_ARG14_READY,r9,r9d
		ENDIF
		IF (ReadyInArgs and IN_ARG5_READY) EQ 0
		%	SetType rspArg5,in_arg5
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg5,in_arg5
			ELSE
			%	AppearsCount in_arg5,in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg5
				%	LoadSameInMemR rspArg5,in_arg5,in_arg5,IN_ARG5_READY,rax,eax
				%	LoadSameInMemR rspArg6,in_arg5,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rspArg7,in_arg5,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rspArg8,in_arg5,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg5,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg5,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg5,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg5,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg5,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg5,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg5,in_arg5
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG5_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG6_READY) EQ 0
		%	SetType rspArg6,in_arg6
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg6,in_arg6
			ELSE
			%	AppearsCount in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg6
				%	LoadSameInMemR rspArg6,in_arg6,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rspArg7,in_arg6,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rspArg8,in_arg6,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg6,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg6,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg6,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg6,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg6,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg6,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg6,in_arg6
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG6_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG7_READY) EQ 0
		%	SetType rspArg7,in_arg7
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg7,in_arg7
			ELSE
			%	AppearsCount in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg7
				%	LoadSameInMemR rspArg7,in_arg7,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rspArg8,in_arg7,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg7,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg7,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg7,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg7,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg7,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg7,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg7,in_arg7
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG7_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG8_READY) EQ 0
		%	SetType rspArg8,in_arg8
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg8,in_arg8
			ELSE
			%	AppearsCount in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg8
				%	LoadSameInMemR rspArg8,in_arg8,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg8,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg8,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg8,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg8,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg8,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg8,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg8,in_arg8
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG8_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG9_READY) EQ 0
		%	SetType rspArg9,in_arg9
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg9,in_arg9
			ELSE
			%	AppearsCount in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg9
				%	LoadSameInMemR rspArg9,in_arg9,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg9,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg9,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg9,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg9,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg9,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg9,in_arg9
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG9_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG10_READY) EQ 0
		%	SetType rspArg10,in_arg10
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg10,in_arg10
			ELSE
			%	AppearsCount in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg10
				%	LoadSameInMemR rspArg10,in_arg10,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg10,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg10,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg10,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg10,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg10,in_arg10
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG10_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG11_READY) EQ 0
		%	SetType rspArg11,in_arg11
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg11,in_arg11
			ELSE
			%	AppearsCount in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg11
				%	LoadSameInMemR rspArg11,in_arg11,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg11,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg11,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg11,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg11,in_arg11
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG11_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG12_READY) EQ 0
		%	SetType rspArg12,in_arg12
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg12,in_arg12
			ELSE
			%	AppearsCount in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg12
				%	LoadSameInMemR rspArg12,in_arg12,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg12,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg12,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg12,in_arg12
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG12_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG13_READY) EQ 0
		%	SetType rspArg13,in_arg13
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg13,in_arg13
			ELSE
			%	AppearsCount in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg13
				%	LoadSameInMemR rspArg13,in_arg13,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg13,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg13,in_arg13
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG13_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG14_READY) EQ 0
		%	movMem64Arg rspArg13,in_arg14
		%	ReadyInArgs=ReadyInArgs or IN_ARG14_READY
		ENDIF
	ENDIF
	IF (OPATTR (procname)) EQ (VALID_REF OR IMM_EXPR)
		mov rax,[rcx]
		call procname[rax]
	ELSE
		call procname
	ENDIF
endm
I macro procname,in_arg1,in_arg2,in_arg3,in_arg4,in_arg5,in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
	ReadyInArgs=0
	IFB <in_arg14>
		ReadyInArgs=ReadyInArgs or IN_ARG14_READY
	ENDIF
	IFB <in_arg13>
		ReadyInArgs=ReadyInArgs or IN_ARG13_READY
	ENDIF
	IFB <in_arg12>
		ReadyInArgs=ReadyInArgs or IN_ARG12_READY
	ENDIF
	IFB <in_arg11>
		ReadyInArgs=ReadyInArgs or IN_ARG11_READY
	ENDIF
	IFB <in_arg10>
		ReadyInArgs=ReadyInArgs or IN_ARG10_READY
	ENDIF
	IFB <in_arg9>
		ReadyInArgs=ReadyInArgs or IN_ARG9_READY
	ENDIF
	IFB <in_arg8>
		ReadyInArgs=ReadyInArgs or IN_ARG8_READY
	ENDIF
	IFB <in_arg7>
		ReadyInArgs=ReadyInArgs or IN_ARG7_READY
	ENDIF
	IFB <in_arg6>
		ReadyInArgs=ReadyInArgs or IN_ARG6_READY
	ENDIF
	IFB <in_arg5>
		ReadyInArgs=ReadyInArgs or IN_ARG5_READY
	ENDIF
	IFB <in_arg4>
		ReadyInArgs=ReadyInArgs or IN_ARG4_READY
	ENDIF
	IFB <in_arg3>
		ReadyInArgs=ReadyInArgs or IN_ARG3_READY
	ENDIF
	IFB <in_arg2>
		ReadyInArgs=ReadyInArgs or IN_ARG2_READY
	ENDIF
	IFB <in_arg1>
		ReadyInArgs=ReadyInArgs or IN_ARG1_READY
	ENDIF
	IF rbpFirstArgBias LT rspBorder
	%	LoadEAX rbpArg5,in_arg5,IN_ARG5_READY
	%	LoadEAX rbpArg6,in_arg6,IN_ARG6_READY
	%	LoadEAX rbpArg7,in_arg7,IN_ARG7_READY
	%	LoadEAX rbpArg8,in_arg8,IN_ARG8_READY
	%	LoadEAX rbpArg9,in_arg9,IN_ARG9_READY
	%	LoadEAX rbpArg10,in_arg10,IN_ARG10_READY
	%	LoadEAX rbpArg11,in_arg11,IN_ARG11_READY
	%	LoadEAX rbpArg12,in_arg12,IN_ARG12_READY
	%	LoadEAX rbpArg13,in_arg13,IN_ARG13_READY
	%	LoadEAX rbpArg14,in_arg14,IN_ARG14_READY
		IF (ReadyInArgs and IN_ARG1_READY) EQ 0
		%	movReg64Arg rcx,in_arg1
			ReadyInArgs=ReadyInArgs or IN_ARG1_READY
		%	LoadSameInEDX in_arg1,in_arg2,IN_ARG2_READY,rcx,ecx
		%	LoadSameInR8 in_arg1,in_arg3,IN_ARG3_READY,rcx,ecx
		%	LoadSameInR9 in_arg1,in_arg4,IN_ARG4_READY,rcx,ecx
		%	LoadSameInMemR rbpArg5,in_arg1,in_arg5,IN_ARG5_READY,rcx,ecx
		%	LoadSameInMemR rbpArg6,in_arg1,in_arg6,IN_ARG6_READY,rcx,ecx
		%	LoadSameInMemR rbpArg7,in_arg1,in_arg7,IN_ARG7_READY,rcx,ecx
		%	LoadSameInMemR rbpArg8,in_arg1,in_arg8,IN_ARG8_READY,rcx,ecx
		%	LoadSameInMemR rbpArg9,in_arg1,in_arg9,IN_ARG9_READY,rcx,ecx
		%	LoadSameInMemR rbpArg10,in_arg1,in_arg10,IN_ARG10_READY,rcx,ecx
		%	LoadSameInMemR rbpArg11,in_arg1,in_arg11,IN_ARG11_READY,rcx,ecx
		%	LoadSameInMemR rbpArg12,in_arg1,in_arg12,IN_ARG12_READY,rcx,ecx
		%	LoadSameInMemR rbpArg13,in_arg1,in_arg13,IN_ARG13_READY,rcx,ecx
		%	LoadSameInMemR rbpArg14,in_arg1,in_arg14,IN_ARG14_READY,rcx,ecx
		ENDIF
		IF (ReadyInArgs and IN_ARG2_READY) EQ 0
		%	movReg64Arg rdx,in_arg2
			ReadyInArgs=ReadyInArgs or IN_ARG2_READY
		%	LoadSameInR8 in_arg2,in_arg3,IN_ARG3_READY,rdx,edx
		%	LoadSameInR9 in_arg2,in_arg4,IN_ARG4_READY,rdx,edx
		%	LoadSameInMemR rbpArg5,in_arg2,in_arg5,IN_ARG5_READY,rdx,edx
		%	LoadSameInMemR rbpArg6,in_arg2,in_arg6,IN_ARG6_READY,rdx,edx
		%	LoadSameInMemR rbpArg7,in_arg2,in_arg7,IN_ARG7_READY,rdx,edx
		%	LoadSameInMemR rbpArg8,in_arg2,in_arg8,IN_ARG8_READY,rdx,edx
		%	LoadSameInMemR rbpArg9,in_arg2,in_arg9,IN_ARG9_READY,rdx,edx
		%	LoadSameInMemR rbpArg10,in_arg2,in_arg10,IN_ARG10_READY,rdx,edx
		%	LoadSameInMemR rbpArg11,in_arg2,in_arg11,IN_ARG11_READY,rdx,edx
		%	LoadSameInMemR rbpArg12,in_arg2,in_arg12,IN_ARG12_READY,rdx,edx
		%	LoadSameInMemR rbpArg13,in_arg2,in_arg13,IN_ARG13_READY,rdx,edx
		%	LoadSameInMemR rbpArg14,in_arg2,in_arg14,IN_ARG14_READY,rdx,edx
		ENDIF
		IF (ReadyInArgs and IN_ARG3_READY) EQ 0
		%	movReg64Arg r8,in_arg3
			ReadyInArgs=ReadyInArgs or IN_ARG3_READY
		%	LoadSameInR9 in_arg3,in_arg4,IN_ARG4_READY,r8,r8d
		%	LoadSameInMemR rbpArg5,in_arg3,in_arg5,IN_ARG5_READY,r8,r8d
		%	LoadSameInMemR rbpArg6,in_arg3,in_arg6,IN_ARG6_READY,r8,r8d
		%	LoadSameInMemR rbpArg7,in_arg3,in_arg7,IN_ARG7_READY,r8,r8d
		%	LoadSameInMemR rbpArg8,in_arg3,in_arg8,IN_ARG8_READY,r8,r8d
		%	LoadSameInMemR rbpArg9,in_arg3,in_arg9,IN_ARG9_READY,r8,r8d
		%	LoadSameInMemR rbpArg10,in_arg3,in_arg10,IN_ARG10_READY,r8,r8d
		%	LoadSameInMemR rbpArg11,in_arg3,in_arg11,IN_ARG11_READY,r8,r8d
		%	LoadSameInMemR rbpArg12,in_arg3,in_arg12,IN_ARG12_READY,r8,r8d
		%	LoadSameInMemR rbpArg13,in_arg3,in_arg13,IN_ARG13_READY,r8,r8d
		%	LoadSameInMemR rbpArg14,in_arg3,in_arg14,IN_ARG14_READY,r8,r8d
		ENDIF
		IF (ReadyInArgs and IN_ARG4_READY) EQ 0
		%	movReg64Arg r9,in_arg4
			ReadyInArgs=ReadyInArgs or IN_ARG4_READY
		%	LoadSameInMemR rbpArg5,in_arg4,in_arg5,IN_ARG5_READY,r9,r9d
		%	LoadSameInMemR rbpArg6,in_arg4,in_arg6,IN_ARG6_READY,r9,r9d
		%	LoadSameInMemR rbpArg7,in_arg4,in_arg7,IN_ARG7_READY,r9,r9d
		%	LoadSameInMemR rbpArg8,in_arg4,in_arg8,IN_ARG8_READY,r9,r9d
		%	LoadSameInMemR rbpArg9,in_arg4,in_arg9,IN_ARG9_READY,r9,r9d
		%	LoadSameInMemR rbpArg10,in_arg4,in_arg10,IN_ARG10_READY,r9,r9d
		%	LoadSameInMemR rbpArg11,in_arg4,in_arg11,IN_ARG11_READY,r9,r9d
		%	LoadSameInMemR rbpArg12,in_arg4,in_arg12,IN_ARG12_READY,r9,r9d
		%	LoadSameInMemR rbpArg13,in_arg4,in_arg13,IN_ARG13_READY,r9,r9d
		%	LoadSameInMemR rbpArg14,in_arg4,in_arg14,IN_ARG14_READY,r9,r9d
		ENDIF
		IF (ReadyInArgs and IN_ARG5_READY) EQ 0
		%	SetType rbpArg5,in_arg5
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg5,in_arg5
			ELSE
			%	AppearsCount in_arg5,in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg5
				%	LoadSameInMemR rbpArg5,in_arg5,in_arg5,IN_ARG5_READY,rax,eax
				%	LoadSameInMemR rbpArg6,in_arg5,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rbpArg7,in_arg5,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rbpArg8,in_arg5,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg5,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg5,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg5,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg5,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg5,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg5,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg5,in_arg5
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG5_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG6_READY) EQ 0
		%	SetType rbpArg6,in_arg6
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg6,in_arg6
			ELSE
			%	AppearsCount in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg6
				%	LoadSameInMemR rbpArg6,in_arg6,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rbpArg7,in_arg6,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rbpArg8,in_arg6,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg6,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg6,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg6,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg6,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg6,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg6,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg6,in_arg6
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG6_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG7_READY) EQ 0
		%	SetType rbpArg7,in_arg7
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg7,in_arg7
			ELSE
			%	AppearsCount in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg7
				%	LoadSameInMemR rbpArg7,in_arg7,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rbpArg8,in_arg7,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg7,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg7,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg7,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg7,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg7,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg7,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg7,in_arg7
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG7_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG8_READY) EQ 0
		%	SetType rbpArg8,in_arg8
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg8,in_arg8
			ELSE
			%	AppearsCount in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg8
				%	LoadSameInMemR rbpArg8,in_arg8,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rbpArg9,in_arg8,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg8,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg8,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg8,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg8,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg8,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg8,in_arg8
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG8_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG9_READY) EQ 0
		%	SetType rbpArg9,in_arg9
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg9,in_arg9
			ELSE
			%	AppearsCount in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg9
				%	LoadSameInMemR rbpArg9,in_arg9,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rbpArg10,in_arg9,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg9,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg9,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg9,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg9,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg9,in_arg9
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG9_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG10_READY) EQ 0
		%	SetType rbpArg10,in_arg10
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg10,in_arg10
			ELSE
			%	AppearsCount in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg10
				%	LoadSameInMemR rbpArg10,in_arg10,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rbpArg11,in_arg10,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg10,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg10,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg10,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg10,in_arg10
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG10_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG11_READY) EQ 0
			SetType rbpArg11,in_arg11
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg11,in_arg11
			ELSE
			%	AppearsCount in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg11
				%	LoadSameInMemR rbpArg11,in_arg11,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rbpArg12,in_arg11,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg11,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg11,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg11,in_arg11
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG11_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG12_READY) EQ 0
		%	SetType rbpArg12,in_arg12
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg12,in_arg12
			ELSE
			%	AppearsCount in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg12
				%	LoadSameInMemR rbpArg12,in_arg12,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rbpArg13,in_arg12,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg12,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg12,in_arg12
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG12_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG13_READY) EQ 0
		%	SetType rbpArg13,in_arg13
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rbpArg13,in_arg13
			ELSE
			%	AppearsCount in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg13
				%	LoadSameInMemR rbpArg13,in_arg13,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rbpArg14,in_arg13,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rbpArg13,in_arg13
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG13_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG14_READY) EQ 0
		%	movMem64Arg rbpArg13,in_arg14
		%	ReadyInArgs=ReadyInArgs or IN_ARG14_READY
		ENDIF
	ELSE
	%	LoadEAX rspArg5,in_arg5,IN_ARG5_READY
	%	LoadEAX rspArg6,in_arg6,IN_ARG6_READY
	%	LoadEAX rspArg7,in_arg7,IN_ARG7_READY
	%	LoadEAX rspArg8,in_arg8,IN_ARG8_READY
	%	LoadEAX rspArg9,in_arg9,IN_ARG9_READY
	%	LoadEAX rspArg10,in_arg10,IN_ARG10_READY
	%	LoadEAX rspArg11,in_arg11,IN_ARG11_READY
	%	LoadEAX rspArg12,in_arg12,IN_ARG12_READY
	%	LoadEAX rspArg13,in_arg13,IN_ARG13_READY
	%	LoadEAX rspArg14,in_arg14,IN_ARG14_READY
		IF (ReadyInArgs and IN_ARG1_READY) EQ 0
		%	movReg64Arg rcx,in_arg1
			ReadyInArgs=ReadyInArgs or IN_ARG1_READY
		%	LoadSameInEDX in_arg1,in_arg2,IN_ARG2_READY,rcx,ecx
		%	LoadSameInR8 in_arg1,in_arg3,IN_ARG3_READY,rcx,ecx
		%	LoadSameInR9 in_arg1,in_arg4,IN_ARG4_READY,rcx,ecx
		%	LoadSameInMemR rspArg5,in_arg1,in_arg5,IN_ARG5_READY,rcx,ecx
		%	LoadSameInMemR rspArg6,in_arg1,in_arg6,IN_ARG6_READY,rcx,ecx
		%	LoadSameInMemR rspArg7,in_arg1,in_arg7,IN_ARG7_READY,rcx,ecx
		%	LoadSameInMemR rspArg8,in_arg1,in_arg8,IN_ARG8_READY,rcx,ecx
		%	LoadSameInMemR rspArg9,in_arg1,in_arg9,IN_ARG9_READY,rcx,ecx
		%	LoadSameInMemR rspArg10,in_arg1,in_arg10,IN_ARG10_READY,rcx,ecx
		%	LoadSameInMemR rspArg11,in_arg1,in_arg11,IN_ARG11_READY,rcx,ecx
		%	LoadSameInMemR rspArg12,in_arg1,in_arg12,IN_ARG12_READY,rcx,ecx
		%	LoadSameInMemR rspArg13,in_arg1,in_arg13,IN_ARG13_READY,rcx,ecx
		%	LoadSameInMemR rspArg14,in_arg1,in_arg14,IN_ARG14_READY,rcx,ecx
		ENDIF
		IF (ReadyInArgs and IN_ARG2_READY) EQ 0
		%	movReg64Arg rdx,in_arg2
			ReadyInArgs=ReadyInArgs or IN_ARG2_READY
		%	LoadSameInR8 in_arg2,in_arg3,IN_ARG3_READY,rdx,edx
		%	LoadSameInR9 in_arg2,in_arg4,IN_ARG4_READY,rdx,edx
		%	LoadSameInMemR rspArg5,in_arg2,in_arg5,IN_ARG5_READY,rdx,edx
		%	LoadSameInMemR rspArg6,in_arg2,in_arg6,IN_ARG6_READY,rdx,edx
		%	LoadSameInMemR rspArg7,in_arg2,in_arg7,IN_ARG7_READY,rdx,edx
		%	LoadSameInMemR rspArg8,in_arg2,in_arg8,IN_ARG8_READY,rdx,edx
		%	LoadSameInMemR rspArg9,in_arg2,in_arg9,IN_ARG9_READY,rdx,edx
		%	LoadSameInMemR rspArg10,in_arg2,in_arg10,IN_ARG10_READY,rdx,edx
		%	LoadSameInMemR rspArg11,in_arg2,in_arg11,IN_ARG11_READY,rdx,edx
		%	LoadSameInMemR rspArg12,in_arg2,in_arg12,IN_ARG12_READY,rdx,edx
		%	LoadSameInMemR rspArg13,in_arg2,in_arg13,IN_ARG13_READY,rdx,edx
		%	LoadSameInMemR rspArg14,in_arg2,in_arg14,IN_ARG14_READY,rdx,edx
		ENDIF
		IF (ReadyInArgs and IN_ARG3_READY) EQ 0
		%	movReg64Arg r8,in_arg3
			ReadyInArgs=ReadyInArgs or IN_ARG3_READY
		%	LoadSameInR9 in_arg3,in_arg4,IN_ARG4_READY,r8,r8d
		%	LoadSameInMemR rspArg5,in_arg3,in_arg5,IN_ARG5_READY,r8,r8d
		%	LoadSameInMemR rspArg6,in_arg3,in_arg6,IN_ARG6_READY,r8,r8d
		%	LoadSameInMemR rspArg7,in_arg3,in_arg7,IN_ARG7_READY,r8,r8d
		%	LoadSameInMemR rspArg8,in_arg3,in_arg8,IN_ARG8_READY,r8,r8d
		%	LoadSameInMemR rspArg9,in_arg3,in_arg9,IN_ARG9_READY,r8,r8d
		%	LoadSameInMemR rspArg10,in_arg3,in_arg10,IN_ARG10_READY,r8,r8d
		%	LoadSameInMemR rspArg11,in_arg3,in_arg11,IN_ARG11_READY,r8,r8d
		%	LoadSameInMemR rspArg12,in_arg3,in_arg12,IN_ARG12_READY,r8,r8d
		%	LoadSameInMemR rspArg13,in_arg3,in_arg13,IN_ARG13_READY,r8,r8d
		%	LoadSameInMemR rspArg14,in_arg3,in_arg14,IN_ARG14_READY,r8,r8d
		ENDIF
		IF (ReadyInArgs and IN_ARG4_READY) EQ 0
		%	movReg64Arg r9,in_arg4
			ReadyInArgs=ReadyInArgs or IN_ARG4_READY
		%	LoadSameInMemR rspArg5,in_arg4,in_arg5,IN_ARG5_READY,r9,r9d
		%	LoadSameInMemR rspArg6,in_arg4,in_arg6,IN_ARG6_READY,r9,r9d
		%	LoadSameInMemR rspArg7,in_arg4,in_arg7,IN_ARG7_READY,r9,r9d
		%	LoadSameInMemR rspArg8,in_arg4,in_arg8,IN_ARG8_READY,r9,r9d
		%	LoadSameInMemR rspArg9,in_arg4,in_arg9,IN_ARG9_READY,r9,r9d
		%	LoadSameInMemR rspArg10,in_arg4,in_arg10,IN_ARG10_READY,r9,r9d
		%	LoadSameInMemR rspArg11,in_arg4,in_arg11,IN_ARG11_READY,r9,r9d
		%	LoadSameInMemR rspArg12,in_arg4,in_arg12,IN_ARG12_READY,r9,r9d
		%	LoadSameInMemR rspArg13,in_arg4,in_arg13,IN_ARG13_READY,r9,r9d
		%	LoadSameInMemR rspArg14,in_arg4,in_arg14,IN_ARG14_READY,r9,r9d
		ENDIF
		IF (ReadyInArgs and IN_ARG5_READY) EQ 0
		%	SetType rspArg5,in_arg5
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg5,in_arg5
			ELSE
			%	AppearsCount in_arg5,in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg5
				%	LoadSameInMemR rspArg5,in_arg5,in_arg5,IN_ARG5_READY,rax,eax
				%	LoadSameInMemR rspArg6,in_arg5,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rspArg7,in_arg5,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rspArg8,in_arg5,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg5,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg5,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg5,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg5,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg5,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg5,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg5,in_arg5
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG5_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG6_READY) EQ 0
		%	SetType rspArg6,in_arg6
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg6,in_arg6
			ELSE
			%	AppearsCount in_arg6,in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg6
				%	LoadSameInMemR rspArg6,in_arg6,in_arg6,IN_ARG6_READY,rax,eax
				%	LoadSameInMemR rspArg7,in_arg6,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rspArg8,in_arg6,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg6,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg6,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg6,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg6,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg6,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg6,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg6,in_arg6
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG6_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG7_READY) EQ 0
		%	SetType rspArg7,in_arg7
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg7,in_arg7
			ELSE
			%	AppearsCount in_arg7,in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg7
				%	LoadSameInMemR rspArg7,in_arg7,in_arg7,IN_ARG7_READY,rax,eax
				%	LoadSameInMemR rspArg8,in_arg7,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg7,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg7,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg7,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg7,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg7,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg7,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg7,in_arg7
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG7_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG8_READY) EQ 0
		%	SetType rspArg8,in_arg8
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg8,in_arg8
			ELSE
			%	AppearsCount in_arg8,in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg8
				%	LoadSameInMemR rspArg8,in_arg8,in_arg8,IN_ARG8_READY,rax,eax
				%	LoadSameInMemR rspArg9,in_arg8,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg8,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg8,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg8,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg8,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg8,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg8,in_arg8
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG8_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG9_READY) EQ 0
		%	SetType rspArg9,in_arg9
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg9,in_arg9
			ELSE
			%	AppearsCount in_arg9,in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg9
				%	LoadSameInMemR rspArg9,in_arg9,in_arg9,IN_ARG9_READY,rax,eax
				%	LoadSameInMemR rspArg10,in_arg9,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg9,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg9,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg9,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg9,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg9,in_arg9
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG9_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG10_READY) EQ 0
		%	SetType rspArg10,in_arg10
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg10,in_arg10
			ELSE
			%	AppearsCount in_arg10,in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg10
				%	LoadSameInMemR rspArg10,in_arg10,in_arg10,IN_ARG10_READY,rax,eax
				%	LoadSameInMemR rspArg11,in_arg10,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg10,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg10,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg10,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg10,in_arg10
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG10_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG11_READY) EQ 0
		%	SetType rspArg11,in_arg11
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg11,in_arg11
			ELSE
			%	AppearsCount in_arg11,in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg11
				%	LoadSameInMemR rspArg11,in_arg11,in_arg11,IN_ARG11_READY,rax,eax
				%	LoadSameInMemR rspArg12,in_arg11,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg11,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg11,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg11,in_arg11
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG11_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG12_READY) EQ 0
		%	SetType rspArg12,in_arg12
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg12,in_arg12
			ELSE
			%	AppearsCount in_arg12,in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg12
				%	LoadSameInMemR rspArg12,in_arg12,in_arg12,IN_ARG12_READY,rax,eax
				%	LoadSameInMemR rspArg13,in_arg12,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg12,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg12,in_arg12
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG12_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG13_READY) EQ 0
		%	SetType rspArg13,in_arg13
			IF (itemOpattr and REG_EXPR)
			%	movMem64Arg rspArg13,in_arg13
			ELSE
			%	AppearsCount in_arg13,in_arg14
				IF __AppearsCount GT 1
				%	movReg64Arg rax,in_arg13
				%	LoadSameInMemR rspArg13,in_arg13,in_arg13,IN_ARG13_READY,rax,eax
				%	LoadSameInMemR rspArg14,in_arg13,in_arg14,IN_ARG14_READY,rax,eax
				ELSE
				%	movMem64Arg rspArg13,in_arg13
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or IN_ARG13_READY
		ENDIF
		IF (ReadyInArgs and IN_ARG14_READY) EQ 0
		%	movMem64Arg rspArg13,in_arg14
		%	ReadyInArgs=ReadyInArgs or IN_ARG14_READY
		ENDIF
	ENDIF
	IF (OPATTR (procname)) EQ (VALID_REF OR IMM_EXPR)
		mov rax,[rcx]
		call procname[rax]
	ELSE
		call procname
	ENDIF
endm
AppearsCount macro appear_string,__in___args:VARARG
__AppearsCount=1
%	FOR parm,<__in___args>
	%	IFIDN <parm>,<appear_string>
			__AppearsCount=__AppearsCount+1
		ENDIF
	ENDM
	IF __AppearsCount LE must_be_gt
		__AppearsCount=1
	ENDIF
endm
LoadEAX macro mem_in_arg,in_argx,in_arg_flag
	IF (ReadyInArgs and in_arg_flag) EQ 0
		RegPosition=@InStr(1,<rax eax ax  al  ah>,<in_argx>)
		IF RegPosition
			movMem64Arg mem_in_arg,in_argx
			ReadyInArgs=ReadyInArgs or in_arg_flag
		ENDIF
	ENDIF
endm
LoadSameInEDX macro in_argx,in_argx2,in_arg_flag,reg64w,reg32w
	IF (ReadyInArgs and in_arg_flag) EQ 0
		IFIDN <in_argx>,<in_argx2>
			IFDIF <in_argx2>,<rdx>
				IF (itemOpattr and REG_EXPR)
					IF (itemSize EQ 8)
						mov rdx,in_arg2
					ELSEIF (itemSize EQ 4)
						regIndex=Reg32Index(in_arg2)
						IF regIndex LT 8
							mov edx,in_arg2
						ELSE
							mov edx,reg32w
						ENDIF
					ELSE
						mov edx,reg32w
					ENDIF
				ELSEIF (itemSize EQ 8) or (itemSize EQ 0)
					mov rdx,reg64w
				ELSEIF (imm_nullification EQ 1) or (imm_nullification EQ 2)
					xor edx,edx
				ELSE
					mov edx,reg32w
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or in_arg_flag
		ENDIF
	ENDIF
endm
LoadSameInR8 macro in_argx,in_argx2,in_arg_flag,reg64w,reg32w
	IF (ReadyInArgs and in_arg_flag) EQ 0
		IFIDN <in_argx>,<in_argx2>
			IFDIF <in_argx2>,<r8>
				IF (itemOpattr and REG_EXPR)
					IF (itemSize EQ 8)
						mov r8,in_argx2
					ELSEIF (itemSize EQ 4)
						mov r8d,in_argx2
					ELSE
						mov r8d,reg32w
					ENDIF
				ELSEIF (itemSize EQ 8) or (itemSize EQ 0)
					mov r8,reg64w
				ELSEIF (imm_nullification EQ 1) or (imm_nullification EQ 2)
					xor r8d,r8d
				ELSE
					mov r8d,reg32w
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or in_arg_flag
		ENDIF
	ENDIF
endm
LoadSameInMemR macro mem_in_arg,in_argx,in_argx2,in_arg_flag,reg64w,reg32w
	IF (ReadyInArgs and in_arg_flag) EQ 0
		IFIDN <in_argx>,<in_argx2>
			IF (itemOpattr and REG_EXPR)
				IF (itemSize EQ 8)
					mov mem_in_arg,in_argx2
				ELSEIF (itemSize EQ 4)
					mov mem_in_arg,in_argx2
				ELSE
					mov mem_in_arg,reg32w
				ENDIF
			ELSE
				IF (imm_nullification EQ 2) or (imm_nullification EQ 3)
					mov mem_in_arg,reg64w
				ELSE
					IF (itemSize EQ 8) or (itemSize EQ 0)
						mov mem_in_arg,reg64w
					ELSE
						mov mem_in_arg,reg32w
					ENDIF
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or in_arg_flag
		ENDIF
	ENDIF
endm
LoadSameInR9 macro in_argx,in_argx2,in_arg_flag,reg64w,reg32w
	IF (ReadyInArgs and in_arg_flag) EQ 0
		IFIDN <in_argx>,<in_argx2>
			IFDIF <in_argx2>,<r9>
				IF (itemOpattr and REG_EXPR)
					IF (itemSize EQ 8)
						mov r9,in_argx2
					ELSEIF (itemSize EQ 4)
						mov r9d,in_argx2
					ELSE
						mov r9d,reg32w
					ENDIF
				ELSEIF (itemSize EQ 8) or (itemSize EQ 0)
					mov r9,reg64w
				ELSEIF (imm_nullification EQ 1) or (imm_nullification EQ 2)
					xor r9d,r9d
				ELSE
					mov r9d,reg32w
				ENDIF
			ENDIF
			ReadyInArgs=ReadyInArgs or in_arg_flag
		ENDIF
	ENDIF
endm
GetVal MACRO NumStr:REQ
%	EXITM <NumStr>
ENDM

comment $Ìàêðîñ äëÿ óäîáíîãî îïðåäåëåíèÿ äàííûõ â ñòàíäàðòíîé ñåêöèè êîíñòàíò .const.
Ïåðåä íåêîòîðûìè ñèìâîëàìè íåîáõîäèìî ñòàâèòü âîñêëèöàòåëüíûé çíàê.
Íàïðèìåð âìåñòî < âåçäå äîëæíî áûòü !<, à âìåñòî > ñîîòâåòñòâåííî !>$
CONSTANT MACRO string:VARARG
.const
	string
.code
ENDM
comment $Ìàêðîñ äëÿ óäîáíîãî îïðåäåëåíèÿ äàííûõ â ñòàíäàðòíîé ñåêöèè äàííûõ .data.
Ïåðåä íåêîòîðûìè ñèìâîëàìè íåîáõîäèìî ñòàâèòü âîñêëèöàòåëüíûé çíàê.
Íàïðèìåð âìåñòî < âåçäå äîëæíî áûòü !<, à âìåñòî > ñîîòâåòñòâåííî !>$
STATIC MACRO string:VARARG
.data
	string
.code
ENDM
comment $Ìàêðîñ äëÿ óäîáíîãî îïðåäåëåíèÿ äàííûõ â ñòàíäàðòíîé ñåêöèè
íå èíèöèëèçèðîâàííûõ äàííûõ .data?.
Ïåðåä íåêîòîðûìè ñèìâîëàìè íåîáõîäèìî ñòàâèòü âîñêëèöàòåëüíûé çíàê.
Íàïðèìåð âìåñòî < âåçäå äîëæíî áûòü !<, à âìåñòî > ñîîòâåòñòâåííî !>$
RESERV MACRO string:VARARG
.data?
align 8
	string
.code
ENDM
unicode MACRO page,string,zero
LOCAL Zstr
	%	FORC char,<string>
			Zstr CATSTR <db '>,<char>,<',>,<page>
		%	Zstr
		ENDM
	%	IFDIF <zero>,<>
			Zstr CATSTR <dw >,<zero>
		%	Zstr
		ENDIF
ENDM
RegIndex macro reg:REQ
LOCAL Index
	Index=Reg64Index(reg)
	IF Index NE NOT_A_REG64
		exitm <@CatStr(%Index)>
	ENDIF
	Index=Reg32Index(reg)
	IF Index NE NOT_A_REG32
		exitm <@CatStr(%Index)>
	ENDIF
	Index=Reg16Index(reg)
	IF Index NE NOT_A_REG16
		exitm <@CatStr(%Index)>
	ENDIF
	Index=Reg8Index(reg)
	exitm <@CatStr(%Index)>
endm
Reg64Index macro reg:REQ
LOCAL Reg64,Reg64Pos
	IF @SizeStr(<reg>) GT 3
		exitm <@CatStr(%NOT_A_REG64)>
	ENDIF
	Reg64 CATSTR < >,ToLower(<reg>),< >
	Reg64Pos INSTR 1,< rax rcx rdx rbx rsp rbp rsi rdi r8  r9  r10 r11 r12 r13 r14 r15 >,Reg64
	IF Reg64Pos NE 0
		Reg64Pos=(Reg64Pos-1) shr 2
	ELSE
		Reg64Pos=NOT_A_REG64
	ENDIF
	exitm <@CatStr(%Reg64Pos)>
endm
Reg32Index macro reg:REQ
LOCAL Reg32,Reg32Pos
	IF @SizeStr(<reg>) GT 4
		exitm <@CatStr(%NOT_A_REG32)>
	ENDIF
	Reg32 CATSTR < >,ToLower(<reg>),< >
	Reg32Pos INSTR 1,<     eax     ecx     edx     ebx     esp     ebp     esi     edi     r8d     r9d    r10d    r11d    r12d    r13d    r14d    r15d >,Reg32
	IF Reg32Pos NE 0
		Reg32Pos=(Reg32Pos-1) shr 3
	ELSE
		Reg32Pos=NOT_A_REG32
	ENDIF
	exitm <@CatStr(%Reg32Pos)>
endm
Reg16Index macro reg:REQ
LOCAL Reg16,Reg16Pos
	IF @SizeStr(<reg>) GT 4
		exitm <@CatStr(%NOT_A_REG16)>
	ENDIF
	Reg16 CATSTR < >,ToLower(<reg>),< >
	Reg16Pos INSTR 1,<      ax      cx      dx      bx      sp      bp      si      di     r8w     r9w    r10w    r11w    r12w    r13w    r14w    r15w >,Reg16
	IF Reg16Pos NE 0
		Reg16Pos=(Reg16Pos-1) shr 3
	ELSE
		Reg16Pos=NOT_A_REG16
	ENDIF
	exitm <@CatStr(%Reg16Pos)>
endm
Reg8Index macro reg:REQ
LOCAL Reg8,Reg8Pos
	IF @SizeStr(<reg>) GT 4
		exitm <@CatStr(%NOT_A_REG8)>
	ENDIF
	Reg8 CATSTR < >,ToLower(<reg>),< >
	Reg8Pos INSTR 1,<      al      cl      dl      bl     spl     bpl     sil     dil     r8b     r9b    r10b    r11b    r12b    r13b    r14b    r15b >,Reg8
	IF Reg8Pos NE 0
		Reg8Pos=(Reg8Pos-1) shr 3
	ELSE
		Reg8Pos=NOT_A_REG8
	ENDIF
	exitm <@CatStr(%Reg8Pos)>
endm
RegHigh8Index macro reg:REQ
LOCAL Reg8,Reg8Pos
	IF @SizeStr(<reg>) GT 4
		exitm <@CatStr(%NOT_A_REG8)>
	ENDIF
	Reg8 CATSTR < >,ToLower(<reg>),< >
	Reg8Pos INSTR 1,<      ah      ch      dh      bh >,Reg8
	IF Reg8Pos NE 0
		Reg8Pos=(Reg8Pos-1) shr 3
	ELSE
		Reg8Pos=NOT_A_REG8
	ENDIF
	exitm <@CatStr(%Reg8Pos)>
endm
GetReg64 macro Index:REQ
	exitm <@SubStr(< rax rcx rdx rbx rsp rbp rsi rdi r8  r9  r10 r11 r12 r13 r14 r15>,4*Index+1,4)>
endm
GetReg32 macro Index:REQ
	exitm <@SubStr(< eax ecx edx ebx esp ebp esi edi r8d r9dr10dr11dr12dr13dr14dr15d>,4*Index+1,4)>
endm
GetReg16 macro Index:REQ
	exitm <@SubStr(<  ax  cx  dx  bx  sp  bp  si  di r8w r9wr10wr11wr12wr13wr14wr15w>,4*Index+1,4)>
endm
GetReg8 macro Index:REQ
	exitm <@SubStr(<  al  cl  dl  bl spl bpl sil dil r8b r9br10br11br12br13br14br15b>,4*Index+1,4)>
endm
GetRegHigh8 macro Index:REQ
	exitm <@SubStr(<ahchdhbh>,2*Index+1,2)>
endm
;ÑÈÌÂÎËÛ ÄËß ÈÌ¨Í
IsCharForNames MACRO char
CharPosition INSTR 1,<0123456789abcdefghijklmnopqrstvuwxyzABCDEFGHIJKLMNOPQRSTVUWXYZ_.?$@>,<char>
	EXITM<@CatStr(%CharPosition)>
ENDM
SelectValidSymbols MACRO CondString:VARARG
;;LOCAL SkipState,cnt_letter,curr_letter,c_char
	SkipState=0
	curr_letter=0
	ph_count=0
	cnt_letter SIZESTR <CondString>
	WHILE cnt_letter
		curr_letter=curr_letter+1
		c_char SUBSTR <CondString>,curr_letter,1
		IF SkipState EQ 0
			IF IsCharForNames(%c_char) EQ 0
				IFIDN c_char,<[>
					SkipState=1
				ELSEIFIDN c_char,<(>
					SkipState=2
					ph_count=1
				ELSEIFIDN c_char,<">
					SkipState=5
				ELSEIFIDN c_char,<'>
					SkipState=6
				ELSEIFDIF c_char,< >
					EXITM
				ENDIF
			ENDIF
		ELSEIF SkipState EQ 1
			IFIDN c_char,<]>
				SkipState=0
			ELSEIFIDN c_char,<">
				SkipState=7
			ELSEIFIDN c_char,<'>
				SkipState=8
			ENDIF
		ELSEIF SkipState EQ 2
			IFIDN c_char,<)>
				ph_count=ph_count-1
				IF ph_count EQ 0
					SkipState=0
				ENDIF
			ELSEIFIDN c_char,<(>
				ph_count=ph_count+1
			ELSEIFIDN c_char,<">
				SkipState=3
			ELSEIFIDN c_char,<'>
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 3
			IFIDN c_char,<">
				SkipState=2
			ENDIF
		ELSEIF SkipState EQ 4
			IFIDN c_char,<'>
				SkipState=2
			ENDIF
		ELSEIF SkipState EQ 5
			IFIDN c_char,<">
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 6
			IFIDN c_char,<'>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 7
			IFIDN c_char,<">
				SkipState=1
			ENDIF
		ELSEIF SkipState EQ 8
			IFIDN c_char,<'>
				SkipState=1
			ENDIF
		ENDIF
		cnt_letter=cnt_letter-1
	ENDM
	IF cnt_letter EQ 0
		curr_letter=0
	ENDIF
	EXITM<@CatStr(%curr_letter)>
ENDM
;;LOCAL 
;fletter TEXTEQU <>
;lletter TEXTEQU <>
;fchar=0
;schar=0
;blchar=0
;lchar=0
;cond_len=0
;reg_ind=NOT_A_REG
;reg_high_ind=NOT_A_REG8
;is_jxcxz=0
sxb equ <sbyte ptr>
sxw equ <sword ptr>
sxd equ <sdword ptr>
sxq equ <sqword ptr>
j_one_bt_pow=0
j_one_bt_pow2=0
j_one_bt_pow3=0
j_one_bt_pow4=0
j_one_bt_uses=1
J_ONE_COND MACRO LabelName,IsTrueCondition,ConditionOne:VARARG
	cond_len SIZESTR <ConditionOne>
	fletter SUBSTR <ConditionOne>,1,1
	lletter SUBSTR <ConditionOne>,cond_len,1
	fchar=0
	schar=0
	lchar=0
	blchar=0
	IF cond_len GE 2
		IFIDN fletter,<(>
			fchar=1
		ELSEIFIDN fletter,<~>
			fchar=2
		ENDIF
		IFIDN @SubStr(<ConditionOne>,2,1),<(>
			schar=1
		ENDIF
		IFIDN lletter,<)>
			lchar=1
		ENDIF
		IFIDN lletter,<?>
			lchar=2
		ENDIF
		IFIDN @SubStr(<ConditionOne>,cond_len-1,1),<?>
			blchar=2
		ENDIF
	ENDIF
	IF fchar EQ 2
		IF (schar EQ 1) AND (lchar EQ 1)
			J_ONE_COND LabelName,(IsTrueCondition xor 1),@SubStr(<ConditionOne>,3,cond_len-3)
		ELSE
			J_ONE_COND LabelName,(IsTrueCondition xor 1),@SubStr(<ConditionOne>,2,cond_len-1)
		ENDIF
	ELSEIF (fchar EQ 1) AND (lchar EQ 1)	
		J_ONE_COND LabelName,IsTrueCondition,@SubStr(<ConditionOne>,2,cond_len-2)
	ELSE
		IF IsTrueCondition EQ FALSE
			NegateChar TEXTEQU <n>
			TrueChar TEXTEQU <>
		ELSE
			NegateChar TEXTEQU <>
			TrueChar TEXTEQU <n>
		ENDIF
		OperatorPos=SelectValidSymbols(ConditionOne)
		IF OperatorPos NE 0
			SingleRunTimeOperator SUBSTR <ConditionOne>,OperatorPos,1
		ELSE
			SingleRunTimeOperator TEXTEQU <>
		ENDIF
		CmpCmd TEXTEQU <>
		JCOND TEXTEQU <>
		IF OperatorPos EQ 0
			IF (OPATTR ConditionOne) EQ (IMM_EXPR OR VALID_REF)
				IF (ConditionOne NE 0)
					IF (IsTrueCondition NE 0)
						JCOND CATSTR <jmp >,<LabelName>
					ENDIF
				ELSEIF IsTrueCondition EQ 0
					JCOND CATSTR <jmp >,<LabelName>
				ENDIF
			ELSE
				IF lchar EQ 2
					IFIDN <ConditionOne>,<SIGN?>
						JCOND CATSTR <j>,NegateChar,<s >,<LabelName>
					ELSEIFIDN <ConditionOne>,<ZERO?>
						JCOND CATSTR <j>,NegateChar,<z >,<LabelName>
					ELSEIFIDN <ConditionOne>,<OVERFLOW?>
						JCOND CATSTR <j>,NegateChar,<o >,<LabelName>
					ELSEIFIDN <ConditionOne>,<PARITY?>
						JCOND CATSTR <j>,NegateChar,<p >,<LabelName>
					ELSEIFIDN <ConditionOne>,<CARRY?>
						JCOND CATSTR <j>,NegateChar,<c >,<LabelName>
					ENDIF
				ENDIF
				IFIDN JCOND,<>
					FirstArg TEXTEQU <ConditionOne>
					reg_ind=RegIndex(%FirstArg)
					reg_high_ind=RegHigh8Index(%FirstArg)
					is_jxcxz=0
					IF (reg_ind EQ 1) AND (IsTrueCondition EQ FALSE)
						IFDIF fletter,<c>
							is_jxcxz=1
						ENDIF
					ENDIF
					IF (is_jxcxz EQ 1)
						JCOND CATSTR <j>,FirstArg,<z >,<LabelName>
					ELSEIF (reg_ind EQ NOT_A_REG) AND (reg_high_ind EQ NOT_A_REG8)
						CmpCmd CATSTR <cmp >,FirstArg,<,0>
						JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
					ELSE
						CmpCmd CATSTR <test >,FirstArg,<,>,FirstArg
						JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
					ENDIF
				ENDIF
			ENDIF
		ELSE
			IF lchar EQ 2
				IFIDN <ConditionOne>,<SIGN?{}OVERFLOW?>
					JCOND CATSTR <j>,NegateChar,<l >,<LabelName>
				ELSEIFIDN <ConditionOne>,<SIGN?~=OVERFLOW?>
					JCOND CATSTR <j>,NegateChar,<l >,<LabelName>
				ELSEIFIDN <ConditionOne>,<SIGN?==OVERFLOW?>
					JCOND CATSTR <j>,NegateChar,<ge >,<LabelName>
				ELSEIFIDN <ConditionOne>,<CARRY?|ZERO?>
					JCOND CATSTR <j>,NegateChar,<be >,<LabelName>
				ENDIF
			ELSEIF (lchar EQ 1) AND (blchar EQ 2)
				IFIDN <ConditionOne>,<ZERO?|(SIGN?{}OVERFLOW?)>
					JCOND CATSTR <j>,NegateChar,<le >,<LabelName>
				ELSEIFIDN <ConditionOne>,<ZERO?|(SIGN?~=OVERFLOW?)>
					JCOND CATSTR <j>,NegateChar,<le >,<LabelName>
				ELSEIFIDN <ConditionOne>,<ZERO?&(SIGN?==OVERFLOW?)>
					JCOND CATSTR <j>,TrueChar,<g >,<LabelName>
				ENDIF
			ENDIF
			IFIDN JCOND,<>
				RunTimeOperator SUBSTR <ConditionOne>,OperatorPos,2
				FirstArg SUBSTR <ConditionOne>,1,OperatorPos-1
				is_signed_expr=0
				first_arg_length SIZESTR FirstArg
				IF first_arg_length GT 10
					IF first_arg_length GT 11
						first_arg_type_spec SUBSTR FirstArg,1,11
						first_arg_type_spec_len=11
					ELSE
						first_arg_type_spec SUBSTR FirstArg,1,10
						first_arg_type_spec_len=10
					ENDIF
					IFIDNI first_arg_type_spec,<sdword ptr >
						is_signed_expr=4
					ELSEIFIDNI first_arg_type_spec,<sqword ptr >
						is_signed_expr=8
					ELSE
						IF first_arg_type_spec_len EQ 11
							first_arg_type_spec SUBSTR first_arg_type_spec,1,10
						ENDIF
						IFIDNI first_arg_type_spec,<sbyte ptr >
							is_signed_expr=1
						ELSEIFIDNI first_arg_type_spec,<sword ptr >
							is_signed_expr=2
						ENDIF
					ENDIF
				ENDIF				
				IF cond_len GE (OperatorPos+2)
					SecondArg SUBSTR <ConditionOne>,OperatorPos+2,cond_len-OperatorPos-1
				ENDIF
				IFIDN RunTimeOperator,<==>		
					JCOND CATSTR <j>,NegateChar,<z >,<LabelName>
				ELSEIFIDN RunTimeOperator,<~=>		
					JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
				ELSEIFIDN RunTimeOperator,<{}>
					JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
				ELSEIFIDN RunTimeOperator,<}=>
					IF is_signed_expr
						JCOND CATSTR <j>,NegateChar,<ge >,<LabelName>
					ELSE
						JCOND CATSTR <j>,NegateChar,<ae >,<LabelName>
					ENDIF
				ELSEIFIDN RunTimeOperator,<{=>
					IF is_signed_expr
						JCOND CATSTR <j>,NegateChar,<le >,<LabelName>
					ELSE
						JCOND CATSTR <j>,NegateChar,<be >,<LabelName>
					ENDIF
				ELSEIFIDN RunTimeOperator,<={>
					IF is_signed_expr
						JCOND CATSTR <j>,NegateChar,<le >,<LabelName>
					ELSE
						JCOND CATSTR <j>,NegateChar,<be >,<LabelName>
					ENDIF
				ELSEIFIDN RunTimeOperator,<&&>
					IFIDN SecondArg,<SIGN?>
						reg_ind=RegIndex(%FirstArg)
						reg_high_ind=RegHigh8Index(%FirstArg)
						IF (reg_ind EQ NOT_A_REG) AND (reg_high_ind EQ NOT_A_REG8)
							CmpCmd TEXTEQU <cmp >,FirstArg,<,0>
						ELSE
							CmpCmd TEXTEQU <test >,FirstArg,<,>,FirstArg
						ENDIF
						JCOND CATSTR <j>,NegateChar,<s >,<LabelName>
					ELSE
						CmpCmd CATSTR <test >,FirstArg,<,>,SecondArg
						JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
					ENDIF
				ENDIF
				IFIDN JCOND,<>
					SecondArg SUBSTR <ConditionOne>,OperatorPos+1,cond_len-OperatorPos
					IFIDN SingleRunTimeOperator,<}>
						IF is_signed_expr
							JCOND CATSTR <j>,NegateChar,<g >,<LabelName>
						ELSE
							JCOND CATSTR <j>,NegateChar,<a >,<LabelName>
						ENDIF
					ELSEIFIDN SingleRunTimeOperator,<{>
						IF is_signed_expr
							JCOND CATSTR <j>,NegateChar,<l >,<LabelName>
						ELSE
							JCOND CATSTR <j>,NegateChar,<b >,<LabelName>
						ENDIF
					ELSEIFIDN SingleRunTimeOperator,<|>
						CmpCmd CATSTR <or >,FirstArg,<,>,SecondArg
						JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
					ELSEIFIDN SingleRunTimeOperator,<&>
						IFIDN SecondArg,<SIGN?>
							reg_ind=RegIndex(%FirstArg)
							reg_high_ind=RegHigh8Index(%FirstArg)
							IF (reg_ind EQ NOT_A_REG) AND (reg_high_ind EQ NOT_A_REG8)
								CmpCmd TEXTEQU <cmp >,FirstArg,<,0>
							ELSE
								CmpCmd TEXTEQU <test >,FirstArg,<,>,FirstArg
							ENDIF
							JCOND CATSTR <j>,NegateChar,<s >,<LabelName>
						ELSEIF ((OPATTR (SecondArg)) EQ VIMM_EXPR) AND (TYPE FirstArg GT 1) AND (j_one_bt_uses EQ 1)
							j_one_bt_pow=0
							j_one_bt_pow4=0
							IF (SecondArg) EQ 0
								j_one_bt_pow4=-1
							ENDIF
							j_one_bt_pow2=(SecondArg) AND 0FFFFFFFFh
							j_one_bt_pow3=(SecondArg) SHR 32
							IF j_one_bt_pow2 EQ 0
								j_one_bt_pow=32
								j_one_bt_pow2=j_one_bt_pow3
							ELSEIF j_one_bt_pow3 NE 0
								j_one_bt_pow4=-1
							ENDIF
							j_one_bt_pow3=j_one_bt_pow2 SHR 16
							j_one_bt_pow2=j_one_bt_pow2 AND 0FFFFh
							IF j_one_bt_pow2 EQ 0
								j_one_bt_pow=j_one_bt_pow+16
								j_one_bt_pow2=j_one_bt_pow3
							ELSEIF j_one_bt_pow3 NE 0
								j_one_bt_pow4=-1
							ENDIF
							j_one_bt_pow3=j_one_bt_pow2 SHR 8
							j_one_bt_pow2=j_one_bt_pow2 AND 0FFh
							IF j_one_bt_pow2 EQ 0
								j_one_bt_pow=j_one_bt_pow+8
								j_one_bt_pow2=j_one_bt_pow3
							ELSEIF j_one_bt_pow3 NE 0
								j_one_bt_pow4=-1
							ENDIF
							j_one_bt_pow3=j_one_bt_pow2 SHR 4
							j_one_bt_pow2=j_one_bt_pow2 AND 0Fh
							IF j_one_bt_pow2 EQ 0
								j_one_bt_pow=j_one_bt_pow+4
								j_one_bt_pow2=j_one_bt_pow3
							ELSEIF j_one_bt_pow3 NE 0
								j_one_bt_pow4=-1
							ENDIF
							j_one_bt_pow3=j_one_bt_pow2 SHR 2
							j_one_bt_pow2=j_one_bt_pow2 AND 11y
							IF j_one_bt_pow2 EQ 0
								j_one_bt_pow=j_one_bt_pow+2
								j_one_bt_pow2=j_one_bt_pow3
							ELSEIF j_one_bt_pow3 NE 0
								j_one_bt_pow4=-1
							ENDIF
							j_one_bt_pow3=j_one_bt_pow2 SHR 1
							j_one_bt_pow2=j_one_bt_pow2 AND 1y
							IF j_one_bt_pow2 EQ 0
								j_one_bt_pow=j_one_bt_pow+1
								j_one_bt_pow2=j_one_bt_pow3
							ELSEIF j_one_bt_pow3 NE 0
								j_one_bt_pow4=-1
							ENDIF
							IF j_one_bt_pow4 EQ 0
								j_one_bt_pow4=((TYPE FirstArg) EQ 2) AND (j_one_bt_pow EQ 15)
								j_one_bt_pow4=j_one_bt_pow4 OR (((TYPE FirstArg) EQ 4) AND (j_one_bt_pow EQ 31))
								j_one_bt_pow4=j_one_bt_pow4 OR (((TYPE FirstArg) EQ 8) AND (j_one_bt_pow EQ 63))
								IF j_one_bt_pow4 EQ 0
									CmpCmd CATSTR <bt >,FirstArg,<,>,@CatStr(%j_one_bt_pow)
									JCOND CATSTR <j>,NegateChar,<c >,<LabelName>
								ELSE
									reg_ind=RegIndex(%FirstArg)
									IF reg_ind EQ NOT_A_REG
										CmpCmd TEXTEQU <cmp >,FirstArg,<,0>
									ELSE
										CmpCmd TEXTEQU <test >,FirstArg,<,>,FirstArg
									ENDIF
									JCOND CATSTR <j>,NegateChar,<s >,<LabelName>
								ENDIF
							ELSE
								CmpCmd CATSTR <test >,FirstArg,<,>,SecondArg
								JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
							ENDIF
						ELSE
							CmpCmd CATSTR <test >,FirstArg,<,>,SecondArg
							JCOND CATSTR <j>,TrueChar,<z >,<LabelName>
						ENDIF
					ELSE
						.err <Bad conditional operator.>
					ENDIF
				ENDIF
				IFDIF SecondArg,<>
					IFIDN CmpCmd,<>
						CmpCmd CATSTR <cmp >,FirstArg,<,>,SecondArg
					ENDIF
				ENDIF
			ENDIF
		ENDIF
		CmpCmd
		JCOND	
	ENDIF
ENDM
GetIfsPosition MACRO CondString:VARARG
;;LOCAL SkipState,cnt_letter,curr_letter,c_char,c_log_operator,total_conds,ph_count
	SkipState=0
	curr_letter=0
	cnt_letter SIZESTR <CondString>
	IF cnt_letter LT 6
		EXITM<0>
	ENDIF
	ph_count=0
	WHILE cnt_letter GT 5
		curr_letter=curr_letter+1
		c_char SUBSTR <CondString>,curr_letter,1
		IF SkipState EQ 0
			IFIDN c_char,<[>
				SkipState=1
			ELSEIFIDN c_char,<">
				SkipState=2
			ELSEIFIDN c_char,<'>
				SkipState=3
			ELSEIFIDN c_char,<(>
				SkipState=4
				ph_count=1
			ELSEIFIDN c_char,< >
				c_log_operator SUBSTR <CondString>,curr_letter,5
				IFIDN c_log_operator,< .if >
					EXITM
				ENDIF
			ENDIF
		ELSEIF SkipState EQ 1
			IFIDN c_char,<]>
				SkipState=0
			ELSEIFIDN c_char,<">
				SkipState=7
			ELSEIFIDN c_char,<'>
				SkipState=8
			ENDIF
		ELSEIF SkipState EQ 2
			IFIDN c_char,<">
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 3
			IFIDN c_char,<'>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 4
			IFIDN c_char,<)>
				ph_count=ph_count-1
				IF ph_count EQ 0
					SkipState=0
				ENDIF
			ELSEIFIDN c_char,<(>
				ph_count=ph_count+1
			ELSEIFIDN c_char,<">
				SkipState=5
			ELSEIFIDN c_char,<'>
				SkipState=6
			ENDIF
		ELSEIF SkipState EQ 5
			IFIDN c_char,<">
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 6
			IFIDN c_char,<'>
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 7
			IFIDN c_char,<">
				SkipState=1
			ENDIF
		ELSEIF SkipState EQ 8
			IFIDN c_char,<'>
				SkipState=1
			ENDIF
		ENDIF
		cnt_letter=cnt_letter-1
	ENDM
	IF cnt_letter LE 5
		EXITM<0>
	ENDIF
	EXITM<@CatStr(%curr_letter)>
ENDM
SelectOrValidConds MACRO CondString:VARARG
;;LOCAL SkipState,cnt_letter,curr_letter,c_char,c_log_operator,total_conds,ph_count
	SkipState=0
	curr_letter=0
	cnt_letter SIZESTR <CondString>
	IF cnt_letter LT 6
		EXITM<0>
	ENDIF
	ph_count=0
	WHILE cnt_letter GT 4
		curr_letter=curr_letter+1
		c_char SUBSTR <CondString>,curr_letter,1
		IF SkipState EQ 0
			IFIDN c_char,<[>
				SkipState=1
			ELSEIFIDN c_char,<">
				SkipState=2
			ELSEIFIDN c_char,<'>
				SkipState=3
			ELSEIFIDN c_char,<(>
				SkipState=4
				ph_count=1
			ELSEIFIDN c_char,< >
				c_log_operator SUBSTR <CondString>,curr_letter,4
				IFIDN c_log_operator,< || >
					EXITM
				ENDIF
			ENDIF
		ELSEIF SkipState EQ 1
			IFIDN c_char,<]>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 2
			IFIDN c_char,<">
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 3
			IFIDN c_char,<'>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 4
			IFIDN c_char,<)>
				ph_count=ph_count-1
				IF ph_count EQ 0
					SkipState=0
				ENDIF
			ELSEIFIDN c_char,<(>
				ph_count=ph_count+1
			ELSEIFIDN c_char,<">
				SkipState=5
			ELSEIFIDN c_char,<'>
				SkipState=6
			ENDIF
		ELSEIF SkipState EQ 5
			IFIDN c_char,<">
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 6
			IFIDN c_char,<'>
				SkipState=4
			ENDIF
		ENDIF
		cnt_letter=cnt_letter-1
	ENDM
	IF cnt_letter LE 4
		EXITM<0>
	ENDIF
	EXITM<@CatStr(%curr_letter)>
ENDM
SelectValidCond MACRO CondString:VARARG
;;LOCAL SkipState,cnt_letter,curr_letter,c_char,c_log_operator,total_conds,ph_count
	SkipState=0
	curr_letter=0
	cnt_letter SIZESTR <CondString>
	IF cnt_letter LT 6
		EXITM<0>
	ENDIF
	ph_count=0
	WHILE cnt_letter GT 4
		curr_letter=curr_letter+1
		c_char SUBSTR <CondString>,curr_letter,1
		IF SkipState EQ 0
			IFIDN c_char,<[>
				SkipState=1
			ELSEIFIDN c_char,<">
				SkipState=2
			ELSEIFIDN c_char,<'>
				SkipState=3
			ELSEIFIDN c_char,<(>
				SkipState=4
				ph_count=1
			ELSEIFIDN c_char,< >
				c_log_operator SUBSTR <CondString>,curr_letter,4
				IFIDN c_log_operator,< || >
					EXITM
				ELSEIFIDN c_log_operator,< && >
					EXITM
				ENDIF
			ENDIF
		ELSEIF SkipState EQ 1
			IFIDN c_char,<]>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 2
			IFIDN c_char,<">
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 3
			IFIDN c_char,<'>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 4
			IFIDN c_char,<)>
				ph_count=ph_count-1
				IF ph_count EQ 0
					SkipState=0
				ENDIF
			ELSEIFIDN c_char,<(>
				ph_count=ph_count+1
			ELSEIFIDN c_char,<">
				SkipState=5
			ELSEIFIDN c_char,<'>
				SkipState=6
			ENDIF
		ELSEIF SkipState EQ 5
			IFIDN c_char,<">
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 6
			IFIDN c_char,<'>
				SkipState=4
			ENDIF
		ENDIF
		cnt_letter=cnt_letter-1
	ENDM
	IF cnt_letter LE 4
		EXITM<0>
	ENDIF
	EXITM<@CatStr(%curr_letter)>
ENDM
IsSingleCond MACRO CondString:VARARG
;;LOCAL SkipState,cnt_letter,curr_letter,c_char,c_log_operator
	SkipState=0
	curr_letter=0
	cnt_letter SIZESTR <CondString>
	IF cnt_letter LT 6
		EXITM<1>
	ENDIF
	WHILE cnt_letter GT 4
		curr_letter=curr_letter+1
		c_char SUBSTR <CondString>,curr_letter,1
		IF SkipState EQ 0
			IFIDN c_char,<[>
				SkipState=1
			ELSEIFIDN c_char,<">
				SkipState=2
			ELSEIFIDN c_char,<'>
				SkipState=3
			ELSEIFIDN c_char,< >
				c_log_operator SUBSTR <CondString>,curr_letter,4
				IFIDN c_log_operator,< || >
					EXITM
				ELSEIFIDN c_log_operator,< && >
					EXITM
				ENDIF
			ENDIF
		ELSEIF SkipState EQ 1
			IFIDN c_char,<]>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 2
			IFIDN c_char,<">
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 3
			IFIDN c_char,<'>
				SkipState=0
			ENDIF
		ENDIF
		cnt_letter=cnt_letter-1
	ENDM
	IF cnt_letter GT 4
		EXITM<0>
	ENDIF
	EXITM<1>
ENDM
IntermedLabel=0
J_POLY_COND MACRO LabelName,TrueConditions,ConditionsString:VARARG
LOCAL BeginCond,EndCond,LogOperator,locLabel,SetLabel,IsTrueConditions,NegCond,EndLabel,LastConds
	BeginCond=1
	EndCond=1
	SetLabel=0
	NegCond=0
	LastConds=0
	IsTrueConditions=TrueConditions
	IF IsSingleCond(<ConditionsString>) NE 0
		J_ONE_COND LabelName,IsTrueConditions,ConditionsString
	ELSE
		EndLabel CATSTR <intermedloc_>,@CatStr(%IntermedLabel)
		IntermedLabel=IntermedLabel+1
		SetLabel=0
		LogOperator=0
	:NextCond
		IFIDN @SubStr(<ConditionsString>,BeginCond,2),<~(>
			IsTrueConditions=IsTrueConditions xor 1
			BeginCond=BeginCond+1
			NegCond=1
		ENDIF
		EndCond=SelectValidCond(@SubStr(<ConditionsString>,BeginCond,@SizeStr(<ConditionsString>)-BeginCond+1))
		IF EndCond EQ 0
			EndCond=@SizeStr(<ConditionsString>)+1
			LogOperator=0
		ELSE
			EndCond=EndCond+BeginCond-1
			LogOperator=EndCond
		ENDIF
		IFIDN @SubStr(<ConditionsString>,BeginCond,1),<(>
			BeginCond=BeginCond+1
			EndCond=EndCond-1
			IF NegCond EQ 1
				IF IsSingleCond(@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)) EQ 1
					IsTrueConditions=IsTrueConditions xor 1
					BeginCond=BeginCond-2
					EndCond=EndCond+1
					NegCond=0
				ENDIF
			ENDIF
		ENDIF
		IF LogOperator EQ 0
			J_POLY_COND LabelName,IsTrueConditions,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
			IF SetLabel NE 0
				locLabel:
			ENDIF
			EndLabel:
			GOTO EndConditions
		ENDIF
		IF SetLabel EQ 0
			IFIDN @SubStr(<ConditionsString>,LogOperator,4),< || >
				IF IsTrueConditions NE 0
					J_POLY_COND LabelName,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
					GOTO forward
				ELSE
					J_POLY_COND EndLabel,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
					GOTO forward
				ENDIF
			ELSE
				SetLabel=1
				locLabel CATSTR <intermedloc_>,@CatStr(%IntermedLabel)
				IntermedLabel=IntermedLabel+1
				RemnConds SUBSTR <ConditionsString>,LogOperator+4,@SizeStr(<ConditionsString>)-LogOperator-3
				LastConds=1
				IF (@SizeStr(RemnConds) NE 0) AND (SelectOrValidConds(RemnConds) NE 0)
					LastConds=0
				ENDIF
				IF IsTrueConditions EQ 0
					IF LastConds EQ 1
						IF NegCond EQ 1
							J_POLY_COND locLabel,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
						ELSE
							J_POLY_COND LabelName,0,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
						ENDIF
						GOTO forward
					ELSE
						J_POLY_COND locLabel,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
						GOTO forward
					ENDIF
				ELSE
					IF (LastConds EQ 1) AND (NegCond EQ 1)
						J_POLY_COND LabelName,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
						GOTO forward
					ENDIF
					J_POLY_COND locLabel,0,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
				ENDIF
			ENDIF
			GOTO forward
		ELSE
			IFIDN @SubStr(<ConditionsString>,LogOperator,4),< || >
				IF IsTrueConditions NE 0
					J_POLY_COND LabelName,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
				ELSE
					J_POLY_COND EndLabel,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
				ENDIF
				locLabel:
				SetLabel=0
			ELSEIF IsTrueConditions EQ 0
				IF LastConds EQ 1
					J_POLY_COND LabelName,0,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
					GOTO forward
				ELSE
					J_POLY_COND locLabel,1,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
					GOTO forward
				ENDIF
			ELSE
				J_POLY_COND locLabel,0,@SubStr(<ConditionsString>,BeginCond,EndCond-BeginCond)
			ENDIF
		ENDIF
		:forward
		IF NegCond EQ 1
			IsTrueConditions=IsTrueConditions xor 1
			NegCond=0
		ENDIF		
		BeginCond=LogOperator+4
		IF IsSingleCond(@SubStr(<ConditionsString>,BeginCond,@SizeStr(<ConditionsString>)-BeginCond+1)) EQ 1
		%	J_POLY_COND LabelName,IsTrueConditions,@SubStr(<ConditionsString>,BeginCond,@SizeStr(<ConditionsString>)-BeginCond+1)
			IF SetLabel NE 0
				locLabel:
			ENDIF
			EndLabel:
			GOTO EndConditions
		ENDIF
		GOTO NextCond
	ENDIF
:EndConditions
ENDM
.goto MACRO IfCondString:VARARG
	IfsPos=GetIfsPosition(IfCondString)
	IF IfsPos NE 0
		gtLabel SUBSTR <IfCondString>,1,(IfsPos-1)
		gtConds SUBSTR <IfCondString>,IfsPos+5,@SizeStr(IfCondString)+1-(IfsPos+5)
		gtLabelAttr=(OPATTR gtLabel)
		IF (gtLabelAttr AND MEM_EXPR)
		%	.if gtConds
				jmp gtLabel
			.endif
		ELSE
		%	J_POLY_COND gtLabel,1,gtConds
		ENDIF	
	ELSE
		jmp IfCondString
	ENDIF
ENDM
.esc MACRO IfCondString:VARARG
	GetOutLabel
	IFIDN <IfCondString>,<>
		jmp LastOutLabel
	ELSE
		gtConds SUBSTR <IfCondString>,5
	%	J_POLY_COND LastOutLabel,1,gtConds
	ENDIF
ENDM
c2asmhex MACRO c_num:REQ
LOCAL lenc,asm_hex
	lenc=@SizeStr(<c_num>)
	IF (lenc GT 2)
		IF (@InStr(1,<c_num>,<0X>) EQ 1) OR (@InStr(1,<c_num>,<0x>) EQ 1)
			asm_hex CATSTR <0>,@SubStr(<c_num>,3,(lenc-2)),<h>
		ELSE
			asm_hex	TEXTEQU <c_num>
		ENDIF
	ELSE
		asm_hex	TEXTEQU <c_num>
	ENDIF
	EXITM <asm_hex>	
ENDM
DEFINE_GUID MACRO iid_name,Data1,Data2,Data3,Data4_0,Data4_1,Data4_2,Data4_3,Data4_4:REQ,Data4_5,Data4_6,Data4_7
iid_name LABEL GUID
	dd c2asmhex(Data1)
	dw c2asmhex(Data2)
	dw c2asmhex(Data3)
	db c2asmhex(Data4_0)
	db c2asmhex(Data4_1)
	db c2asmhex(Data4_2)
	db c2asmhex(Data4_3)
	db c2asmhex(Data4_4)
	db c2asmhex(Data4_5)
	db c2asmhex(Data4_6)
	db c2asmhex(Data4_7)
	EXITM<>
ENDM
pushm MACRO args:VARARG
TEX TEXTEQU <>
address TEXTEQU <>
FOR item,<args>
	IF @SizeStr(<item>) GE 6
		TEX SUBSTR <item>,1,4
		address SUBSTR <item>, 6, @SizeStr(<item>) - 5
		IFIDN TEX,<addr>
			lea rax,address
			push rax
		ELSEIFIDN TEX,<ADDR>
			lea rax,address
			push rax
		ELSEIFIDN TEX,<Addr>
			lea rax,address
			push rax
		ELSE
			push item
		ENDIF
	ELSE
		push item
	ENDIF
ENDM
ENDM
altm MACRO Consts:VARARG
    EXITM <>
ENDM
pword TYPEDEF PTR FAR16
vstrstr MACRO CondString,__SubStr__,InitialPos:=<0>
;;LOCAL SkipState,cnt_letter,curr_letter,c_char,c_log_operator,total_conds,ph_count
	SkipState=0
	curr_letter=InitialPos
	cnt_letter SIZESTR <CondString>
	cnt_letter=cnt_letter-curr_letter
	__SubStr__len SIZESTR <__SubStr__>
	IF cnt_letter LT __SubStr__len
		EXITM<0>
	ENDIF
	ph_count=0
	WHILE cnt_letter GE __SubStr__len
		curr_letter=curr_letter+1
		c_char SUBSTR <CondString>,curr_letter,1
		IF SkipState EQ 0
			IFIDN c_char,<[>
				SkipState=1
			ELSEIFIDN c_char,<">
				SkipState=2
			ELSEIFIDN c_char,<'>
				SkipState=3
			ELSEIFIDN c_char,<(>
				SkipState=4
				ph_count=1
			ELSE
				c_log_operator SUBSTR <CondString>,curr_letter,__SubStr__len
				IFIDN c_log_operator,<__SubStr__>
					cnt_letter=1000
					EXITM
				ENDIF
			ENDIF
		ELSEIF SkipState EQ 1
			IFIDN c_char,<]>
				SkipState=0
			ELSEIFIDN c_char,<">
				SkipState=7
			ELSEIFIDN c_char,<'>
				SkipState=8
			ENDIF
		ELSEIF SkipState EQ 2
			IFIDN c_char,<">
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 3
			IFIDN c_char,<'>
				SkipState=0
			ENDIF
		ELSEIF SkipState EQ 4
			IFIDN c_char,<)>
				ph_count=ph_count-1
				IF ph_count EQ 0
					SkipState=0
				ENDIF
			ELSEIFIDN c_char,<(>
				ph_count=ph_count+1
			ELSEIFIDN c_char,<">
				SkipState=5
			ELSEIFIDN c_char,<'>
				SkipState=6
			ENDIF
		ELSEIF SkipState EQ 5
			IFIDN c_char,<">
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 6
			IFIDN c_char,<'>
				SkipState=4
			ENDIF
		ELSEIF SkipState EQ 7
			IFIDN c_char,<">
				SkipState=1
			ENDIF
		ELSEIF SkipState EQ 8
			IFIDN c_char,<'>
				SkipState=1
			ENDIF
		ENDIF
		cnt_letter=cnt_letter-1
	ENDM
	IF cnt_letter GE __SubStr__len
		EXITM<@CatStr(%curr_letter)>
	ENDIF
	EXITM<0>
ENDM
defined MACRO Arg1:REQ
	IFDEF Arg1
		EXITM<1>
	ENDIF
	EXITM<0>
ENDM
;ÏÐÎÒÎÒÈÏÛ ÌÀÊÐÎÑÎÂ
v MACRO vl_expr:VARARG
	
ENDM
v1 MACRO vl_expr:VARARG
	
ENDM
v2 MACRO vl_expr:VARARG
	
ENDM
v3 MACRO vl_expr:VARARG
	
ENDM
v4 MACRO vl_expr:VARARG
	
ENDM
v1 MACRO vl_expr:VARARG
LOCAL vl_def_add,vl_cpos,vl_expr_len,vl_dest,vl_plus
	vl_def_add=0
	vl_expr_len SIZESTR <vl_expr>
	vl_cpos=vstrstr(<vl_expr>,<=>)+1
	vl_dest SUBSTR <vl_expr>,1,(vl_cpos-2)
	vl_char SUBSTR <vl_expr>,(vl_cpos-3),2
	IFIDN vl_char,<}}>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-4)
		vl_def_add=1
		GOTO vl_loop
	ENDIF
	IFIDN vl_char,<{{>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-4)
		vl_def_add=2
		GOTO vl_loop
	ENDIF
	;;;;;; ÓÌÍÎÆÅÍÈÅ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	vl_char SUBSTR <vl_expr>,(vl_cpos-2),1
	IFIDN vl_char,<*>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-3)
		vl_def_add=3
		GOTO vl_loop
	ENDIF
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	vl_ph=0								;;ÈÍÈÖÈÀËÈÇÀÖÈß ÌÅÑÒÀ ÍÀÇÍÀ×ÅÍÈß ÏÅÐÂÛÌ ÀÐÃÓÌÅÍÒÎÌ
	vl_char SUBSTR <vl_expr>,vl_cpos,1	;;ÏÎÈÑÊ ÀÐÃÓÌÅÍÒÀ
	IFIDN vl_char,<(>					;;ÂÛÐÀÆÅÍÈÅ Â ÑÊÎÁÊÀÕ
		vl_ph=1
	ENDIF
	IFIDN vl_char,<&>
		vl_ph=2
	ENDIF
	IF vl_cpos GT vl_expr_len
		GOTO vl_exit
	ENDIF
	vl_def_add=1
	vl_plus=vstrstr(<vl_expr>,<}}>,vl_cpos)
	vl_plus2=vstrstr(<vl_expr>,<{{>,vl_cpos)
	IF vl_plus
		IF vl_plus2 AND (vl_plus2 LT vl_plus)
			vl_def_add=2
			vl_plus=vl_plus2
		ENDIF
	ELSE
		vl_def_add=2
		vl_plus=vl_plus2
	ENDIF
	;;;;;; ÓÌÍÎÆÅÍÈÅ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	vl_plus2=vstrstr(<vl_expr>,<*>,vl_cpos)
	IF vl_plus
		IF vl_plus2 AND (vl_plus2 LT vl_plus)
			vl_def_add=3
			vl_plus=vl_plus2
		ENDIF
	ELSE
		vl_def_add=3
		vl_plus=vl_plus2
	ENDIF
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	IF vl_plus NE 0			;ÍÀ ÑËÓ×ÀÉ ÁÎËÅÅ ×ÅÌ ÎÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
		GOTO v1_many_args
	ENDIF
	vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
	IF vl_ph EQ 1	;;ÅÑËÈ ÂÛÐÀÆÅÍÈÅ ÍÅ ÖÅËÈÊÎÌ Â ÑÊÎÁÊÀÕ
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
	ENDIF
	IF vl_ph EQ 1	;;ÐÀÑÊÐÛÒÈÅ ÑÊÎÁÎÊ
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
		vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
		IF vl_add EQ 1
		%	movst vl_dest,____v_last_arg
		ELSE
		%	v vl_dest=____v_last_arg
		ENDIF
		GOTO vl_exit
	ENDIF
	IF vl_ph EQ 2
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1
		lea vl_dest,____v_last_arg
		GOTO vl_exit
	ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos
	vl_plus=vstrstr(<%____v_last_arg>,<~>)+vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
	IF vl_plus EQ 0 AND ((OPATTR (____v_last_arg)) AND (VALID_REF))
	%	movst vl_dest,____v_last_arg
		GOTO vl_exit
	ENDIF
%	v vl_dest=____v_last_arg
	GOTO vl_exit
:v1_many_args
	vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
	IF vl_ph EQ 1
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
	ENDIF
	IF vl_ph EQ 1
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
		vl_ph=vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
		vl_ph=vl_ph+vstrstr(<%____v_last_arg>,< and >)+vstrstr(<%____v_last_arg>,<~>)
		vl_ph=vl_ph+vstrstr(<%____v_last_arg>,<}}>)+vstrstr(<%____v_last_arg>,<{{>)
		IF vl_ph
		%	v vl_dest=____v_last_arg
			GOTO pre_vl_loop
		ENDIF
		vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
		IF vl_add EQ 1
		%	movst vl_dest,____v_last_arg
			GOTO pre_vl_loop
		ENDIF
	%	v vl_dest=____v_last_arg
	ELSEIF vl_ph EQ 2
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-vl_cpos-1)
		lea vl_dest,____v_last_arg
	ELSE
		____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
		vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
		IF vl_add EQ 1
		%	movst vl_dest,____v_last_arg
		ELSE
			vl_add=((OPATTR (____v_last_arg)) AND (VALID_REF))
			vl_ph=vstrstr(<%____v_last_arg>,<+>)+vstrstr(<%____v_last_arg>,<->)
			vl_ph=vl_ph+vstrstr(<%____v_last_arg>,< and >)+vstrstr(<%____v_last_arg>,<~>)
			vl_ph=vl_ph+vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
			IF vl_ph OR (vl_add EQ 0)
			%	v vl_dest=____v_last_arg
			ELSE
			%	movst vl_dest,____v_last_arg
			ENDIF
		ENDIF
	ENDIF
:pre_vl_loop
	vl_cpos=vl_plus+2	;;ÌÅÑÒÎ ÍÀÇÍÀ×ÅÍÈß ÇÀÃÐÓÆÅÍÎ ÏÅÐÂÛÌ ÑËÀÃÀÅÌÛÌ
	IF vl_def_add EQ 3
		vl_cpos=vl_cpos-1
	ENDIF
:vl_loop
	WHILE vl_cpos LE vl_expr_len	;;ÍÀ ÊÀÆÄÎÉ ÈÒÒÅÐÀÖÈÈ ÎÁÐÀÁÀÒÛÂÀÅÒÑß 1 ÀÐÃÓÌÅÍÒ
		vl_add=vl_def_add
		vl_ph=0
		vl_char SUBSTR <vl_expr>,vl_cpos,1
		IFIDN vl_char,<(>
			vl_ph=1
		ENDIF
		IFIDN vl_char,<&>
			vl_ph=2
		ENDIF
		IF vl_cpos GT vl_expr_len
			EXITM
		ENDIF
		vl_def_add=1
		vl_plus=vstrstr(<vl_expr>,<}}>,vl_cpos)
		vl_plus2=vstrstr(<vl_expr>,<{{>,vl_cpos)
		IF vl_plus
			IF vl_plus2 AND (vl_plus2 LT vl_plus)
				vl_def_add=2
				vl_plus=vl_plus2
			ENDIF
		ELSE
			vl_def_add=2
			vl_plus=vl_plus2
		ENDIF
		;;;;;; ÓÌÍÎÆÅÍÈÅ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		vl_plus2=vstrstr(<vl_expr>,<*>,vl_cpos)
		IF vl_plus
			IF vl_plus2 AND (vl_plus2 LT vl_plus)
				vl_def_add=3
				vl_plus=vl_plus2
			ENDIF
		ELSE
			vl_def_add=3
			vl_plus=vl_plus2
		ENDIF
		;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		IF vl_plus EQ 0		;;ÎÁÐÀÁÎÒÊÀ ÏÎÑËÅÄÍÅÃÎ ÀÐÃÓÌÅÍÒÀ
			vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
			IF vl_ph EQ 1
				IFDIF vl_char2,<)>
					vl_ph=0
				ENDIF
			ENDIF
			IF vl_ph EQ 1	;ÐÀÑÊÐÛÒÈÅ ÑÊÎÁÎÊ
				____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
				vl_ph=vstrstr(<%____v_last_arg>,<+>)+vstrstr(<%____v_last_arg>,<->)
				vl_ph=vl_ph+vstrstr(<%____v_last_arg>,< and >)+vstrstr(<%____v_last_arg>,<~>)
				vl_ph=vl_ph+vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
				IF vl_ph EQ 0
					IF vl_add EQ 1
						vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
						vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
						IF vl_add
							vl_ph=@CatStr(%(____v_last_arg))
							IF vl_ph
								shr vl_dest,____v_last_arg
							ENDIF
						ELSEIF vl_ph
							shr vl_dest,____v_last_arg
						ELSE
						%	v cl=____v_last_arg
							shr vl_dest,cl
						ENDIF
					ELSEIF vl_add EQ 2
						vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
						vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
						IF vl_add
							vl_ph=@CatStr(%(____v_last_arg))
							IF vl_ph
								shl vl_dest,____v_last_arg
							ENDIF
						ELSEIF vl_ph
							shl vl_dest,____v_last_arg
						ELSE
						%	v cl=____v_last_arg
							shl vl_dest,cl
						ENDIF
					ELSEIF vl_add EQ 3
						imul vl_dest,____v_last_arg
					ENDIF
				ELSE
					vl_ph=vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
					IF vl_ph
						IF vl_add EQ 1
						%	v cl=____v_last_arg
							shr vl_dest,cl
						ELSEIF vl_add EQ 2
						%	v cl=____v_last_arg
							shl vl_dest,cl
						ELSEIF vl_add EQ 3
							imul vl_dest,____v_last_arg
						ENDIF
					ELSE
						vl_ph=vstrstr(<%____v_last_arg>,< and >)
						IF vl_ph
							IF vl_add EQ 1
							%	v4 cl=____v_last_arg
								shr vl_dest,cl
							ELSEIF vl_add EQ 2
							%	v4 cl=____v_last_arg
								shl vl_dest,cl
							ELSEIF vl_add EQ 3
								imul vl_dest,____v_last_arg
							ENDIF
						ELSE
							vl_ph=vstrstr(<%____v_last_arg>,<~>)
							IF vl_ph
								IF vl_add EQ 1
								%	v4 cl=____v_last_arg
									shr vl_dest,cl
								ELSEIF vl_add EQ 2
								%	v4 cl=____v_last_arg
									shl vl_dest,cl
								ELSEIF vl_add EQ 3
									imul vl_dest,____v_last_arg
								ENDIF
								GOTO mac_label1
							ENDIF
							IF vl_add EQ 1
							%	v2 cl=____v_last_arg
								shr vl_dest,cl
								GOTO mac_label1
							ENDIF
							IF vl_add EQ 2
							%	v2 cl=____v_last_arg
								shl vl_dest,cl
								GOTO mac_label1
							ENDIF
							IF vl_add EQ 3
								imul vl_dest,____v_last_arg
							ENDIF
						ENDIF
					ENDIF
				ENDIF
			:mac_label1
				vl_cpos=vl_expr_len+1
				GOTO v1_terminal	
			ENDIF
			IF vl_ph EQ 2
				____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1)
				lea rcx,____v_last_arg
				IF vl_add EQ 1
					shr vl_dest,cl
				ELSEIF vl_add EQ 2
					shl vl_dest,cl
				ELSEIF vl_add EQ 3
					imul vl_dest,rcx
				ENDIF
				EXITM
			ENDIF
			____v_last_arg SUBSTR <vl_expr>,vl_cpos
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				IF (vl_add OR vl_ph)
					shr vl_dest,____v_last_arg
				ELSE
				%	v cl=____v_last_arg
					shr vl_dest,cl
				ENDIF
			ELSEIF vl_add EQ 2
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				IF (vl_add OR vl_ph)
					shl vl_dest,____v_last_arg
				ELSE
				%	v cl=____v_last_arg
					shl vl_dest,cl
				ENDIF
			ELSEIF vl_add EQ 3
				imul vl_dest,____v_last_arg
			ENDIF
			EXITM
		ENDIF
		vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
		IF vl_ph EQ 1
			IFDIF vl_char2,<)>
				vl_ph=0
			ENDIF
		ENDIF
		IF vl_ph EQ 1		;;ÎÁÐÀÁÎÒÊÀ Î×ÅÐÅÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
			____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
			IF vl_add EQ 1
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add OR vl_ph
					shr vl_dest,____v_last_arg
				ELSE
				%	v cl=____v_last_arg
					shr vl_dest,cl
				ENDIF
			ELSEIF vl_add EQ 2
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add OR vl_ph
					shl vl_dest,____v_last_arg
				ELSE
				%	v cl=____v_last_arg
					shl vl_dest,cl
				ENDIF
			ELSEIF vl_add EQ 3
				imul vl_dest,____v_last_arg
			ENDIF
		ELSEIF vl_ph EQ 2
			____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1),(vl_plus-vl_cpos)
			lea rcx,____v_last_arg
			IF vl_def_add EQ 1
				shr vl_dest,cl
			ELSEIF vl_def_add EQ 2
				shl vl_dest,cl
			ELSEIF vl_add EQ 3
				imul vl_dest,rcx
			ENDIF
		ELSE
			____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
			IF vl_add EQ 1
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF (vl_add OR vl_ph)
					shr vl_dest,____v_last_arg
				ELSE
				%	v cl=____v_last_arg
					shr vl_dest,cl
				ENDIF
			ELSEIF vl_add EQ 2
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF (vl_add OR vl_ph)
					shl vl_dest,____v_last_arg
				ELSE
				%	v cl=____v_last_arg
					shl vl_dest,cl
				ENDIF
			ELSEIF vl_add EQ 3
				imul vl_dest,____v_last_arg
			ENDIF
		ENDIF
	
		vl_cpos=vl_plus+2
		IF vl_def_add EQ 3
			vl_cpos=vl_cpos-1
		ENDIF
	:v1_terminal
	ENDM
:vl_exit
ENDM
;;ÑËÎÆÅÍÈÅ È ÂÛ×ÈÒÀÍÈÅ
v2 MACRO vl_expr:VARARG
LOCAL vl_def_add,vl_cpos,vl_expr_len,vl_dest,vl_plus
	vl_def_add=1
	vl_expr_len SIZESTR <vl_expr>
	vl_cpos=vstrstr(<vl_expr>,<=>)+1
	vl_dest SUBSTR <vl_expr>,1,(vl_cpos-2)
	vl_char SUBSTR <vl_expr>,(vl_cpos-2),1
	IFIDN vl_char,<+>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-3)
		GOTO vl_loop
	ENDIF
	IFIDN vl_char,<->
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-3)
		vl_def_add=0
		GOTO vl_loop
	ENDIF
	vl_add=vl_def_add						;;ÈÍÈÖÈÀËÈÇÀÖÈß ÌÅÑÒÀ ÍÀÇÍÀ×ÅÍÈß ÏÅÐÂÛÌ ÑËÀÃÀÅÌÛÌ ÈËÈ ÂÛ×ÈÒÀÅÌÛÌ
	vl_ph=0
	WHILE vl_cpos LT vl_expr_len			;;ÏÎÈÑÊ ÑËÀÃÀÅÌÎÃÎ ÈËÈ ÂÛ×ÈÒÀÅÌÎÃÎ
		vl_char SUBSTR <vl_expr>,vl_cpos,1
		IFIDN vl_char,<+>
			vl_cpos=vl_cpos+1
		ELSEIFIDN vl_char,< >
			vl_cpos=vl_cpos+1
		ELSEIFIDN vl_char,<->
			vl_cpos=vl_cpos+1
			vl_add=vl_add XOR 1
		ELSE
			EXITM
		ENDIF
	ENDM
	IFIDN vl_char,<(>	;;ÂÛÐÀÆÅÍÈÅ Â ÑÊÎÁÊÀÕ
		vl_ph=1
	ENDIF
	IFIDN vl_char,<&>
		vl_ph=2
	ENDIF
	IF vl_cpos GT vl_expr_len
		GOTO vl_exit
	ENDIF
	vl_plus=vstrstr(<vl_expr>,<+>,vl_cpos-1)
	vl_minus=vstrstr(<vl_expr>,<->,vl_cpos-1)
	IF vl_plus EQ 0
		vl_plus=vl_minus
	ELSEIF vl_minus NE 0
		IF vl_plus GT vl_minus
			vl_plus=vl_minus
		ENDIF
	ENDIF
	IF vl_plus NE 0			;ÍÀ ÑËÓ×ÀÉ ÎÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
		GOTO v2_many_args
	ENDIF
	vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
	IF vl_ph EQ 1
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
		IF vl_ph EQ 1
			vl_ph=vstrstr(<vl_expr>,<}}>,vl_cpos-1)+vstrstr(<vl_expr>,<{{>,vl_cpos-1)
			IF vl_ph EQ 0
				vl_ph=1
			ENDIF
		ENDIF
	ENDIF
	IF vl_ph EQ 1
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)		
		IF vl_add EQ 1
		%	v vl_dest=____v_last_arg
			GOTO vl_exit
		ENDIF
	%	v vl_dest=____v_last_arg
		neg vl_dest
		GOTO vl_exit
	ENDIF
	IF vl_ph EQ 2
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1
		lea vl_dest,____v_last_arg
		IF vl_add EQ 0
			neg vl_dest
		ENDIF
		GOTO vl_exit
	ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos
	IF vl_add EQ 1
	%	v1 vl_dest=____v_last_arg
		GOTO vl_exit
	ENDIF
	vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
	IF vl_add EQ 1
	%	movst vl_dest,-____v_last_arg
	ELSE
	%	v1 vl_dest=____v_last_arg
		neg vl_dest
	ENDIF
	GOTO vl_exit
:v2_many_args
	vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
	IF vl_ph EQ 1
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
	ENDIF
	IF vl_ph EQ 1
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
		IF vl_add EQ 1
		%	v vl_dest=____v_last_arg
			vl_cpos=vl_plus
			GOTO vl_loop
		ENDIF
	%	v vl_dest=____v_last_arg
		neg vl_dest
	ELSEIF vl_ph EQ 2
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-vl_cpos-1)
		lea vl_dest,____v_last_arg
		IF vl_add EQ 0
			neg vl_dest
		ENDIF
	ELSE
		____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
		IF vl_add EQ 1
			vl_ph=vstrstr(<%____v_last_arg>,<}}>)+vstrstr(<%____v_last_arg>,<{{>)
			IF vl_ph
			%	v1 vl_dest=____v_last_arg
			ELSE
			%	movst vl_dest,____v_last_arg
			ENDIF
		ELSE
			vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
			IF vl_add EQ 1
			%	movst vl_dest,-____v_last_arg
			ELSE
			%	v1 vl_dest=____v_last_arg
				neg vl_dest
			ENDIF
		ENDIF
	ENDIF
	vl_cpos=vl_plus	;;ÌÅÑÒÎ ÍÀÇÍÀ×ÅÍÈß ÇÀÃÐÓÆÅÍÎ ÏÅÐÂÛÌ ÑËÀÃÀÅÌÛÌ
:vl_loop
	WHILE vl_cpos LE vl_expr_len	;;ÍÀ ÊÀÆÄÎÉ ÈÒÒÅÐÀÖÈÈ ÏÐÈÁÀÂËßÅÒÑß 1 ÀÐÃÓÌÅÍÒ
		vl_add=vl_def_add
		vl_ph=0
		WHILE vl_cpos LT vl_expr_len
			vl_char SUBSTR <vl_expr>,vl_cpos,1
			IFIDN vl_char,<+>
				vl_cpos=vl_cpos+1
			ELSEIFIDN vl_char,< >
				vl_cpos=vl_cpos+1
			ELSEIFIDN vl_char,<->
				vl_cpos=vl_cpos+1
				vl_add=vl_add XOR 1
			ELSE
				EXITM
			ENDIF
		ENDM
		IFIDN vl_char,<(>
			vl_ph=1
		ENDIF
		IFIDN vl_char,<&>
			vl_ph=2
		ENDIF
		IF vl_cpos GT vl_expr_len
			EXITM
		ENDIF
		vl_plus=vstrstr(<vl_expr>,<+>,vl_cpos-1)
		vl_minus=vstrstr(<vl_expr>,<->,vl_cpos-1)
		IF vl_plus EQ 0
			vl_plus=vl_minus
		ELSEIF vl_minus NE 0
			IF vl_plus GT vl_minus
				vl_plus=vl_minus
			ENDIF
		ENDIF
		IF vl_plus EQ 0		;;ÎÁÐÀÁÎÒÊÀ ÏÎÑËÅÄÍÅÃÎ ÀÐÃÓÌÅÍÒÀ
			vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
			IF vl_ph EQ 1
				IFDIF vl_char2,<)>
					vl_ph=0
				ENDIF
			ENDIF
			IF vl_ph EQ 1
				____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
				IF vl_add EQ 1
					vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
					IF vl_add
						vl_ph=@CatStr(%(____v_last_arg))
						IF vl_ph EQ 1
							inc vl_dest
						ELSEIF vl_ph
							add vl_dest,____v_last_arg
						ENDIF
					ELSE
					%	v2 vl_dest+=____v_last_arg
					ENDIF
					EXITM
				ENDIF
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						dec vl_dest
					ELSEIF vl_ph
						sub vl_dest,____v_last_arg
					ENDIF
				ELSE
				%	v2 vl_dest-=____v_last_arg
				ENDIF
				EXITM
			ENDIF
			IF vl_ph EQ 2
				____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1)
				IF ((OPATTR (____v_last_arg)) AND LABEL_EXPR)
				%	movst [rsp-8],vl_dest
					lea vl_dest,____v_last_arg
					IF vl_add EQ 1
						add vl_dest,[rsp-8]
					ELSE
						sub vl_dest,[rsp-8]
						neg vl_dest
					ENDIF
				ELSE
					IF vl_add EQ 1
						lea vl_dest,____v_last_arg[vl_dest]
					ELSE
					%	movst [rsp-8],vl_dest
						lea vl_dest,____v_last_arg
						sub vl_dest,[rsp-8]
						neg vl_dest
					ENDIF
				ENDIF
				EXITM
			ENDIF
			____v_last_arg SUBSTR <vl_expr>,vl_cpos
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						inc vl_dest
					ELSEIF vl_ph
						add vl_dest,____v_last_arg
					ENDIF
				ELSE
					vl_add=((OPATTR (____v_last_arg)) AND (VALID_REF))
					vl_ph=vstrstr(<%____v_last_arg>,<}}>)+vstrstr(<%____v_last_arg>,<{{>)
					IF vl_add AND (vl_ph EQ 0)
						add vl_dest,____v_last_arg
					ELSE
					%	v1 [rsp-8]=____v_last_arg
						add vl_dest,[rsp-8]
					ENDIF
				ENDIF
			ELSE
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						dec vl_dest
					ELSEIF vl_ph
						sub vl_dest,____v_last_arg
					ENDIF
				ELSE
					vl_add=((OPATTR (____v_last_arg)) AND (VALID_REF))
					vl_ph=vstrstr(<%____v_last_arg>,<}}>)+vstrstr(<%____v_last_arg>,<{{>)
					IF vl_add AND (vl_ph EQ 0)
						sub vl_dest,____v_last_arg
					ELSE
					%	v1 [rsp-8]=____v_last_arg
						sub vl_dest,[rsp-8]
					ENDIF
				ENDIF
			ENDIF
			EXITM
		ENDIF
		vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
		IF vl_ph EQ 1
			IFDIF vl_char2,<)>
				vl_ph=0
			ENDIF
		ENDIF
		IF vl_ph EQ 1		;;ÎÁÐÀÁÎÒÊÀ Î×ÅÐÅÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
			____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						inc vl_dest
					ELSEIF vl_ph
						add vl_dest,____v_last_arg
					ENDIF
				ELSE
				%	v2 vl_dest+=____v_last_arg
				ENDIF
			ELSE
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						dec vl_dest
					ELSEIF vl_ph
						sub vl_dest,____v_last_arg
					ENDIF
				ELSE
				%	v2 vl_dest-=____v_last_arg
				ENDIF
			ENDIF
		ELSEIF vl_ph EQ 2
			____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1),(vl_plus-vl_cpos-1)
			IF ((OPATTR (____v_last_arg)) AND LABEL_EXPR)
			%	movst [rsp-8],vl_dest
				lea vl_dest,____v_last_arg
				IF vl_add EQ 1
					add vl_dest,[rsp-8]
				ELSE
					sub vl_dest,[rsp-8]
					neg vl_dest
				ENDIF
			ELSE
				IF vl_add EQ 1
					lea vl_dest,____v_last_arg[vl_dest]
				ELSE
				%	movst [rsp-8],vl_dest
					lea vl_dest,____v_last_arg
					sub vl_dest,[rsp-8]
					neg vl_dest
				ENDIF
			ENDIF
		ELSE
			____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						inc vl_dest
					ELSEIF vl_ph
						add vl_dest,____v_last_arg
					ENDIF
				ELSE
					vl_add=((OPATTR (____v_last_arg)) AND (VALID_REF))
					vl_ph=vstrstr(<%____v_last_arg>,<}}>)+vstrstr(<%____v_last_arg>,<{{>)
					IF vl_add AND (vl_ph EQ 0)
						add vl_dest,____v_last_arg
					ELSE
					%	v1 [rsp-8]=____v_last_arg
						add vl_dest,[rsp-8]
					ENDIF
				ENDIF
			ELSE
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph EQ 1
						dec vl_dest
					ELSEIF vl_ph
						sub vl_dest,____v_last_arg
					ENDIF
				ELSE
					vl_add=((OPATTR (____v_last_arg)) AND (VALID_REF))
					IF vl_add
						sub vl_dest,____v_last_arg
					ELSE
					%	v1 [rsp-8]=____v_last_arg
						sub vl_dest,[rsp-8]
					ENDIF
				ENDIF
			ENDIF
		ENDIF
		vl_cpos=vl_plus
	ENDM
:vl_exit
ENDM
;ÇÄÅÑÜ ÈÍÂÅÐÑÈß ~
NotCount MACRO vl_expr:VARARG
	____vl_expr_len SIZESTR <vl_expr>
	____not_count=0
	____vl_expr_pos=1
	WHILE ____vl_expr_pos LE ____vl_expr_len
		____not_count_char SUBSTR <vl_expr>,____vl_expr_pos,1
		IFIDN ____not_count_char,<~>
			____not_count=____not_count+1
		ELSEIFDIF ____not_count_char,< >
			EXITM
		ENDIF
		____vl_expr_pos=____vl_expr_pos+1
	ENDM
ENDM
;ÇÄÅÑÜ ËÎÃÈ×ÅÑÊÎÅ È and
v4 MACRO vl_expr:VARARG
LOCAL vl_def_add,vl_cpos,vl_expr_len,vl_dest,vl_plus
	vl_def_add=1
	vl_expr_len SIZESTR <vl_expr>
	vl_cpos=vstrstr(<vl_expr>,<=>)+1
	vl_dest SUBSTR <vl_expr>,1,(vl_cpos-2)
	vl_char SUBSTR <vl_expr>,(vl_cpos-2),1
	IFIDN vl_char,<&>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-3)
		GOTO vl_loop
	ENDIF
	vl_add=vl_def_add						;;ÈÍÈÖÈÀËÈÇÀÖÈß ÌÅÑÒÀ ÍÀÇÍÀ×ÅÍÈß ÏÅÐÂÛÌ ÀÐÃÓÌÅÍÒÎÌ
	vl_ph=0
	vl_char SUBSTR <vl_expr>,vl_cpos,1		;;ÏÎÈÑÊ ÀÐÃÓÌÅÍÒÀ
	IFIDN vl_char,<(>	;;ÂÛÐÀÆÅÍÈÅ Â ÑÊÎÁÊÀÕ
		vl_ph=1
	ENDIF
	IFIDN vl_char,<&>
		vl_ph=2
	ENDIF
	IF vl_cpos GT vl_expr_len
		GOTO vl_exit
	ENDIF
	vl_plus=vstrstr(<vl_expr>,< and >,vl_cpos-1)
	IF vl_plus NE 0			;ÍÀ ÑËÓ×ÀÉ ÎÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
		GOTO v4_many_args
	ENDIF
	vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
	IF vl_ph EQ 1	;;ÅÑËÈ ÂÛÐÀÆÅÍÈÅ ÍÅ ÖÅËÈÊÎÌ Â ÑÊÎÁÊÀÕ
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
		IF vl_ph EQ 1
			vl_ph=vstrstr(<vl_expr>,<}}>,vl_cpos-1)+vstrstr(<vl_expr>,<{{>,vl_cpos-1)
			IF vl_ph EQ 0
				vl_ph=1
			ENDIF
		ENDIF
	ENDIF
	IF vl_ph EQ 1	;;ÐÀÑÊÐÛÒÈÅ ÑÊÎÁÎÊ
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
		vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
		IF vl_add EQ 1
		%	movst vl_dest,____v_last_arg
		ELSE
		%	v vl_dest=____v_last_arg
		ENDIF
		GOTO vl_exit
	ENDIF
;;	IF vl_ph EQ 2
;;		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1
;;		lea vl_dest,____v_last_arg
;;		GOTO vl_exit
;;	ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos
	vl_plus=vstrstr(<%____v_last_arg>,<~>)+vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
	vl_plus=vl_plus+vstrstr(<%____v_last_arg>,<{>)+vstrstr(<%____v_last_arg>,<}>)
	vl_plus=vl_plus+vstrstr(<%____v_last_arg>,<+>)+vstrstr(<%____v_last_arg>,<->)
	IF vl_plus NE 0
		GOTO v4_call_v2
	ENDIF
	IF vl_ph EQ 2
		GOTO v4_call_v2
	ENDIF
	vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
	IF vl_add
	%	movst vl_dest,____v_last_arg
		GOTO vl_exit
	ENDIF
:v4_call_v2
	NotCount %____v_last_arg
	IF ____vl_expr_pos GT 1
		____v_last_arg SUBSTR ____v_last_arg,____vl_expr_pos
	ENDIF
	IF ____not_count AND 1
	%	v2 vl_dest=____v_last_arg
		not vl_dest
		GOTO vl_exit
	ENDIF
%	v2 vl_dest=____v_last_arg
	GOTO vl_exit
:v4_many_args
	vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
	IF vl_ph EQ 1
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
	ENDIF
	IF vl_ph EQ 1
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
		vl_ph=vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)+vstrstr(<%____v_last_arg>,<~>)
		vl_ph=vl_ph+vstrstr(<%____v_last_arg>,<{{>)+vstrstr(<%____v_last_arg>,<}}>)
		IF vl_ph
		%	v vl_dest=____v_last_arg
			GOTO pre_vl_loop
		ENDIF
		vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
		IF vl_add EQ 1
		%	movst vl_dest,____v_last_arg
		ELSE
		%	v vl_dest=____v_last_arg
		ENDIF
	ELSEIF vl_ph EQ 2
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-vl_cpos-1)
		lea vl_dest,____v_last_arg
		GOTO pre_vl_loop
	ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
	vl_ph=vstrstr(<%____v_last_arg>,<}}>)+vstrstr(<%____v_last_arg>,<~>)
	IF vl_ph NE 0
		GOTO v4_call_v
	ENDIF
	vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
	IF vl_add EQ 1
	%	movst vl_dest=____v_last_arg
		GOTO pre_vl_loop
	ENDIF
:v4_call_v
%	v vl_dest=____v_last_arg
:pre_vl_loop
	vl_cpos=vl_plus+5	;;ÌÅÑÒÎ ÍÀÇÍÀ×ÅÍÈß ÇÀÃÐÓÆÅÍÎ ÏÅÐÂÛÌ ÑËÀÃÀÅÌÛÌ
:vl_loop
	WHILE vl_cpos LE vl_expr_len	;;ÍÀ ÊÀÆÄÎÉ ÈÒÒÅÐÀÖÈÈ ÏÐÈÁÀÂËßÅÒÑß 1 ÀÐÃÓÌÅÍÒ
		vl_add=vl_def_add
		vl_ph=0
		vl_char SUBSTR <vl_expr>,vl_cpos,1
		IFIDN vl_char,<(>
			vl_ph=1
		ENDIF
		IFIDN vl_char,<&>
			vl_ph=2
		ENDIF
		IF vl_cpos GT vl_expr_len
			EXITM
		ENDIF
		vl_plus=vstrstr(<vl_expr>,< and >,vl_cpos-1)
		IF vl_plus EQ 0		;;ÎÁÐÀÁÎÒÊÀ ÏÎÑËÅÄÍÅÃÎ ÀÐÃÓÌÅÍÒÀ
			vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
			IF vl_ph EQ 1
				IFDIF vl_char2,<)>
					vl_ph=0
				ENDIF
			ENDIF
			IF vl_ph EQ 1	;ÐÀÑÊÐÛÒÈÅ ÑÊÎÁÎÊ
				____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
				vl_ph=vstrstr(<%____v_last_arg>,<|>)+vstrstr(<%____v_last_arg>,<^>)
				IF vl_ph EQ 0
					vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
					vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
					IF vl_add
						vl_ph=@CatStr(%(____v_last_arg))
						IF vl_ph
							and vl_dest,____v_last_arg
						ENDIF
					ELSEIF vl_ph
						and vl_dest,____v_last_arg
					ELSE
					%	v [rsp-8]=____v_last_arg
						and vl_dest,[rsp-8]
					ENDIF
				ELSE
				%	v [rsp-8]=____v_last_arg
					and vl_dest,[rsp-8]
				ENDIF
				EXITM
			ENDIF
			IF vl_ph EQ 2
				____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1)
			%	movst [rsp-8],vl_dest
				lea vl_dest,____v_last_arg
				and vl_dest,[rsp-8]
				EXITM
			ENDIF
			____v_last_arg SUBSTR <vl_expr>,vl_cpos
			vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
			vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
			IF (vl_add OR vl_ph)
				and vl_dest,____v_last_arg
			ELSE
				NotCount %____v_last_arg
				IF ____vl_expr_pos GT 1
					____v_last_arg SUBSTR <%____v_last_arg>,____vl_expr_pos
				ENDIF
				IF ____not_count AND 1
				%	v2 [rsp-8]=____v_last_arg
					not qptr [rsp-8]
				ELSE
				%	v2 [rsp-8]=____v_last_arg
				ENDIF
				and vl_dest,[rsp-8]
			ENDIF
			EXITM
		ENDIF
		vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
		IF vl_ph EQ 1
			IFDIF vl_char2,<)>
				vl_ph=0
			ENDIF
		ENDIF
		IF vl_ph EQ 1		;;ÎÁÐÀÁÎÒÊÀ Î×ÅÐÅÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
			____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
			vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
			vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
			IF vl_add OR vl_ph
				and vl_dest,____v_last_arg
			ELSE
			%	v vl_dest|=____v_last_arg
			ENDIF
		ELSEIF vl_ph EQ 2
			____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1),(vl_plus-vl_cpos)
		%	movst [rsp-8],vl_dest
			lea vl_dest,____v_last_arg
			and vl_dest,[rsp-8]
		ELSE
			____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
			vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
			vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
			IF (vl_add OR vl_ph)
				and vl_dest,____v_last_arg
			ELSE
				NotCount %____v_last_arg
				IF ____vl_expr_pos GT 1
					____v_last_arg SUBSTR <%____v_last_arg>,____vl_expr_pos
				ENDIF
				IF ____not_count AND 1
				%	v2 [rsp-8]=____v_last_arg
					not qptr [rsp-8]
				ELSE
				%	v2 [rsp-8]=____v_last_arg
				ENDIF
				and vl_dest,[rsp-8]
			ENDIF
		ENDIF
		vl_cpos=vl_plus+5
	ENDM
:vl_exit
ENDM
v MACRO vl_expr:VARARG
LOCAL vl_def_add,vl_cpos,vl_expr_len,vl_dest,vl_plus
	vl_def_add=1
	vl_expr_len SIZESTR <vl_expr>
	vl_cpos=vstrstr(<vl_expr>,<=>)+1
	vl_dest SUBSTR <vl_expr>,1,(vl_cpos-2)
	vl_char SUBSTR <vl_expr>,(vl_cpos-2),1
	IFIDN vl_char,<|>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-3)
		GOTO vl_loop
	ENDIF
	IFIDN vl_char,<^>
		vl_dest SUBSTR <vl_expr>,1,(vl_cpos-3)
		vl_def_add=0
		GOTO vl_loop
	ENDIF
	vl_add=vl_def_add						;;ÈÍÈÖÈÀËÈÇÀÖÈß ÌÅÑÒÀ ÍÀÇÍÀ×ÅÍÈß ÏÅÐÂÛÌ ÑËÀÃÀÅÌÛÌ ÈËÈ ÂÛ×ÈÒÀÅÌÛÌ
	vl_ph=0
	vl_char SUBSTR <vl_expr>,vl_cpos,1
	IFIDN vl_char,<(>	;;ÂÛÐÀÆÅÍÈÅ Â ÑÊÎÁÊÀÕ
		vl_ph=1
	ENDIF
	IFIDN vl_char,<&>
		vl_ph=2
	ENDIF
	IF vl_cpos GT vl_expr_len
		GOTO vl_exit
	ENDIF
	vl_plus=vstrstr(<vl_expr>,<|>,vl_cpos-1)
	vl_minus=vstrstr(<vl_expr>,<^>,vl_cpos-1)
	IF vl_plus EQ 0
		vl_plus=vl_minus
	ELSEIF vl_minus NE 0
		IF vl_plus GT vl_minus
			vl_plus=vl_minus
		ENDIF
	ENDIF
	IF vl_plus NE 0			;ÍÀ ÑËÓ×ÀÉ ÎÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
		GOTO v_many_args
	ENDIF
	vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
	IF vl_ph EQ 1	;;ÅÑËÈ ÂÛÐÀÆÅÍÈÅ ÍÅ ÖÅËÈÊÎÌ Â ÑÊÎÁÊÀÕ
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
		IF vl_ph EQ 1
			vl_ph=vstrstr(<vl_expr>,<}}>,vl_cpos-1)+vstrstr(<vl_expr>,<{{>,vl_cpos-1)
			IF vl_ph EQ 0
				vl_ph=1
			ENDIF
		ENDIF
	ENDIF
	IF vl_ph EQ 1
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
	%	v vl_dest=____v_last_arg
		GOTO vl_exit
	ENDIF
;;		IF vl_ph EQ 2
;;			____v_last_arg SUBSTR <vl_expr>,vl_cpos+1
;;			lea vl_dest,____v_last_arg
;;			GOTO vl_exit
;;		ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos
	%	v4 vl_dest=____v_last_arg
	GOTO vl_exit
:v_many_args
	vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
	IF vl_ph EQ 1
		IFDIF vl_char2,<)>
			vl_ph=0
		ENDIF
	ENDIF
	IF vl_ph NE 1
		GOTO v_is_vl_ph_2
	ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
%	v vl_dest=____v_last_arg
	GOTO v_pre_vl_loop
:v_is_vl_ph_2
	IF vl_ph EQ 2
		____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-vl_cpos-1)
		lea vl_dest,____v_last_arg
		GOTO v_pre_vl_loop
	ENDIF
	____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
%	v4 vl_dest=____v_last_arg
:v_pre_vl_loop
	vl_cpos=vl_plus	;;ÌÅÑÒÎ ÍÀÇÍÀ×ÅÍÈß ÇÀÃÐÓÆÅÍÎ ÏÅÐÂÛÌ ÑËÀÃÀÅÌÛÌ
:vl_loop
	WHILE vl_cpos LE vl_expr_len	;;ÍÀ ÊÀÆÄÎÉ ÈÒÒÅÐÀÖÈÈ ÏÐÈÁÀÂËßÅÒÑß 1 ÀÐÃÓÌÅÍÒ
		vl_add=vl_def_add
		vl_ph=0
		WHILE vl_cpos LT vl_expr_len
			vl_char SUBSTR <vl_expr>,vl_cpos,1
			IFIDN vl_char,<|>
				vl_cpos=vl_cpos+1
			ELSEIFIDN vl_char,< >
				vl_cpos=vl_cpos+1
			ELSEIFIDN vl_char,<^>
				vl_cpos=vl_cpos+1
				vl_add=vl_add XOR 1
			ELSE
				EXITM
			ENDIF
		ENDM
		IFIDN vl_char,<(>
			vl_ph=1
		ENDIF
		IFIDN vl_char,<&>
			vl_ph=2
		ENDIF
		IF vl_cpos GT vl_expr_len
			EXITM
		ENDIF
		vl_plus=vstrstr(<vl_expr>,<|>,vl_cpos-1)
		vl_minus=vstrstr(<vl_expr>,<^>,vl_cpos-1)
		IF vl_plus EQ 0
			vl_plus=vl_minus
		ELSEIF vl_minus NE 0
			IF vl_plus GT vl_minus
				vl_plus=vl_minus
			ENDIF
		ENDIF
		IF vl_plus EQ 0		;;ÎÁÐÀÁÎÒÊÀ ÏÎÑËÅÄÍÅÃÎ ÀÐÃÓÌÅÍÒÀ
			vl_char2 SUBSTR <vl_expr>,vl_expr_len,1
			IF vl_ph EQ 1
				IFDIF vl_char2,<)>
					vl_ph=0
				ENDIF
			ENDIF
			IF vl_ph EQ 1	;ÐÀÑÊÐÛÒÈÅ ÑÊÎÁÎÊ
				____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_expr_len-vl_cpos-1)
				vl_ph=vstrstr(%____v_last_arg,<|>)+vstrstr(%____v_last_arg,<^>)
				IF vl_add EQ 1
					IF vl_ph EQ 0
						vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
						vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
						IF vl_add
							vl_ph=@CatStr(%(____v_last_arg))
							IF vl_ph
								or vl_dest,____v_last_arg
							ENDIF
						ELSEIF vl_ph
							or vl_dest,____v_last_arg
						ELSE
						%	v vl_dest|=____v_last_arg
						ENDIF
					ELSE
					%	v vl_dest|=____v_last_arg
					ENDIF
					EXITM
				ENDIF
				IF vl_ph EQ 0
					vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
					vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
					IF vl_add
						vl_ph=@CatStr(%(____v_last_arg))
						IF vl_ph
							xor vl_dest,____v_last_arg
						ENDIF
					ELSEIF vl_ph
						xor vl_dest,____v_last_arg
					ELSE
					%	v vl_dest^=____v_last_arg
					ENDIF
				ELSE
				%	v vl_dest^=____v_last_arg
				ENDIF
				EXITM
			ENDIF
			IF vl_ph EQ 2
				____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1)
			%	movst [rsp-8],vl_dest
				lea vl_dest,____v_last_arg
				IF vl_add EQ 1
					or vl_dest,[rsp-8]
				ELSE
					xor [rsp-8],vl_dest
				%	movst vl_dest,[rsp-8]
				ENDIF
				EXITM
			ENDIF
			____v_last_arg SUBSTR <vl_expr>,vl_cpos
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph
						or vl_dest,____v_last_arg
					ENDIF
				ELSEIF vl_ph
					or vl_dest,____v_last_arg
				ELSE
				%	v4 [rsp-8]=____v_last_arg
					or vl_dest,[rsp-8]
				ENDIF
			ELSE
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph
						xor vl_dest,____v_last_arg
					ENDIF
				ELSEIF vl_ph
					xor vl_dest,____v_last_arg
				ELSE
				%	v4 [rsp-8]=____v_last_arg
					xor vl_dest,[rsp-8]
				ENDIF
			ENDIF
			EXITM
		ENDIF
		vl_char2 SUBSTR <vl_expr>,vl_plus-1,1
		IF vl_ph EQ 1
			IFDIF vl_char2,<)>
				vl_ph=0
			ENDIF
		ENDIF
		IF vl_ph EQ 1		;;ÎÁÐÀÁÎÒÊÀ Î×ÅÐÅÄÍÎÃÎ ÀÐÃÓÌÅÍÒÀ
			____v_last_arg SUBSTR <vl_expr>,vl_cpos+1,(vl_plus-1-vl_cpos-1)
			vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph
						or vl_dest,____v_last_arg
					ENDIF
				ELSEIF vl_ph
					or vl_dest,____v_last_arg
				ELSE
				%	v vl_dest|=____v_last_arg
				ENDIF
			ELSE
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph
						xor vl_dest,____v_last_arg
					ENDIF
				ELSEIF vl_ph
					xor vl_dest,____v_last_arg
				ELSE
				%	v vl_dest^=____v_last_arg
				ENDIF
			ENDIF
		ELSEIF vl_ph EQ 2
			____v_last_arg SUBSTR <vl_expr>,(vl_cpos+1),(vl_plus-vl_cpos)
		%	movst [rsp-8],vl_dest
			lea vl_dest,____v_last_arg
			IF vl_add EQ 1
				or vl_dest,[rsp-8]
			ELSE
				xor [rsp-8],vl_dest
			%	movst vl_dest,[rsp-8]
			ENDIF
		ELSE
			____v_last_arg SUBSTR <vl_expr>,vl_cpos,(vl_plus-vl_cpos)
			vl_ph=((OPATTR (____v_last_arg)) AND (VALID_REF))
			IF vl_add EQ 1
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph
						or vl_dest,____v_last_arg
					ENDIF
				ELSEIF vl_ph
					or vl_dest,____v_last_arg
				ELSE
				%	v4 [rsp-8]=____v_last_arg
					or vl_dest,[rsp-8]
				ENDIF
			ELSE
				vl_add=((OPATTR (____v_last_arg)) EQ (VALID_REF OR IMM_EXPR))
				IF vl_add
					vl_ph=@CatStr(%(____v_last_arg))
					IF vl_ph
						xor vl_dest,____v_last_arg
					ENDIF
				ELSEIF vl_ph
					xor vl_dest,____v_last_arg
				ELSE
					%	v4 [rsp-8]=____v_last_arg
					xor vl_dest,[rsp-8]
				ENDIF
			ENDIF
		ENDIF
		vl_cpos=vl_plus
	ENDM
:vl_exit
ENDM
PreTestCond0 TEXTEQU <>
PreTestCond1 TEXTEQU <>
PreTestCond2 TEXTEQU <>
PreTestCond3 TEXTEQU <>
PreTestCond4 TEXTEQU <>
PreTestCond5 TEXTEQU <>
PreTestCond6 TEXTEQU <>
PreTestCond7 TEXTEQU <>
PreTestCond8 TEXTEQU <>
PreTestCond9 TEXTEQU <>
PreTestCond10 TEXTEQU <>
PreTestCond11 TEXTEQU <>
PreTestCond12 TEXTEQU <>
PreTestCond13 TEXTEQU <>
PreTestCond14 TEXTEQU <>
PreTestCond15 TEXTEQU <>
PreTestCond16 TEXTEQU <>
PreTestCond17 TEXTEQU <>
PreTestCond18 TEXTEQU <>
PreTestCond19 TEXTEQU <>
.for MACRO PreLoopAction,args,PreTestCondAction:VARARG
	v PreLoopAction
	SaveUntilCondsLabel
	IFDIF <args>,<TRUE>
		jmp LastUntilConds
	ENDIF
	SaveUntilOutLabel
	SaveUntilLabel	
LastUntilLabel:
	while_cnt=while_cnt+1
	IF while_cnt EQ 1
		WhileLevel0 TEXTEQU <args>
		PreTestCond0 TEXTEQU <PreTestCondAction>
		wcond0l SIZESTR <args>
	ELSEIF while_cnt EQ 2
		WhileLevel1 TEXTEQU <args>
		PreTestCond1 TEXTEQU <PreTestCondAction>
		wcond1l SIZESTR <args>
	ELSEIF while_cnt EQ 3
		WhileLevel2 TEXTEQU <args>
		PreTestCond2 TEXTEQU <PreTestCondAction>
		wcond2l SIZESTR <args>
	ELSEIF while_cnt EQ 4
		WhileLevel3 TEXTEQU <args>
		PreTestCond3 TEXTEQU <PreTestCondAction>
		wcond3l SIZESTR <args>
	ELSEIF while_cnt EQ 5
		WhileLevel4 TEXTEQU <args>
		PreTestCond4 TEXTEQU <PreTestCondAction>
		wcond4l SIZESTR <args>
	ELSEIF while_cnt EQ 6
		WhileLevel5 TEXTEQU <args>
		PreTestCond5 TEXTEQU <PreTestCondAction>
		wcond5l SIZESTR <args>
	ELSEIF while_cnt EQ 7
		WhileLevel6 TEXTEQU <args>
		PreTestCond6 TEXTEQU <PreTestCondAction>
		wcond6l SIZESTR <args>
	ELSEIF while_cnt EQ 8
		WhileLevel7 TEXTEQU <args>
		PreTestCond7 TEXTEQU <PreTestCondAction>
		wcond7l SIZESTR <args>
	ELSEIF while_cnt EQ 9
		WhileLevel8 TEXTEQU <args>
		PreTestCond8 TEXTEQU <PreTestCondAction>
		wcond8l SIZESTR <args>
	ELSEIF while_cnt EQ 10
		WhileLevel9 TEXTEQU <args>
		PreTestCond9 TEXTEQU <PreTestCondAction>
		wcond9l SIZESTR <args>
	ELSEIF while_cnt EQ 11
		WhileLevel10 TEXTEQU <args>
		PreTestCond10 TEXTEQU <PreTestCondAction>
		wcond10l SIZESTR <args>
	ELSEIF while_cnt EQ 12
		WhileLevel11 TEXTEQU <args>
		PreTestCond11 TEXTEQU <PreTestCondAction>
		wcond11l SIZESTR <args>
	ELSEIF while_cnt EQ 13
		WhileLevel12 TEXTEQU <args>
		PreTestCond12 TEXTEQU <PreTestCondAction>
		wcond12l SIZESTR <args>
	ELSEIF while_cnt EQ 14
		WhileLevel13 TEXTEQU <args>
		PreTestCond13 TEXTEQU <PreTestCondAction>
		wcond13l SIZESTR <args>
	ELSEIF while_cnt EQ 15
		WhileLevel14 TEXTEQU <args>
		PreTestCond14 TEXTEQU <PreTestCondAction>
		wcond14l SIZESTR <args>
	ELSEIF while_cnt EQ 16
		WhileLevel15 TEXTEQU <args>
		PreTestCond15 TEXTEQU <PreTestCondAction>
		wcond15l SIZESTR <args>
	ELSEIF while_cnt EQ 17
		WhileLevel16 TEXTEQU <args>
		PreTestCond16 TEXTEQU <PreTestCondAction>
		wcond16l SIZESTR <args>
	ELSEIF while_cnt EQ 18
		WhileLevel17 TEXTEQU <args>
		PreTestCond17 TEXTEQU <PreTestCondAction>
		wcond17l SIZESTR <args>
	ELSEIF while_cnt EQ 19
		WhileLevel18 TEXTEQU <args>
		PreTestCond18 TEXTEQU <PreTestCondAction>
		wcond18l SIZESTR <args>
	ELSEIF while_cnt EQ 20
		WhileLevel19 TEXTEQU <args>
		PreTestCond19 TEXTEQU <PreTestCondAction>
		wcond19l SIZESTR <args>
	ELSE
		.err <Too much nesting level.>
	ENDIF
	EXITM<>
ENDM
.endf MACRO
	IF while_cnt EQ 1
	%	FOR parm,<PreTestCond0>
			v parm
		ENDM
	ELSEIF while_cnt EQ 2
	%	FOR parm,<PreTestCond1>
			v parm
		ENDM
	ELSEIF while_cnt EQ 3
	%	FOR parm,<PreTestCond2>
			v parm
		ENDM
	ELSEIF while_cnt EQ 4
	%	FOR parm,<PreTestCond3>
			v parm
		ENDM
	ELSEIF while_cnt EQ 5
	%	FOR parm,<PreTestCond4>
			v parm
		ENDM
	ELSEIF while_cnt EQ 6
	%	FOR parm,<PreTestCond5>
			v parm
		ENDM
	ELSEIF while_cnt EQ 7
	%	FOR parm,<PreTestCond6>
			v parm
		ENDM
	ELSEIF while_cnt EQ 8
	%	FOR parm,<PreTestCond7>
			v parm
		ENDM
	ELSEIF while_cnt EQ 9
	%	FOR parm,<PreTestCond8>
			v parm
		ENDM
	ELSEIF while_cnt EQ 10
	%	FOR parm,<PreTestCond9>
			v parm
		ENDM
	ELSEIF while_cnt EQ 11
	%	FOR parm,<PreTestCond10>
			v parm
		ENDM
	ELSEIF while_cnt EQ 12
	%	FOR parm,<PreTestCond11>
			v parm
		ENDM
	ELSEIF while_cnt EQ 13
	%	FOR parm,<PreTestCond12>
			v parm
		ENDM
	ELSEIF while_cnt EQ 14
	%	FOR parm,<PreTestCond13>
			v parm
		ENDM
	ELSEIF while_cnt EQ 15
	%	FOR parm,<PreTestCond14>
			v parm
		ENDM
	ELSEIF while_cnt EQ 16
	%	FOR parm,<PreTestCond15>
			v parm
		ENDM
	ELSEIF while_cnt EQ 17
	%	FOR parm,<PreTestCond16>
			v parm
		ENDM
	ELSEIF while_cnt EQ 18
	%	FOR parm,<PreTestCond17>
			v parm
		ENDM
	ELSEIF while_cnt EQ 19
	%	FOR parm,<PreTestCond18>
			v parm
		ENDM
	ELSEIF while_cnt EQ 20
	%	FOR parm,<PreTestCond19>
			v parm
		ENDM
	ENDIF	
	GetUntilCondsLabel
LastUntilConds:
	DelUntilCondsLabel
	GetUntilLabel
	IF (while_cnt EQ 1) AND (wcond0l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel0
	ELSEIF (while_cnt EQ 2) AND (wcond1l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel1
	ELSEIF (while_cnt EQ 3) AND (wcond2l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel2
	ELSEIF (while_cnt EQ 4) AND (wcond3l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel3
	ELSEIF (while_cnt EQ 5) AND (wcond4l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel4
	ELSEIF (while_cnt EQ 6) AND (wcond5l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel5
	ELSEIF (while_cnt EQ 7) AND (wcond6l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel6
	ELSEIF (while_cnt EQ 8) AND (wcond7l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel7
	ELSEIF (while_cnt EQ 9) AND (wcond8l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel8
	ELSEIF (while_cnt EQ 10) AND (wcond9l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel9
	ELSEIF (while_cnt EQ 11) AND (wcond10l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel10
	ELSEIF (while_cnt EQ 12) AND (wcond11l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel11
	ELSEIF (while_cnt EQ 13) AND (wcond12l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel12
	ELSEIF (while_cnt EQ 14) AND (wcond13l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel13
	ELSEIF (while_cnt EQ 15) AND (wcond14l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel14
	ELSEIF (while_cnt EQ 16) AND (wcond15l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel15
	ELSEIF (while_cnt EQ 17) AND (wcond16l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel16
	ELSEIF (while_cnt EQ 18) AND (wcond17l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel17
	ELSEIF (while_cnt EQ 19) AND (wcond18l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel18
	ELSEIF (while_cnt EQ 20) AND (wcond19l GT 0)
	%	J_POLY_COND LastUntilLabel,TRUE,WhileLevel19
	ENDIF
	DelUntilLabel
	GetUntilOutLabel
LastUntilOutLabel:
	DelUntilOutLabel
	while_cnt=while_cnt-1
ENDM