%macro cast_char_uchar 2
   push byte %1
   push dword 0
   cast__char__uchar
   add esp,dword 5
   mov %2,byte eax
%endmacro

%macro cast_char_short 2
   push byte %1
   push dword 0
   cast__char__short
   add esp,dword 5
   mov %2,word eax
%endmacro

%macro cast_char_ushort 2
   push byte %1
   push dword 0
   cast__char__ushort
   add esp,dword 5
   mov %2,word eax
%endmacro

%macro cast_char_int 2
   push byte %1
   push dword 0
   cast__char__int
   add esp,dword 5
   mov %2,dword eax
%endmacro

%macro cast_char_uint 2
   push byte %1
   push dword 0
   cast__char__uint
   add esp,dword 5
   mov %2,dword eax
%endmacro

%macro cast_char_long 2
   push byte %1
   push dword 0
   cast__char__long
   add esp,dword 5
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_char_ulong 2
   push byte %1
   push dword 0
   cast__char__ulong
   add esp,dword 5
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_char_float 2
   push byte %1
   push dword 0
   cast__char__float
   add esp,dword 5
   fstp dword %2
%endmacro

%macro cast_char_double 2
   push byte %1
   push dword 0
   cast__char__double
   add esp,dword 5
   fstp qword %2
%endmacro

%macro cast_uchar_char 2
   push byte %1
   push dword 0
   cast__uchar__char
   add esp,dword 5
   mov %2,byte eax
%endmacro

%macro cast_uchar_short 2
   push byte %1
   push dword 0
   cast__uchar__short
   add esp,dword 5
   mov %2,word eax
%endmacro

%macro cast_uchar_ushort 2
   push byte %1
   push dword 0
   cast__uchar__ushort
   add esp,dword 5
   mov %2,word eax
%endmacro

%macro cast_uchar_int 2
   push byte %1
   push dword 0
   cast__uchar__int
   add esp,dword 5
   mov %2,dword eax
%endmacro

%macro cast_uchar_uint 2
   push byte %1
   push dword 0
   cast__uchar__uint
   add esp,dword 5
   mov %2,dword eax
%endmacro

%macro cast_uchar_long 2
   push byte %1
   push dword 0
   cast__uchar__long
   add esp,dword 5
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_uchar_ulong 2
   push byte %1
   push dword 0
   cast__uchar__ulong
   add esp,dword 5
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_uchar_float 2
   push byte %1
   push dword 0
   cast__uchar__float
   add esp,dword 5
   fstp dword %2
%endmacro

%macro cast_uchar_double 2
   push byte %1
   push dword 0
   cast__uchar__double
   add esp,dword 5
   fstp qword %2
%endmacro

%macro cast_short_char 2
   push word %1
   push dword 0
   cast__short__char
   add esp,dword 6
   mov %2,byte eax
%endmacro

%macro cast_short_uchar 2
   push word %1
   push dword 0
   cast__short__uchar
   add esp,dword 6
   mov %2,byte eax
%endmacro

%macro cast_short_ushort 2
   push word %1
   push dword 0
   cast__short__ushort
   add esp,dword 6
   mov %2,word eax
%endmacro

%macro cast_short_int 2
   push word %1
   push dword 0
   cast__short__int
   add esp,dword 6
   mov %2,dword eax
%endmacro

%macro cast_short_uint 2
   push word %1
   push dword 0
   cast__short__uint
   add esp,dword 6
   mov %2,dword eax
%endmacro

%macro cast_short_long 2
   push word %1
   push dword 0
   cast__short__long
   add esp,dword 6
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_short_ulong 2
   push word %1
   push dword 0
   cast__short__ulong
   add esp,dword 6
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_short_float 2
   push word %1
   push dword 0
   cast__short__float
   add esp,dword 6
   fstp dword %2
%endmacro

%macro cast_short_double 2
   push word %1
   push dword 0
   cast__short__double
   add esp,dword 6
   fstp qword %2
%endmacro

%macro cast_ushort_char 2
   push word %1
   push dword 0
   cast__ushort__char
   add esp,dword 6
   mov %2,byte eax
%endmacro

%macro cast_ushort_uchar 2
   push word %1
   push dword 0
   cast__ushort__uchar
   add esp,dword 6
   mov %2,byte eax
%endmacro

%macro cast_ushort_short 2
   push word %1
   push dword 0
   cast__ushort__short
   add esp,dword 6
   mov %2,word eax
%endmacro

%macro cast_ushort_int 2
   push word %1
   push dword 0
   cast__ushort__int
   add esp,dword 6
   mov %2,dword eax
%endmacro

%macro cast_ushort_uint 2
   push word %1
   push dword 0
   cast__ushort__uint
   add esp,dword 6
   mov %2,dword eax
%endmacro

%macro cast_ushort_long 2
   push word %1
   push dword 0
   cast__ushort__long
   add esp,dword 6
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_ushort_ulong 2
   push word %1
   push dword 0
   cast__ushort__ulong
   add esp,dword 6
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_ushort_float 2
   push word %1
   push dword 0
   cast__ushort__float
   add esp,dword 6
   fstp dword %2
%endmacro

%macro cast_ushort_double 2
   push word %1
   push dword 0
   cast__ushort__double
   add esp,dword 6
   fstp qword %2
%endmacro

%macro cast_int_char 2
   push dword %1
   push dword 0
   cast__int__char
   add esp,dword 8
   mov %2,byte eax
%endmacro

%macro cast_int_uchar 2
   push dword %1
   push dword 0
   cast__int__uchar
   add esp,dword 8
   mov %2,byte eax
%endmacro

%macro cast_int_short 2
   push dword %1
   push dword 0
   cast__int__short
   add esp,dword 8
   mov %2,word eax
%endmacro

%macro cast_int_ushort 2
   push dword %1
   push dword 0
   cast__int__ushort
   add esp,dword 8
   mov %2,word eax
%endmacro

%macro cast_int_uint 2
   push dword %1
   push dword 0
   cast__int__uint
   add esp,dword 8
   mov %2,dword eax
%endmacro

%macro cast_int_long 2
   push dword %1
   push dword 0
   cast__int__long
   add esp,dword 8
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_int_ulong 2
   push dword %1
   push dword 0
   cast__int__ulong
   add esp,dword 8
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_int_float 2
   push dword %1
   push dword 0
   cast__int__float
   add esp,dword 8
   fstp dword %2
%endmacro

%macro cast_int_double 2
   push dword %1
   push dword 0
   cast__int__double
   add esp,dword 8
   fstp qword %2
%endmacro

%macro cast_uint_char 2
   push dword %1
   push dword 0
   cast__uint__char
   add esp,dword 8
   mov %2,byte eax
%endmacro

%macro cast_uint_uchar 2
   push dword %1
   push dword 0
   cast__uint__uchar
   add esp,dword 8
   mov %2,byte eax
%endmacro

%macro cast_uint_short 2
   push dword %1
   push dword 0
   cast__uint__short
   add esp,dword 8
   mov %2,word eax
%endmacro

%macro cast_uint_ushort 2
   push dword %1
   push dword 0
   cast__uint__ushort
   add esp,dword 8
   mov %2,word eax
%endmacro

%macro cast_uint_int 2
   push dword %1
   push dword 0
   cast__uint__int
   add esp,dword 8
   mov %2,dword eax
%endmacro

%macro cast_uint_long 2
   push dword %1
   push dword 0
   cast__uint__long
   add esp,dword 8
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_uint_ulong 2
   push dword %1
   push dword 0
   cast__uint__ulong
   add esp,dword 8
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_uint_float 2
   push dword %1
   push dword 0
   cast__uint__float
   add esp,dword 8
   fstp dword %2
%endmacro

%macro cast_uint_double 2
   push dword %1
   push dword 0
   cast__uint__double
   add esp,dword 8
   fstp qword %2
%endmacro

%macro cast_long_char 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__char
   add esp,dword 12
   push byte %2
%endmacro

%macro cast_long_uchar 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__uchar
   add esp,dword 12
   push byte %2
%endmacro

%macro cast_long_short 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__short
   add esp,dword 12
   push word %2
%endmacro

%macro cast_long_ushort 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__ushort
   add esp,dword 12
   push word %2
%endmacro

%macro cast_long_int 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__int
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_long_uint 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__uint
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_long_ulong 2
   lea eax,%1
   push dword [eax]
   push dword [eax]
   push dword 0
   cast__long__ulong
   add esp,dword 12
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_long_float 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__long__float
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_long_double 2
   lea eax,%1
   push dword [eax]
   push dword [eax]
   push dword 0
   cast__long__double
   add esp,dword 12
   fstp qword %3
%endmacro

%macro cast_ulong_char 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__char
   add esp,dword 12
   push byte %2
%endmacro

%macro cast_ulong_uchar 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__uchar
   add esp,dword 12
   push byte %2
%endmacro

%macro cast_ulong_short 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__short
   add esp,dword 12
   push word %2
%endmacro

%macro cast_ulong_ushort 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__ushort
   add esp,dword 12
   push word %2
%endmacro

%macro cast_ulong_int 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__int
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_ulong_uint 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__uint
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_ulong_long 2
   lea eax,%1
   push dword [eax]
   push dword [eax]
   push dword 0
   cast__ulong__long
   add esp,dword 12
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_ulong_float 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__ulong__float
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_ulong_double 2
   lea eax,%1
   push dword [eax]
   push dword [eax]
   push dword 0
   cast__ulong__double
   add esp,dword 12
   fstp qword %3
%endmacro

%macro cast_float_char 2
   push dword %1
   push dword 0
   cast__float__char
   add esp,dword 8
   mov %2,byte eax
%endmacro

%macro cast_float_uchar 2
   push dword %1
   push dword 0
   cast__float__uchar
   add esp,dword 8
   mov %2,byte eax
%endmacro

%macro cast_float_short 2
   push dword %1
   push dword 0
   cast__float__short
   add esp,dword 8
   mov %2,word eax
%endmacro

%macro cast_float_ushort 2
   push dword %1
   push dword 0
   cast__float__ushort
   add esp,dword 8
   mov %2,word eax
%endmacro

%macro cast_float_int 2
   push dword %1
   push dword 0
   cast__float__int
   add esp,dword 8
   mov %2,dword eax
%endmacro

%macro cast_float_uint 2
   push dword %1
   push dword 0
   cast__float__uint
   add esp,dword 8
   mov %2,dword eax
%endmacro

%macro cast_float_long 2
   push dword %1
   push dword 0
   cast__float__long
   add esp,dword 8
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_float_ulong 2
   push dword %1
   push dword 0
   cast__float__ulong
   add esp,dword 8
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_float_double 2
   push dword %1
   push dword 0
   cast__float__double
   add esp,dword 8
   fstp qword %2
%endmacro

%macro cast_double_char 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__char
   add esp,dword 12
   push byte %2
%endmacro

%macro cast_double_uchar 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__uchar
   add esp,dword 12
   push byte %2
%endmacro

%macro cast_double_short 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__short
   add esp,dword 12
   push word %2
%endmacro

%macro cast_double_ushort 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__ushort
   add esp,dword 12
   push word %2
%endmacro

%macro cast_double_int 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__int
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_double_uint 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__uint
   add esp,dword 12
   push dword %2
%endmacro

%macro cast_double_long 2
   lea eax,%1
   push dword [eax]
   push dword [eax]
   push dword 0
   cast__double__long
   add esp,dword 12
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_double_ulong 2
   lea eax,%1
   push dword [eax]
   push dword [eax]
   push dword 0
   cast__double__ulong
   add esp,dword 12
   lea ebx,%2
   mov [ebx],eax
   mov [ebx+4],edx
%endmacro

%macro cast_double_float 2
   lea eax,%1
   push dword [eax]
   push dword [eax+4]
   push dword 0
   cast__double__float
   add esp,dword 12
   push dword %2
%endmacro

%macro char_add 2
   push %2
   push %1
   push word 0
   char__char__add
   add sp,dword 6
%endmacro

%macro char_sub 2
   push %2
   push %1
   push word 0
   char__char__sub
   add sp,dword 6
%endmacro

%macro char_mul 2
   push %2
   push %1
   push word 0
   char__char__mul
   add sp,dword 6
%endmacro

%macro char_div 2
   push %2
   push %1
   push word 0
   char__char__div
   add sp,dword 6
%endmacro

%macro char_lsh 2
   push %2
   push %1
   push word 0
   char__char__lsh
   add sp,dword 6
%endmacro

%macro char_rsh 2
   push %2
   push %1
   push word 0
   char__char__rsh
   add sp,dword 6
%endmacro

%macro char_xor 2
   push %2
   push %1
   push word 0
   char__char__xor
   add sp,dword 6
%endmacro

%macro char_bor 2
   push %2
   push %1
   push word 0
   char__char__bor
   add sp,dword 6
%endmacro

%macro char_band 2
   push %2
   push %1
   push word 0
   char__char__band
   add sp,dword 6
%endmacro

%macro char_bnot 1
   push %1
   push 0
   char__char__bnot
   add esp,dword 8
%endmacro

%macro char_and 2
   push %2
   push %1
   push word 0
   char__char__and
   add sp,dword 6
%endmacro

%macro char_or 2
   push %2
   push %1
   push word 0
   char__char__or
   add sp,dword 6
%endmacro

%macro char_not 1
   push %1
   push 0
   char__char__not
   add esp,dword 8
%endmacro

%macro char_lt 2
   push %2
   push %1
   push word 0
   char__char__lt
   add sp,dword 6
%endmacro

%macro char_gt 2
   push %2
   push %1
   push word 0
   char__char__gt
   add sp,dword 6
%endmacro

%macro char_lteq 2
   push %2
   push %1
   push word 0
   char__char__lteq
   add sp,dword 6
%endmacro

%macro char_gteq 2
   push %2
   push %1
   push word 0
   char__char__gteq
   add sp,dword 6
%endmacro

%macro char_eq 2
   push %2
   push %1
   push word 0
   char__char__eq
   add sp,dword 6
%endmacro

%macro char_neq 2
   push %2
   push %1
   push word 0
   char__char__neq
   add sp,dword 6
%endmacro

%macro char_neg 1
   push %1
   push 0
   char__char__neg
   add esp,dword 8
%endmacro

%macro uchar_add 2
   push %2
   push %1
   push word 0
   uchar__uchar__add
   add sp,dword 6
%endmacro

%macro uchar_sub 2
   push %2
   push %1
   push word 0
   uchar__uchar__sub
   add sp,dword 6
%endmacro

%macro uchar_mul 2
   push %2
   push %1
   push word 0
   uchar__uchar__mul
   add sp,dword 6
%endmacro

%macro uchar_div 2
   push %2
   push %1
   push word 0
   uchar__uchar__div
   add sp,dword 6
%endmacro

%macro uchar_lsh 2
   push %2
   push %1
   push word 0
   uchar__uchar__lsh
   add sp,dword 6
%endmacro

%macro uchar_rsh 2
   push %2
   push %1
   push word 0
   uchar__uchar__rsh
   add sp,dword 6
%endmacro

%macro uchar_xor 2
   push %2
   push %1
   push word 0
   uchar__uchar__xor
   add sp,dword 6
%endmacro

%macro uchar_bor 2
   push %2
   push %1
   push word 0
   uchar__uchar__bor
   add sp,dword 6
%endmacro

%macro uchar_band 2
   push %2
   push %1
   push word 0
   uchar__uchar__band
   add sp,dword 6
%endmacro

%macro uchar_bnot 1
   push %1
   push 0
   uchar__uchar__bnot
   add esp,dword 8
%endmacro

%macro uchar_and 2
   push %2
   push %1
   push word 0
   uchar__uchar__and
   add sp,dword 6
%endmacro

%macro uchar_or 2
   push %2
   push %1
   push word 0
   uchar__uchar__or
   add sp,dword 6
%endmacro

%macro uchar_not 1
   push %1
   push 0
   uchar__uchar__not
   add esp,dword 8
%endmacro

%macro uchar_lt 2
   push %2
   push %1
   push word 0
   uchar__uchar__lt
   add sp,dword 6
%endmacro

%macro uchar_gt 2
   push %2
   push %1
   push word 0
   uchar__uchar__gt
   add sp,dword 6
%endmacro

%macro uchar_lteq 2
   push %2
   push %1
   push word 0
   uchar__uchar__lteq
   add sp,dword 6
%endmacro

%macro uchar_gteq 2
   push %2
   push %1
   push word 0
   uchar__uchar__gteq
   add sp,dword 6
%endmacro

%macro uchar_eq 2
   push %2
   push %1
   push word 0
   uchar__uchar__eq
   add sp,dword 6
%endmacro

%macro uchar_neq 2
   push %2
   push %1
   push word 0
   uchar__uchar__neq
   add sp,dword 6
%endmacro

%macro uchar_neg 1
   push %1
   push 0
   uchar__uchar__neg
   add esp,dword 8
%endmacro

%macro short_add 2
   push %2
   push %1
   push word 0
   short__short__add
   add sp,dword 6
%endmacro

%macro short_sub 2
   push %2
   push %1
   push word 0
   short__short__sub
   add sp,dword 6
%endmacro

%macro short_mul 2
   push %2
   push %1
   push word 0
   short__short__mul
   add sp,dword 6
%endmacro

%macro short_div 2
   push %2
   push %1
   push word 0
   short__short__div
   add sp,dword 6
%endmacro

%macro short_lsh 2
   push %2
   push %1
   push word 0
   short__short__lsh
   add sp,dword 6
%endmacro

%macro short_rsh 2
   push %2
   push %1
   push word 0
   short__short__rsh
   add sp,dword 6
%endmacro

%macro short_xor 2
   push %2
   push %1
   push word 0
   short__short__xor
   add sp,dword 6
%endmacro

%macro short_bor 2
   push %2
   push %1
   push word 0
   short__short__bor
   add sp,dword 6
%endmacro

%macro short_band 2
   push %2
   push %1
   push word 0
   short__short__band
   add sp,dword 6
%endmacro

%macro short_bnot 1
   push %1
   push 0
   short__short__bnot
   add esp,dword 8
%endmacro

%macro short_and 2
   push %2
   push %1
   push word 0
   short__short__and
   add sp,dword 6
%endmacro

%macro short_or 2
   push %2
   push %1
   push word 0
   short__short__or
   add sp,dword 6
%endmacro

%macro short_not 1
   push %1
   push 0
   short__short__not
   add esp,dword 8
%endmacro

%macro short_lt 2
   push %2
   push %1
   push word 0
   short__short__lt
   add sp,dword 6
%endmacro

%macro short_gt 2
   push %2
   push %1
   push word 0
   short__short__gt
   add sp,dword 6
%endmacro

%macro short_lteq 2
   push %2
   push %1
   push word 0
   short__short__lteq
   add sp,dword 6
%endmacro

%macro short_gteq 2
   push %2
   push %1
   push word 0
   short__short__gteq
   add sp,dword 6
%endmacro

%macro short_eq 2
   push %2
   push %1
   push word 0
   short__short__eq
   add sp,dword 6
%endmacro

%macro short_neq 2
   push %2
   push %1
   push word 0
   short__short__neq
   add sp,dword 6
%endmacro

%macro short_neg 1
   push %1
   push 0
   short__short__neg
   add esp,dword 8
%endmacro

%macro ushort_add 2
   push %2
   push %1
   push word 0
   ushort__ushort__add
   add sp,dword 6
%endmacro

%macro ushort_sub 2
   push %2
   push %1
   push word 0
   ushort__ushort__sub
   add sp,dword 6
%endmacro

%macro ushort_mul 2
   push %2
   push %1
   push word 0
   ushort__ushort__mul
   add sp,dword 6
%endmacro

%macro ushort_div 2
   push %2
   push %1
   push word 0
   ushort__ushort__div
   add sp,dword 6
%endmacro

%macro ushort_lsh 2
   push %2
   push %1
   push word 0
   ushort__ushort__lsh
   add sp,dword 6
%endmacro

%macro ushort_rsh 2
   push %2
   push %1
   push word 0
   ushort__ushort__rsh
   add sp,dword 6
%endmacro

%macro ushort_xor 2
   push %2
   push %1
   push word 0
   ushort__ushort__xor
   add sp,dword 6
%endmacro

%macro ushort_bor 2
   push %2
   push %1
   push word 0
   ushort__ushort__bor
   add sp,dword 6
%endmacro

%macro ushort_band 2
   push %2
   push %1
   push word 0
   ushort__ushort__band
   add sp,dword 6
%endmacro

%macro ushort_bnot 1
   push %1
   push 0
   ushort__ushort__bnot
   add esp,dword 8
%endmacro

%macro ushort_and 2
   push %2
   push %1
   push word 0
   ushort__ushort__and
   add sp,dword 6
%endmacro

%macro ushort_or 2
   push %2
   push %1
   push word 0
   ushort__ushort__or
   add sp,dword 6
%endmacro

%macro ushort_not 1
   push %1
   push 0
   ushort__ushort__not
   add esp,dword 8
%endmacro

%macro ushort_lt 2
   push %2
   push %1
   push word 0
   ushort__ushort__lt
   add sp,dword 6
%endmacro

%macro ushort_gt 2
   push %2
   push %1
   push word 0
   ushort__ushort__gt
   add sp,dword 6
%endmacro

%macro ushort_lteq 2
   push %2
   push %1
   push word 0
   ushort__ushort__lteq
   add sp,dword 6
%endmacro

%macro ushort_gteq 2
   push %2
   push %1
   push word 0
   ushort__ushort__gteq
   add sp,dword 6
%endmacro

%macro ushort_eq 2
   push %2
   push %1
   push word 0
   ushort__ushort__eq
   add sp,dword 6
%endmacro

%macro ushort_neq 2
   push %2
   push %1
   push word 0
   ushort__ushort__neq
   add sp,dword 6
%endmacro

%macro ushort_neg 1
   push %1
   push 0
   ushort__ushort__neg
   add esp,dword 8
%endmacro

%macro int_add 2
   push %2
   push %1
   push word 0
   int__int__add
   add sp,dword 6
%endmacro

%macro int_sub 2
   push %2
   push %1
   push word 0
   int__int__sub
   add sp,dword 6
%endmacro

%macro int_mul 2
   push %2
   push %1
   push word 0
   int__int__mul
   add sp,dword 6
%endmacro

%macro int_div 2
   push %2
   push %1
   push word 0
   int__int__div
   add sp,dword 6
%endmacro

%macro int_lsh 2
   push %2
   push %1
   push word 0
   int__int__lsh
   add sp,dword 6
%endmacro

%macro int_rsh 2
   push %2
   push %1
   push word 0
   int__int__rsh
   add sp,dword 6
%endmacro

%macro int_xor 2
   push %2
   push %1
   push word 0
   int__int__xor
   add sp,dword 6
%endmacro

%macro int_bor 2
   push %2
   push %1
   push word 0
   int__int__bor
   add sp,dword 6
%endmacro

%macro int_band 2
   push %2
   push %1
   push word 0
   int__int__band
   add sp,dword 6
%endmacro

%macro int_bnot 1
   push %1
   push 0
   int__int__bnot
   add esp,dword 8
%endmacro

%macro int_and 2
   push %2
   push %1
   push word 0
   int__int__and
   add sp,dword 6
%endmacro

%macro int_or 2
   push %2
   push %1
   push word 0
   int__int__or
   add sp,dword 6
%endmacro

%macro int_not 1
   push %1
   push 0
   int__int__not
   add esp,dword 8
%endmacro

%macro int_lt 2
   push %2
   push %1
   push word 0
   int__int__lt
   add sp,dword 6
%endmacro

%macro int_gt 2
   push %2
   push %1
   push word 0
   int__int__gt
   add sp,dword 6
%endmacro

%macro int_lteq 2
   push %2
   push %1
   push word 0
   int__int__lteq
   add sp,dword 6
%endmacro

%macro int_gteq 2
   push %2
   push %1
   push word 0
   int__int__gteq
   add sp,dword 6
%endmacro

%macro int_eq 2
   push %2
   push %1
   push word 0
   int__int__eq
   add sp,dword 6
%endmacro

%macro int_neq 2
   push %2
   push %1
   push word 0
   int__int__neq
   add sp,dword 6
%endmacro

%macro int_neg 1
   push %1
   push 0
   int__int__neg
   add esp,dword 8
%endmacro

%macro uint_add 2
   push %2
   push %1
   push word 0
   uint__uint__add
   add sp,dword 6
%endmacro

%macro uint_sub 2
   push %2
   push %1
   push word 0
   uint__uint__sub
   add sp,dword 6
%endmacro

%macro uint_mul 2
   push %2
   push %1
   push word 0
   uint__uint__mul
   add sp,dword 6
%endmacro

%macro uint_div 2
   push %2
   push %1
   push word 0
   uint__uint__div
   add sp,dword 6
%endmacro

%macro uint_lsh 2
   push %2
   push %1
   push word 0
   uint__uint__lsh
   add sp,dword 6
%endmacro

%macro uint_rsh 2
   push %2
   push %1
   push word 0
   uint__uint__rsh
   add sp,dword 6
%endmacro

%macro uint_xor 2
   push %2
   push %1
   push word 0
   uint__uint__xor
   add sp,dword 6
%endmacro

%macro uint_bor 2
   push %2
   push %1
   push word 0
   uint__uint__bor
   add sp,dword 6
%endmacro

%macro uint_band 2
   push %2
   push %1
   push word 0
   uint__uint__band
   add sp,dword 6
%endmacro

%macro uint_bnot 1
   push %1
   push 0
   uint__uint__bnot
   add esp,dword 8
%endmacro

%macro uint_and 2
   push %2
   push %1
   push word 0
   uint__uint__and
   add sp,dword 6
%endmacro

%macro uint_or 2
   push %2
   push %1
   push word 0
   uint__uint__or
   add sp,dword 6
%endmacro

%macro uint_not 1
   push %1
   push 0
   uint__uint__not
   add esp,dword 8
%endmacro

%macro uint_lt 2
   push %2
   push %1
   push word 0
   uint__uint__lt
   add sp,dword 6
%endmacro

%macro uint_gt 2
   push %2
   push %1
   push word 0
   uint__uint__gt
   add sp,dword 6
%endmacro

%macro uint_lteq 2
   push %2
   push %1
   push word 0
   uint__uint__lteq
   add sp,dword 6
%endmacro

%macro uint_gteq 2
   push %2
   push %1
   push word 0
   uint__uint__gteq
   add sp,dword 6
%endmacro

%macro uint_eq 2
   push %2
   push %1
   push word 0
   uint__uint__eq
   add sp,dword 6
%endmacro

%macro uint_neq 2
   push %2
   push %1
   push word 0
   uint__uint__neq
   add sp,dword 6
%endmacro

%macro uint_neg 1
   push %1
   push 0
   uint__uint__neg
   add esp,dword 8
%endmacro

%macro long_add 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__add
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_sub 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__sub
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_mul 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__mul
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_div 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__div
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_lsh 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__lsh
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_rsh 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__rsh
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_xor 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__xor
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_bor 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__bor
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_band 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__band
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_bnot 1
   push %1
   push 0
   long__long__bnot
   add esp,dword 8
%endmacro

%macro long_and 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__and
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_or 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__or
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_not 1
   push %1
   push 0
   long__long__not
   add esp,dword 8
%endmacro

%macro long_lt 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__lt
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_gt 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__gt
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_lteq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__lteq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_gteq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__gteq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_eq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__eq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_neq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   long__long__neq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro long_neg 1
   push %1
   push 0
   long__long__neg
   add esp,dword 8
%endmacro

%macro ulong_add 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__add
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_sub 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__sub
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_mul 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__mul
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_div 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__div
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_lsh 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__lsh
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_rsh 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__rsh
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_xor 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__xor
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_bor 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__bor
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_band 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__band
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_bnot 1
   push %1
   push 0
   ulong__ulong__bnot
   add esp,dword 8
%endmacro

%macro ulong_and 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__and
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_or 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__or
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_not 1
   push %1
   push 0
   ulong__ulong__not
   add esp,dword 8
%endmacro

%macro ulong_lt 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__lt
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_gt 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__gt
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_lteq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__lteq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_gteq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__gteq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_eq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__eq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_neq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   ulong__ulong__neq
   add esp,dword 20
   mov [ebp+%3],dword eax
   mov [ebp+%3+4],dword edx
%endmacro

%macro ulong_neg 1
   push %1
   push 0
   ulong__ulong__neg
   add esp,dword 8
%endmacro

%macro float_add 2
   push %2
   push %1
   push word 0
   float__float__add
   add sp,dword 6
%endmacro

%macro float_sub 2
   push %2
   push %1
   push word 0
   float__float__sub
   add sp,dword 6
%endmacro

%macro float_mul 2
   push %2
   push %1
   push word 0
   float__float__mul
   add sp,dword 6
%endmacro

%macro float_div 2
   push %2
   push %1
   push word 0
   float__float__div
   add sp,dword 6
%endmacro

%macro float_lsh 2
   push %2
   push %1
   push word 0
   float__float__lsh
   add sp,dword 6
%endmacro

%macro float_rsh 2
   push %2
   push %1
   push word 0
   float__float__rsh
   add sp,dword 6
%endmacro

%macro float_xor 2
   push %2
   push %1
   push word 0
   float__float__xor
   add sp,dword 6
%endmacro

%macro float_bor 2
   push %2
   push %1
   push word 0
   float__float__bor
   add sp,dword 6
%endmacro

%macro float_band 2
   push %2
   push %1
   push word 0
   float__float__band
   add sp,dword 6
%endmacro

%macro float_bnot 1
   push %1
   push 0
   float__float__bnot
   add esp,dword 8
%endmacro

%macro float_and 2
   push %2
   push %1
   push word 0
   float__float__and
   add sp,dword 6
%endmacro

%macro float_or 2
   push %2
   push %1
   push word 0
   float__float__or
   add sp,dword 6
%endmacro

%macro float_not 1
   push %1
   push 0
   float__float__not
   add esp,dword 8
%endmacro

%macro float_lt 2
   push %2
   push %1
   push word 0
   float__float__lt
   add sp,dword 6
%endmacro

%macro float_gt 2
   push %2
   push %1
   push word 0
   float__float__gt
   add sp,dword 6
%endmacro

%macro float_lteq 2
   push %2
   push %1
   push word 0
   float__float__lteq
   add sp,dword 6
%endmacro

%macro float_gteq 2
   push %2
   push %1
   push word 0
   float__float__gteq
   add sp,dword 6
%endmacro

%macro float_eq 2
   push %2
   push %1
   push word 0
   float__float__eq
   add sp,dword 6
%endmacro

%macro float_neq 2
   push %2
   push %1
   push word 0
   float__float__neq
   add sp,dword 6
%endmacro

%macro float_neg 1
   push %1
   push 0
   float__float__neg
   add esp,dword 8
%endmacro

%macro double_add 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__add
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_sub 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__sub
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_mul 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__mul
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_div 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__div
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_lsh 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__lsh
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_rsh 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__rsh
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_xor 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__xor
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_bor 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__bor
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_band 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__band
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_bnot 1
   push %1
   push 0
   double__double__bnot
   add esp,dword 8
%endmacro

%macro double_and 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__and
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_or 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__or
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_not 1
   push %1
   push 0
   double__double__not
   add esp,dword 8
%endmacro

%macro double_lt 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__lt
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_gt 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__gt
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_lteq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__lteq
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_gteq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__gteq
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_eq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__eq
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_neq 3
   push_qword ebp+%2
   push_qword ebp+%1
   push_dword 0
   double__double__neq
   add esp,dword 20
   fstp qword [ebp+%3]
%endmacro

%macro double_neg 1
   push %1
   push 0
   double__double__neg
   add esp,dword 8
%endmacro

