%macro CHAR_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_ADD
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_SUB
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_MUL
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_DIV
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_MOD
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_LSH
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_RSH
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_B_AND
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_B_OR
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_B_NOT
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro CHAR_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	CHAR_B_XOR
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro SHORT_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_ADD
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_SUB
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_MUL
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_DIV
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_MOD
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_LSH
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_RSH
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_B_AND
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_B_OR
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_B_NOT
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro SHORT_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	SHORT_B_XOR
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro INT_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_ADD
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_SUB
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_MUL
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_DIV
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_MOD
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_LSH
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_RSH
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_B_AND
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_B_OR
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_B_NOT
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro INT_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	INT_B_XOR
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_ADD
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_SUB
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_MUL
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_DIV
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_MOD
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_LSH
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_RSH
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_B_AND
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_B_OR
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_B_NOT
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro FLOAT_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	FLOAT_B_XOR
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro LONG_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_ADD
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_SUB
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_MUL
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_DIV
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_MOD
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_LSH
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_RSH
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_B_AND
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_B_OR
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_B_NOT
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro LONG_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	LONG_B_XOR
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_ADD
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_SUB
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_MUL
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_DIV
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_MOD
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_LSH
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_RSH
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_B_AND
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_B_OR
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_B_NOT
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro DOUBLE_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	DOUBLE_B_XOR
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro UCHAR_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_ADD
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_SUB
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_MUL
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_DIV
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_MOD
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_LSH
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_RSH
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_B_AND
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_B_OR
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_B_NOT
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro UCHAR_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	BYTE_R_VAL
	BYTE_SWAP
	UCHAR_B_XOR
	mov edx,[%1]
	push edx
	BYTE_L_VAL
%endmacro

%macro USHORT_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_ADD
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_SUB
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_MUL
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_DIV
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_MOD
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_LSH
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_RSH
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_B_AND
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_B_OR
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_B_NOT
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro USHORT_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	WORD_R_VAL
	WORD_SWAP
	USHORT_B_XOR
	mov edx,[%1]
	push edx
	WORD_L_VAL
%endmacro

%macro UINT_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_ADD
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_SUB
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_MUL
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_DIV
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_MOD
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_LSH
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_RSH
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_B_AND
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_B_OR
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_B_NOT
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro UINT_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	DWORD_R_VAL
	DWORD_SWAP
	UINT_B_XOR
	mov edx,[%1]
	push edx
	DWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_ADD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_ADD
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_SUB_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_SUB
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_MUL_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_MUL
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_DIV_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_DIV
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_MOD_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_MOD
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_LSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_LSH
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_RSH_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_RSH
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_B_AND_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_B_AND
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_B_OR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_B_OR
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_B_NOT_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_B_NOT
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

%macro ULONG_L_VAL_B_XOR_ASSIGN 1
	mov edx,[esp]
	mov [%1],edx
	QWORD_R_VAL
	QWORD_SWAP
	ULONG_B_XOR
	mov edx,[%1]
	push edx
	QWORD_L_VAL
%endmacro

