/* DO NOT EDIT -- this file was generated by src/util/mkslarith2.sl */
/* signed char */
/* (signed char, signed char) */
#define GENERIC_BINARY_FUNCTION char_char_bin_op
#define GENERIC_A_TYPE signed char
#define GENERIC_B_TYPE signed char
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define char_char_scalar_bin_op int_int_scalar_bin_op
#define GENERIC_UNARY_FUNCTION char_unary_op
#define ABS_FUNCTION(a) abs(a)
#define CMP_FUNCTION char_cmp_function
#define TO_DOUBLE_FUNCTION char_to_one_double
#define GENERIC_COPY_FUNCTION copy_char_to_char
#define char_to_char char_to_int
#include "slarith.inc"

/* (signed char, unsigned char) */
#define char_uchar_bin_op NULL
#define GENERIC_A_TYPE signed char
#define GENERIC_B_TYPE unsigned char
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define copy_char_to_uchar copy_char_to_char
#define char_to_uchar char_to_int
#include "slarith.inc"

/* (signed char, short) */
#if SHORT_IS_NOT_INT
 #define char_short_bin_op NULL
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE short
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_char_to_short
 #define char_to_short char_to_int
 #include "slarith.inc"
#else
 #define char_short_bin_op char_int_bin_op
 #define copy_char_to_short copy_char_to_int
 #define char_to_short char_to_int
#endif /* SHORT_IS_NOT_INT */

/* (signed char, unsigned short) */
#if SHORT_IS_NOT_INT
 #define char_ushort_bin_op NULL
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE unsigned short
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_char_to_ushort
 #define char_to_ushort char_to_int
 #include "slarith.inc"
#else
 #define char_ushort_bin_op char_uint_bin_op
 #define copy_char_to_ushort copy_char_to_uint
 #define char_to_ushort char_to_uint
#endif /* SHORT_IS_NOT_INT */

/* (signed char, int) */
#define GENERIC_BINARY_FUNCTION char_int_bin_op
#define GENERIC_A_TYPE signed char
#define GENERIC_B_TYPE int
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_char_to_int
#define GENERIC_CONVERT_FUNCTION char_to_int
#include "slarith.inc"

/* (signed char, unsigned int) */
#define char_uint_bin_op NULL
#define GENERIC_A_TYPE signed char
#define GENERIC_B_TYPE unsigned int
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_char_to_uint
#define GENERIC_CONVERT_FUNCTION char_to_uint
#include "slarith.inc"

/* (signed char, long) */
#if LONG_IS_NOT_INT
 #define char_long_bin_op NULL
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE long
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_char_to_long
 #define GENERIC_CONVERT_FUNCTION char_to_long
 #include "slarith.inc"
#else
 #define char_long_bin_op char_int_bin_op
 #define copy_char_to_long copy_char_to_int
 #define char_to_long char_to_int
#endif /* LONG_IS_NOT_INT */

/* (signed char, unsigned long) */
#if LONG_IS_NOT_INT
 #define char_ulong_bin_op NULL
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE unsigned long
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_char_to_ulong
 #define GENERIC_CONVERT_FUNCTION char_to_ulong
 #include "slarith.inc"
#else
 #define char_ulong_bin_op char_uint_bin_op
 #define copy_char_to_ulong copy_char_to_uint
 #define char_to_ulong char_to_uint
#endif /* LONG_IS_NOT_INT */

/* (signed char, long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define char_llong_bin_op NULL
  #define GENERIC_A_TYPE signed char
  #define GENERIC_B_TYPE long long
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_char_to_llong
  #define GENERIC_CONVERT_FUNCTION char_to_llong
  #include "slarith.inc"
 #else
  #define char_llong_bin_op char_long_bin_op
  #define copy_char_to_llong copy_char_to_long
  #define char_to_llong char_to_long
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (signed char, unsigned long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define char_ullong_bin_op NULL
  #define GENERIC_A_TYPE signed char
  #define GENERIC_B_TYPE unsigned long long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_char_to_ullong
  #define GENERIC_CONVERT_FUNCTION char_to_ullong
  #include "slarith.inc"
 #else
  #define char_ullong_bin_op char_ulong_bin_op
  #define copy_char_to_ullong copy_char_to_ulong
  #define char_to_ullong char_to_ulong
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (signed char, float) */
#if SLANG_HAS_FLOAT
 #define char_float_bin_op NULL
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE float
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_char_to_float
 #define GENERIC_CONVERT_FUNCTION char_to_float
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (signed char, double) */
#if SLANG_HAS_FLOAT
 #define GENERIC_BINARY_FUNCTION char_double_bin_op
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE double
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_char_to_double
 #define GENERIC_CONVERT_FUNCTION char_to_double
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (signed char, long double) */
#if defined(HAVE_LONG_DOUBLE)
 #define char_ldouble_bin_op NULL
 #define GENERIC_A_TYPE signed char
 #define GENERIC_B_TYPE long double
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_char_to_ldouble
 #define GENERIC_CONVERT_FUNCTION char_to_ldouble
 #include "slarith.inc"
#endif /* defined(HAVE_LONG_DOUBLE) */


/* unsigned char */
/* (unsigned char, signed char) */
#define uchar_char_bin_op NULL
#define GENERIC_A_TYPE unsigned char
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE signed char
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define copy_uchar_to_char copy_char_to_char
#define uchar_to_char uchar_to_int
#include "slarith.inc"

/* (unsigned char, unsigned char) */
#define GENERIC_BINARY_FUNCTION uchar_uchar_bin_op
#define GENERIC_A_TYPE unsigned char
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE unsigned char
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define uchar_uchar_scalar_bin_op int_int_scalar_bin_op
#define GENERIC_UNARY_FUNCTION uchar_unary_op
#define ABS_FUNCTION(a) (a)
#define CMP_FUNCTION uchar_cmp_function
#define TO_BINARY_FUNCTION uchar_to_binary
#define TO_DOUBLE_FUNCTION uchar_to_one_double
#define copy_uchar_to_uchar copy_char_to_char
#define uchar_to_uchar uchar_to_int
#include "slarith.inc"

/* (unsigned char, short) */
#if SHORT_IS_NOT_INT
 #define uchar_short_bin_op NULL
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE short
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_short
 #define uchar_to_short uchar_to_int
 #include "slarith.inc"
#else
 #define uchar_short_bin_op uchar_int_bin_op
 #define copy_uchar_to_short copy_uchar_to_int
 #define uchar_to_short uchar_to_int
#endif /* SHORT_IS_NOT_INT */

/* (unsigned char, unsigned short) */
#if SHORT_IS_NOT_INT
 #define uchar_ushort_bin_op NULL
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned short
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_ushort
 #define uchar_to_ushort uchar_to_int
 #include "slarith.inc"
#else
 #define uchar_ushort_bin_op uchar_uint_bin_op
 #define copy_uchar_to_ushort copy_uchar_to_uint
 #define uchar_to_ushort uchar_to_uint
#endif /* SHORT_IS_NOT_INT */

/* (unsigned char, int) */
#define GENERIC_BINARY_FUNCTION uchar_int_bin_op
#define GENERIC_A_TYPE unsigned char
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE int
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_uchar_to_int
#define GENERIC_CONVERT_FUNCTION uchar_to_int
#include "slarith.inc"

/* (unsigned char, unsigned int) */
#define uchar_uint_bin_op NULL
#define GENERIC_A_TYPE unsigned char
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE unsigned int
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_uchar_to_uint
#define GENERIC_CONVERT_FUNCTION uchar_to_uint
#include "slarith.inc"

/* (unsigned char, long) */
#if LONG_IS_NOT_INT
 #define uchar_long_bin_op NULL
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE long
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_long
 #define GENERIC_CONVERT_FUNCTION uchar_to_long
 #include "slarith.inc"
#else
 #define uchar_long_bin_op uchar_int_bin_op
 #define copy_uchar_to_long copy_uchar_to_int
 #define uchar_to_long uchar_to_int
#endif /* LONG_IS_NOT_INT */

/* (unsigned char, unsigned long) */
#if LONG_IS_NOT_INT
 #define uchar_ulong_bin_op NULL
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned long
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_ulong
 #define GENERIC_CONVERT_FUNCTION uchar_to_ulong
 #include "slarith.inc"
#else
 #define uchar_ulong_bin_op uchar_uint_bin_op
 #define copy_uchar_to_ulong copy_uchar_to_uint
 #define uchar_to_ulong uchar_to_uint
#endif /* LONG_IS_NOT_INT */

/* (unsigned char, long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define uchar_llong_bin_op NULL
  #define GENERIC_A_TYPE unsigned char
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE long long
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_uchar_to_llong
  #define GENERIC_CONVERT_FUNCTION uchar_to_llong
  #include "slarith.inc"
 #else
  #define uchar_llong_bin_op uchar_long_bin_op
  #define copy_uchar_to_llong copy_uchar_to_long
  #define uchar_to_llong uchar_to_long
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (unsigned char, unsigned long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define uchar_ullong_bin_op NULL
  #define GENERIC_A_TYPE unsigned char
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned long long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_uchar_to_ullong
  #define GENERIC_CONVERT_FUNCTION uchar_to_ullong
  #include "slarith.inc"
 #else
  #define uchar_ullong_bin_op uchar_ulong_bin_op
  #define copy_uchar_to_ullong copy_uchar_to_ulong
  #define uchar_to_ullong uchar_to_ulong
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (unsigned char, float) */
#if SLANG_HAS_FLOAT
 #define uchar_float_bin_op NULL
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE float
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_float
 #define GENERIC_CONVERT_FUNCTION uchar_to_float
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (unsigned char, double) */
#if SLANG_HAS_FLOAT
 #define GENERIC_BINARY_FUNCTION uchar_double_bin_op
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE double
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_double
 #define GENERIC_CONVERT_FUNCTION uchar_to_double
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (unsigned char, long double) */
#if defined(HAVE_LONG_DOUBLE)
 #define uchar_ldouble_bin_op NULL
 #define GENERIC_A_TYPE unsigned char
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE long double
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_uchar_to_ldouble
 #define GENERIC_CONVERT_FUNCTION uchar_to_ldouble
 #include "slarith.inc"
#endif /* defined(HAVE_LONG_DOUBLE) */


/* short */
#if SHORT_IS_NOT_INT
/* (short, signed char) */
 #define short_char_bin_op NULL
 #define GENERIC_A_TYPE short
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_short_to_char
 #define short_to_char NULL
 #include "slarith.inc"

/* (short, unsigned char) */
 #define short_uchar_bin_op NULL
 #define GENERIC_A_TYPE short
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_short_to_uchar
 #define short_to_uchar NULL
 #include "slarith.inc"

/* (short, short) */
 #define GENERIC_BINARY_FUNCTION short_short_bin_op
 #define GENERIC_A_TYPE short
 #define GENERIC_B_TYPE short
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define short_short_scalar_bin_op int_int_scalar_bin_op
 #define GENERIC_UNARY_FUNCTION short_unary_op
 #define ABS_FUNCTION(a) abs(a)
 #define CMP_FUNCTION short_cmp_function
 #define TO_DOUBLE_FUNCTION short_to_one_double
 #define GENERIC_COPY_FUNCTION copy_short_to_short
 #define short_to_short short_to_int
 #include "slarith.inc"

/* (short, unsigned short) */
 #if SHORT_IS_NOT_INT
  #define short_ushort_bin_op NULL
  #define GENERIC_A_TYPE short
  #define GENERIC_B_TYPE unsigned short
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE int
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define copy_short_to_ushort copy_short_to_short
  #define short_to_ushort short_to_int
  #include "slarith.inc"
 #else
  #define short_ushort_bin_op short_uint_bin_op
  #define copy_short_to_ushort copy_short_to_uint
  #define short_to_ushort short_to_uint
 #endif /* SHORT_IS_NOT_INT */

/* (short, int) */
 #define GENERIC_BINARY_FUNCTION short_int_bin_op
 #define GENERIC_A_TYPE short
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_short_to_int
 #define GENERIC_CONVERT_FUNCTION short_to_int
 #include "slarith.inc"

/* (short, unsigned int) */
 #define short_uint_bin_op NULL
 #define GENERIC_A_TYPE short
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_short_to_uint
 #define GENERIC_CONVERT_FUNCTION short_to_uint
 #include "slarith.inc"

/* (short, long) */
 #if LONG_IS_NOT_INT
  #define short_long_bin_op NULL
  #define GENERIC_A_TYPE short
  #define GENERIC_B_TYPE long
  #define GENERIC_C_TYPE long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_short_to_long
  #define GENERIC_CONVERT_FUNCTION short_to_long
  #include "slarith.inc"
 #else
  #define short_long_bin_op short_int_bin_op
  #define copy_short_to_long copy_short_to_int
  #define short_to_long short_to_int
 #endif /* LONG_IS_NOT_INT */

/* (short, unsigned long) */
 #if LONG_IS_NOT_INT
  #define short_ulong_bin_op NULL
  #define GENERIC_A_TYPE short
  #define GENERIC_B_TYPE unsigned long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_short_to_ulong
  #define GENERIC_CONVERT_FUNCTION short_to_ulong
  #include "slarith.inc"
 #else
  #define short_ulong_bin_op short_uint_bin_op
  #define copy_short_to_ulong copy_short_to_uint
  #define short_to_ulong short_to_uint
 #endif /* LONG_IS_NOT_INT */

/* (short, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define short_llong_bin_op NULL
   #define GENERIC_A_TYPE short
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_short_to_llong
   #define GENERIC_CONVERT_FUNCTION short_to_llong
   #include "slarith.inc"
  #else
   #define short_llong_bin_op short_long_bin_op
   #define copy_short_to_llong copy_short_to_long
   #define short_to_llong short_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (short, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define short_ullong_bin_op NULL
   #define GENERIC_A_TYPE short
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_short_to_ullong
   #define GENERIC_CONVERT_FUNCTION short_to_ullong
   #include "slarith.inc"
  #else
   #define short_ullong_bin_op short_ulong_bin_op
   #define copy_short_to_ullong copy_short_to_ulong
   #define short_to_ullong short_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (short, float) */
 #if SLANG_HAS_FLOAT
  #define short_float_bin_op NULL
  #define GENERIC_A_TYPE short
  #define GENERIC_B_TYPE float
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_short_to_float
  #define GENERIC_CONVERT_FUNCTION short_to_float
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (short, double) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION short_double_bin_op
  #define GENERIC_A_TYPE short
  #define GENERIC_B_TYPE double
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_short_to_double
  #define GENERIC_CONVERT_FUNCTION short_to_double
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (short, long double) */
 #if defined(HAVE_LONG_DOUBLE)
  #define short_ldouble_bin_op NULL
  #define GENERIC_A_TYPE short
  #define GENERIC_B_TYPE long double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_short_to_ldouble
  #define GENERIC_CONVERT_FUNCTION short_to_ldouble
  #include "slarith.inc"
 #endif /* defined(HAVE_LONG_DOUBLE) */

#else
 #define short_char_bin_op int_char_bin_op
 #define short_char_scalar_bin_op int_char_scalar_bin_op
 #define copy_short_to_char copy_int_to_char
 #define short_to_char int_to_char
 #define short_uchar_bin_op int_uchar_bin_op
 #define short_uchar_scalar_bin_op int_uchar_scalar_bin_op
 #define copy_short_to_uchar copy_int_to_uchar
 #define short_to_uchar int_to_uchar
 #define short_short_bin_op int_int_bin_op
 #define short_short_scalar_bin_op int_int_scalar_bin_op
 #define copy_short_to_short copy_int_to_int
 #define short_to_short int_to_int
 #define short_ushort_bin_op int_ushort_bin_op
 #define short_ushort_scalar_bin_op int_ushort_scalar_bin_op
 #define copy_short_to_ushort copy_int_to_ushort
 #define short_to_ushort int_to_ushort
 #define short_int_bin_op int_int_bin_op
 #define short_int_scalar_bin_op int_int_scalar_bin_op
 #define copy_short_to_int copy_int_to_int
 #define short_to_int int_to_int
 #define short_uint_bin_op int_uint_bin_op
 #define short_uint_scalar_bin_op int_uint_scalar_bin_op
 #define copy_short_to_uint copy_int_to_uint
 #define short_to_uint int_to_uint
 #define short_long_bin_op int_long_bin_op
 #define short_long_scalar_bin_op int_long_scalar_bin_op
 #define copy_short_to_long copy_int_to_long
 #define short_to_long int_to_long
 #define short_ulong_bin_op int_ulong_bin_op
 #define short_ulong_scalar_bin_op int_ulong_scalar_bin_op
 #define copy_short_to_ulong copy_int_to_ulong
 #define short_to_ulong int_to_ulong
 #define short_llong_bin_op int_llong_bin_op
 #define short_llong_scalar_bin_op int_llong_scalar_bin_op
 #define copy_short_to_llong copy_int_to_llong
 #define short_to_llong int_to_llong
 #define short_ullong_bin_op int_ullong_bin_op
 #define short_ullong_scalar_bin_op int_ullong_scalar_bin_op
 #define copy_short_to_ullong copy_int_to_ullong
 #define short_to_ullong int_to_ullong
 #define short_float_bin_op int_float_bin_op
 #define short_float_scalar_bin_op int_float_scalar_bin_op
 #define copy_short_to_float copy_int_to_float
 #define short_to_float int_to_float
 #define short_double_bin_op int_double_bin_op
 #define short_double_scalar_bin_op int_double_scalar_bin_op
 #define copy_short_to_double copy_int_to_double
 #define short_to_double int_to_double
 #define short_ldouble_bin_op int_ldouble_bin_op
 #define short_ldouble_scalar_bin_op int_ldouble_scalar_bin_op
 #define copy_short_to_ldouble copy_int_to_ldouble
 #define short_to_ldouble int_to_ldouble
 #define short_unary_op int_unary_op
 #define short_cmp_function int_cmp_function
 #define short_to_one_double int_to_one_double
#endif /* SHORT_IS_NOT_INT */

/* unsigned short */
#if SHORT_IS_NOT_INT
/* (unsigned short, signed char) */
 #define ushort_char_bin_op NULL
 #define GENERIC_A_TYPE unsigned short
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ushort_to_char
 #define ushort_to_char NULL
 #include "slarith.inc"

/* (unsigned short, unsigned char) */
 #define ushort_uchar_bin_op NULL
 #define GENERIC_A_TYPE unsigned short
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ushort_to_uchar
 #define ushort_to_uchar NULL
 #include "slarith.inc"

/* (unsigned short, short) */
 #if SHORT_IS_NOT_INT
  #define ushort_short_bin_op NULL
  #define GENERIC_A_TYPE unsigned short
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE short
  #define GENERIC_C_TYPE int
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define copy_ushort_to_short copy_short_to_short
  #define ushort_to_short ushort_to_int
  #include "slarith.inc"
 #else
  #define ushort_short_bin_op ushort_int_bin_op
  #define copy_ushort_to_short copy_ushort_to_int
  #define ushort_to_short ushort_to_int
 #endif /* SHORT_IS_NOT_INT */

/* (unsigned short, unsigned short) */
 #define GENERIC_BINARY_FUNCTION ushort_ushort_bin_op
 #define GENERIC_A_TYPE unsigned short
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned short
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define ushort_ushort_scalar_bin_op int_int_scalar_bin_op
 #define GENERIC_UNARY_FUNCTION ushort_unary_op
 #define ABS_FUNCTION(a) (a)
 #define CMP_FUNCTION ushort_cmp_function
 #define TO_BINARY_FUNCTION ushort_to_binary
 #define TO_DOUBLE_FUNCTION ushort_to_one_double
 #define copy_ushort_to_ushort copy_short_to_short
 #define ushort_to_ushort ushort_to_int
 #include "slarith.inc"

/* (unsigned short, int) */
 #define GENERIC_BINARY_FUNCTION ushort_int_bin_op
 #define GENERIC_A_TYPE unsigned short
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ushort_to_int
 #define GENERIC_CONVERT_FUNCTION ushort_to_int
 #include "slarith.inc"

/* (unsigned short, unsigned int) */
 #define ushort_uint_bin_op NULL
 #define GENERIC_A_TYPE unsigned short
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ushort_to_uint
 #define GENERIC_CONVERT_FUNCTION ushort_to_uint
 #include "slarith.inc"

/* (unsigned short, long) */
 #if LONG_IS_NOT_INT
  #define ushort_long_bin_op NULL
  #define GENERIC_A_TYPE unsigned short
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE long
  #define GENERIC_C_TYPE long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ushort_to_long
  #define GENERIC_CONVERT_FUNCTION ushort_to_long
  #include "slarith.inc"
 #else
  #define ushort_long_bin_op ushort_int_bin_op
  #define copy_ushort_to_long copy_ushort_to_int
  #define ushort_to_long ushort_to_int
 #endif /* LONG_IS_NOT_INT */

/* (unsigned short, unsigned long) */
 #if LONG_IS_NOT_INT
  #define ushort_ulong_bin_op NULL
  #define GENERIC_A_TYPE unsigned short
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ushort_to_ulong
  #define GENERIC_CONVERT_FUNCTION ushort_to_ulong
  #include "slarith.inc"
 #else
  #define ushort_ulong_bin_op ushort_uint_bin_op
  #define copy_ushort_to_ulong copy_ushort_to_uint
  #define ushort_to_ulong ushort_to_uint
 #endif /* LONG_IS_NOT_INT */

/* (unsigned short, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define ushort_llong_bin_op NULL
   #define GENERIC_A_TYPE unsigned short
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ushort_to_llong
   #define GENERIC_CONVERT_FUNCTION ushort_to_llong
   #include "slarith.inc"
  #else
   #define ushort_llong_bin_op ushort_long_bin_op
   #define copy_ushort_to_llong copy_ushort_to_long
   #define ushort_to_llong ushort_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (unsigned short, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define ushort_ullong_bin_op NULL
   #define GENERIC_A_TYPE unsigned short
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ushort_to_ullong
   #define GENERIC_CONVERT_FUNCTION ushort_to_ullong
   #include "slarith.inc"
  #else
   #define ushort_ullong_bin_op ushort_ulong_bin_op
   #define copy_ushort_to_ullong copy_ushort_to_ulong
   #define ushort_to_ullong ushort_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (unsigned short, float) */
 #if SLANG_HAS_FLOAT
  #define ushort_float_bin_op NULL
  #define GENERIC_A_TYPE unsigned short
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE float
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ushort_to_float
  #define GENERIC_CONVERT_FUNCTION ushort_to_float
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (unsigned short, double) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION ushort_double_bin_op
  #define GENERIC_A_TYPE unsigned short
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE double
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ushort_to_double
  #define GENERIC_CONVERT_FUNCTION ushort_to_double
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (unsigned short, long double) */
 #if defined(HAVE_LONG_DOUBLE)
  #define ushort_ldouble_bin_op NULL
  #define GENERIC_A_TYPE unsigned short
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE long double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ushort_to_ldouble
  #define GENERIC_CONVERT_FUNCTION ushort_to_ldouble
  #include "slarith.inc"
 #endif /* defined(HAVE_LONG_DOUBLE) */

#else
 #define ushort_char_bin_op uint_char_bin_op
 #define ushort_char_scalar_bin_op uint_char_scalar_bin_op
 #define copy_ushort_to_char copy_uint_to_char
 #define ushort_to_char uint_to_char
 #define ushort_uchar_bin_op uint_uchar_bin_op
 #define ushort_uchar_scalar_bin_op uint_uchar_scalar_bin_op
 #define copy_ushort_to_uchar copy_uint_to_uchar
 #define ushort_to_uchar uint_to_uchar
 #define ushort_short_bin_op uint_short_bin_op
 #define ushort_short_scalar_bin_op uint_short_scalar_bin_op
 #define copy_ushort_to_short copy_uint_to_short
 #define ushort_to_short uint_to_short
 #define ushort_ushort_bin_op uint_uint_bin_op
 #define ushort_ushort_scalar_bin_op uint_uint_scalar_bin_op
 #define copy_ushort_to_ushort copy_uint_to_uint
 #define ushort_to_ushort uint_to_uint
 #define ushort_int_bin_op uint_int_bin_op
 #define ushort_int_scalar_bin_op uint_int_scalar_bin_op
 #define copy_ushort_to_int copy_uint_to_int
 #define ushort_to_int uint_to_int
 #define ushort_uint_bin_op uint_uint_bin_op
 #define ushort_uint_scalar_bin_op uint_uint_scalar_bin_op
 #define copy_ushort_to_uint copy_uint_to_uint
 #define ushort_to_uint uint_to_uint
 #define ushort_long_bin_op uint_long_bin_op
 #define ushort_long_scalar_bin_op uint_long_scalar_bin_op
 #define copy_ushort_to_long copy_uint_to_long
 #define ushort_to_long uint_to_long
 #define ushort_ulong_bin_op uint_ulong_bin_op
 #define ushort_ulong_scalar_bin_op uint_ulong_scalar_bin_op
 #define copy_ushort_to_ulong copy_uint_to_ulong
 #define ushort_to_ulong uint_to_ulong
 #define ushort_llong_bin_op uint_llong_bin_op
 #define ushort_llong_scalar_bin_op uint_llong_scalar_bin_op
 #define copy_ushort_to_llong copy_uint_to_llong
 #define ushort_to_llong uint_to_llong
 #define ushort_ullong_bin_op uint_ullong_bin_op
 #define ushort_ullong_scalar_bin_op uint_ullong_scalar_bin_op
 #define copy_ushort_to_ullong copy_uint_to_ullong
 #define ushort_to_ullong uint_to_ullong
 #define ushort_float_bin_op uint_float_bin_op
 #define ushort_float_scalar_bin_op uint_float_scalar_bin_op
 #define copy_ushort_to_float copy_uint_to_float
 #define ushort_to_float uint_to_float
 #define ushort_double_bin_op uint_double_bin_op
 #define ushort_double_scalar_bin_op uint_double_scalar_bin_op
 #define copy_ushort_to_double copy_uint_to_double
 #define ushort_to_double uint_to_double
 #define ushort_ldouble_bin_op uint_ldouble_bin_op
 #define ushort_ldouble_scalar_bin_op uint_ldouble_scalar_bin_op
 #define copy_ushort_to_ldouble copy_uint_to_ldouble
 #define ushort_to_ldouble uint_to_ldouble
 #define ushort_unary_op uint_unary_op
 #define ushort_cmp_function uint_cmp_function
 #define ushort_to_binary uint_to_binary
 #define ushort_to_one_double uint_to_one_double
#endif /* SHORT_IS_NOT_INT */

/* int */
/* (int, signed char) */
#define GENERIC_BINARY_FUNCTION int_char_bin_op
#define GENERIC_A_TYPE int
#define GENERIC_B_TYPE signed char
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_int_to_char
#define int_to_char NULL
#include "slarith.inc"

/* (int, unsigned char) */
#define GENERIC_BINARY_FUNCTION int_uchar_bin_op
#define GENERIC_A_TYPE int
#define GENERIC_B_TYPE unsigned char
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_int_to_uchar
#define int_to_uchar NULL
#include "slarith.inc"

/* (int, short) */
#if SHORT_IS_NOT_INT
 #define GENERIC_BINARY_FUNCTION int_short_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE short
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_int_to_short
 #define int_to_short NULL
 #include "slarith.inc"
#else
 #define int_short_bin_op int_int_bin_op
 #define copy_int_to_short copy_int_to_int
 #define int_to_short int_to_int
#endif /* SHORT_IS_NOT_INT */

/* (int, unsigned short) */
#if SHORT_IS_NOT_INT
 #define GENERIC_BINARY_FUNCTION int_ushort_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE unsigned short
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_int_to_ushort
 #define int_to_ushort NULL
 #include "slarith.inc"
#else
 #define int_ushort_bin_op int_uint_bin_op
 #define copy_int_to_ushort copy_int_to_uint
 #define int_to_ushort int_to_uint
#endif /* SHORT_IS_NOT_INT */

/* (int, int) */
#define GENERIC_BINARY_FUNCTION int_int_bin_op
#define GENERIC_A_TYPE int
#define GENERIC_B_TYPE int
#define GENERIC_C_TYPE int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define SCALAR_BINARY_FUNCTION int_int_scalar_bin_op
#define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_int_obj(SLANG_INT_TYPE, (int)(a))
#define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
#define GENERIC_UNARY_FUNCTION int_unary_op
#define ABS_FUNCTION(a) abs(a)
#define CMP_FUNCTION int_cmp_function
#define TO_DOUBLE_FUNCTION int_to_one_double
#define GENERIC_COPY_FUNCTION copy_int_to_int
#define int_to_int convert_self_to_self
#include "slarith.inc"

/* (int, unsigned int) */
#define GENERIC_BINARY_FUNCTION int_uint_bin_op
#define GENERIC_A_TYPE int
#define GENERIC_B_TYPE unsigned int
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define copy_int_to_uint copy_int_to_int
#define int_to_uint convert_self_to_self
#include "slarith.inc"

/* (int, long) */
#if LONG_IS_NOT_INT
 #define GENERIC_BINARY_FUNCTION int_long_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE long
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_int_to_long
 #define GENERIC_CONVERT_FUNCTION int_to_long
 #include "slarith.inc"
#else
 #define int_long_bin_op int_int_bin_op
 #define copy_int_to_long copy_int_to_int
 #define int_to_long int_to_int
#endif /* LONG_IS_NOT_INT */

/* (int, unsigned long) */
#if LONG_IS_NOT_INT
 #define GENERIC_BINARY_FUNCTION int_ulong_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE unsigned long
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_int_to_ulong
 #define GENERIC_CONVERT_FUNCTION int_to_ulong
 #include "slarith.inc"
#else
 #define int_ulong_bin_op int_uint_bin_op
 #define copy_int_to_ulong copy_int_to_uint
 #define int_to_ulong int_to_uint
#endif /* LONG_IS_NOT_INT */

/* (int, long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define GENERIC_BINARY_FUNCTION int_llong_bin_op
  #define GENERIC_A_TYPE int
  #define GENERIC_B_TYPE long long
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_int_to_llong
  #define GENERIC_CONVERT_FUNCTION int_to_llong
  #include "slarith.inc"
 #else
  #define int_llong_bin_op int_long_bin_op
  #define copy_int_to_llong copy_int_to_long
  #define int_to_llong int_to_long
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (int, unsigned long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define GENERIC_BINARY_FUNCTION int_ullong_bin_op
  #define GENERIC_A_TYPE int
  #define GENERIC_B_TYPE unsigned long long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_int_to_ullong
  #define GENERIC_CONVERT_FUNCTION int_to_ullong
  #include "slarith.inc"
 #else
  #define int_ullong_bin_op int_ulong_bin_op
  #define copy_int_to_ullong copy_int_to_ulong
  #define int_to_ullong int_to_ulong
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (int, float) */
#if SLANG_HAS_FLOAT
 #define GENERIC_BINARY_FUNCTION int_float_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE float
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_int_to_float
 #define GENERIC_CONVERT_FUNCTION int_to_float
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (int, double) */
#if SLANG_HAS_FLOAT
 #define GENERIC_BINARY_FUNCTION int_double_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE double
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_int_to_double
 #define GENERIC_CONVERT_FUNCTION int_to_double
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (int, long double) */
#if defined(HAVE_LONG_DOUBLE)
 #define GENERIC_BINARY_FUNCTION int_ldouble_bin_op
 #define GENERIC_A_TYPE int
 #define GENERIC_B_TYPE long double
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_int_to_ldouble
 #define GENERIC_CONVERT_FUNCTION int_to_ldouble
 #include "slarith.inc"
#endif /* defined(HAVE_LONG_DOUBLE) */


/* unsigned int */
/* (unsigned int, signed char) */
#define uint_char_bin_op NULL
#define GENERIC_A_TYPE unsigned int
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE signed char
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_uint_to_char
#define uint_to_char NULL
#include "slarith.inc"

/* (unsigned int, unsigned char) */
#define uint_uchar_bin_op NULL
#define GENERIC_A_TYPE unsigned int
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE unsigned char
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define GENERIC_COPY_FUNCTION copy_uint_to_uchar
#define uint_to_uchar NULL
#include "slarith.inc"

/* (unsigned int, short) */
#if SHORT_IS_NOT_INT
 #define uint_short_bin_op NULL
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE short
 #define GENERIC_C_TYPE unsigned int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_short
 #define uint_to_short NULL
 #include "slarith.inc"
#else
 #define uint_short_bin_op uint_int_bin_op
 #define copy_uint_to_short copy_uint_to_int
 #define uint_to_short uint_to_int
#endif /* SHORT_IS_NOT_INT */

/* (unsigned int, unsigned short) */
#if SHORT_IS_NOT_INT
 #define uint_ushort_bin_op NULL
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned short
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned int
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_ushort
 #define uint_to_ushort NULL
 #include "slarith.inc"
#else
 #define uint_ushort_bin_op uint_uint_bin_op
 #define copy_uint_to_ushort copy_uint_to_uint
 #define uint_to_ushort uint_to_uint
#endif /* SHORT_IS_NOT_INT */

/* (unsigned int, int) */
#define GENERIC_BINARY_FUNCTION uint_int_bin_op
#define GENERIC_A_TYPE unsigned int
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE int
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define copy_uint_to_int copy_int_to_int
#define uint_to_int convert_self_to_self
#include "slarith.inc"

/* (unsigned int, unsigned int) */
#define GENERIC_BINARY_FUNCTION uint_uint_bin_op
#define GENERIC_A_TYPE unsigned int
#define GENERIC_A_TYPE_UNSIGNED 1
#define GENERIC_B_TYPE unsigned int
#define GENERIC_B_TYPE_UNSIGNED 1
#define GENERIC_C_TYPE unsigned int
#define GENERIC_BIT_OPERATIONS 1
#define TRAP_DIV_ZERO 1
#define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
#define POW_RESULT_TYPE double
#define MOD_FUNCTION(a,b) ((a) % (b))
#define SCALAR_BINARY_FUNCTION uint_uint_scalar_bin_op
#define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_int_obj(SLANG_UINT_TYPE, (int)(a))
#define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
#define GENERIC_UNARY_FUNCTION uint_unary_op
#define ABS_FUNCTION(a) (a)
#define CMP_FUNCTION uint_cmp_function
#define TO_BINARY_FUNCTION uint_to_binary
#define TO_DOUBLE_FUNCTION uint_to_one_double
#define copy_uint_to_uint copy_int_to_int
#define uint_to_uint convert_self_to_self
#include "slarith.inc"

/* (unsigned int, long) */
#if LONG_IS_NOT_INT
 #define uint_long_bin_op NULL
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE long
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_long
 #define GENERIC_CONVERT_FUNCTION uint_to_long
 #include "slarith.inc"
#else
 #define uint_long_bin_op uint_int_bin_op
 #define copy_uint_to_long copy_uint_to_int
 #define uint_to_long uint_to_int
#endif /* LONG_IS_NOT_INT */

/* (unsigned int, unsigned long) */
#if LONG_IS_NOT_INT
 #define uint_ulong_bin_op NULL
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned long
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_ulong
 #define GENERIC_CONVERT_FUNCTION uint_to_ulong
 #include "slarith.inc"
#else
 #define uint_ulong_bin_op uint_uint_bin_op
 #define copy_uint_to_ulong copy_uint_to_uint
 #define uint_to_ulong uint_to_uint
#endif /* LONG_IS_NOT_INT */

/* (unsigned int, long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define uint_llong_bin_op NULL
  #define GENERIC_A_TYPE unsigned int
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE long long
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_uint_to_llong
  #define GENERIC_CONVERT_FUNCTION uint_to_llong
  #include "slarith.inc"
 #else
  #define uint_llong_bin_op uint_long_bin_op
  #define copy_uint_to_llong copy_uint_to_long
  #define uint_to_llong uint_to_long
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (unsigned int, unsigned long long) */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
  #define uint_ullong_bin_op NULL
  #define GENERIC_A_TYPE unsigned int
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned long long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_uint_to_ullong
  #define GENERIC_CONVERT_FUNCTION uint_to_ullong
  #include "slarith.inc"
 #else
  #define uint_ullong_bin_op uint_ulong_bin_op
  #define copy_uint_to_ullong copy_uint_to_ulong
  #define uint_to_ullong uint_to_ulong
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* (unsigned int, float) */
#if SLANG_HAS_FLOAT
 #define uint_float_bin_op NULL
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE float
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_float
 #define GENERIC_CONVERT_FUNCTION uint_to_float
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (unsigned int, double) */
#if SLANG_HAS_FLOAT
 #define GENERIC_BINARY_FUNCTION uint_double_bin_op
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE double
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_double
 #define GENERIC_CONVERT_FUNCTION uint_to_double
 #include "slarith.inc"
#endif /* SLANG_HAS_FLOAT */

/* (unsigned int, long double) */
#if defined(HAVE_LONG_DOUBLE)
 #define uint_ldouble_bin_op NULL
 #define GENERIC_A_TYPE unsigned int
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE long double
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_uint_to_ldouble
 #define GENERIC_CONVERT_FUNCTION uint_to_ldouble
 #include "slarith.inc"
#endif /* defined(HAVE_LONG_DOUBLE) */


/* long */
#if LONG_IS_NOT_INT
/* (long, signed char) */
 #define long_char_bin_op NULL
 #define GENERIC_A_TYPE long
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_long_to_char
 #define long_to_char NULL
 #include "slarith.inc"

/* (long, unsigned char) */
 #define long_uchar_bin_op NULL
 #define GENERIC_A_TYPE long
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_long_to_uchar
 #define long_to_uchar NULL
 #include "slarith.inc"

/* (long, short) */
 #if SHORT_IS_NOT_INT
  #define long_short_bin_op NULL
  #define GENERIC_A_TYPE long
  #define GENERIC_B_TYPE short
  #define GENERIC_C_TYPE long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_long_to_short
  #define long_to_short NULL
  #include "slarith.inc"
 #else
  #define long_short_bin_op long_int_bin_op
  #define copy_long_to_short copy_long_to_int
  #define long_to_short long_to_int
 #endif /* SHORT_IS_NOT_INT */

/* (long, unsigned short) */
 #if SHORT_IS_NOT_INT
  #define long_ushort_bin_op NULL
  #define GENERIC_A_TYPE long
  #define GENERIC_B_TYPE unsigned short
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_long_to_ushort
  #define long_to_ushort NULL
  #include "slarith.inc"
 #else
  #define long_ushort_bin_op long_uint_bin_op
  #define copy_long_to_ushort copy_long_to_uint
  #define long_to_ushort long_to_uint
 #endif /* SHORT_IS_NOT_INT */

/* (long, int) */
 #define GENERIC_BINARY_FUNCTION long_int_bin_op
 #define GENERIC_A_TYPE long
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_long_to_int
 #define long_to_int NULL
 #include "slarith.inc"

/* (long, unsigned int) */
 #define long_uint_bin_op NULL
 #define GENERIC_A_TYPE long
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_long_to_uint
 #define long_to_uint NULL
 #include "slarith.inc"

/* (long, long) */
 #define GENERIC_BINARY_FUNCTION long_long_bin_op
 #define GENERIC_A_TYPE long
 #define GENERIC_B_TYPE long
 #define GENERIC_C_TYPE long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define SCALAR_BINARY_FUNCTION long_long_scalar_bin_op
 #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_long_obj(SLANG_LONG_TYPE, (long)(a))
 #define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
 #define GENERIC_UNARY_FUNCTION long_unary_op
 #define ABS_FUNCTION(a) labs(a)
 #define CMP_FUNCTION long_cmp_function
 #define TO_DOUBLE_FUNCTION long_to_one_double
 #define GENERIC_COPY_FUNCTION copy_long_to_long
 #define long_to_long convert_self_to_self
 #include "slarith.inc"

/* (long, unsigned long) */
 #if LONG_IS_NOT_INT
  #define long_ulong_bin_op NULL
  #define GENERIC_A_TYPE long
  #define GENERIC_B_TYPE unsigned long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define copy_long_to_ulong copy_long_to_long
  #define long_to_ulong convert_self_to_self
  #include "slarith.inc"
 #else
  #define long_ulong_bin_op long_uint_bin_op
  #define copy_long_to_ulong copy_long_to_uint
  #define long_to_ulong long_to_uint
 #endif /* LONG_IS_NOT_INT */

/* (long, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define long_llong_bin_op NULL
   #define GENERIC_A_TYPE long
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_long_to_llong
   #define GENERIC_CONVERT_FUNCTION long_to_llong
   #include "slarith.inc"
  #else
   #define long_llong_bin_op long_long_bin_op
   #define copy_long_to_llong copy_long_to_long
   #define long_to_llong long_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (long, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define long_ullong_bin_op NULL
   #define GENERIC_A_TYPE long
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_long_to_ullong
   #define GENERIC_CONVERT_FUNCTION long_to_ullong
   #include "slarith.inc"
  #else
   #define long_ullong_bin_op long_ulong_bin_op
   #define copy_long_to_ullong copy_long_to_ulong
   #define long_to_ullong long_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (long, float) */
 #if SLANG_HAS_FLOAT
  #define long_float_bin_op NULL
  #define GENERIC_A_TYPE long
  #define GENERIC_B_TYPE float
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_long_to_float
  #define GENERIC_CONVERT_FUNCTION long_to_float
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (long, double) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION long_double_bin_op
  #define GENERIC_A_TYPE long
  #define GENERIC_B_TYPE double
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_long_to_double
  #define GENERIC_CONVERT_FUNCTION long_to_double
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (long, long double) */
 #if defined(HAVE_LONG_DOUBLE)
  #define long_ldouble_bin_op NULL
  #define GENERIC_A_TYPE long
  #define GENERIC_B_TYPE long double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_long_to_ldouble
  #define GENERIC_CONVERT_FUNCTION long_to_ldouble
  #include "slarith.inc"
 #endif /* defined(HAVE_LONG_DOUBLE) */

#else
 #define long_char_bin_op int_char_bin_op
 #define long_char_scalar_bin_op int_char_scalar_bin_op
 #define copy_long_to_char copy_int_to_char
 #define long_to_char int_to_char
 #define long_uchar_bin_op int_uchar_bin_op
 #define long_uchar_scalar_bin_op int_uchar_scalar_bin_op
 #define copy_long_to_uchar copy_int_to_uchar
 #define long_to_uchar int_to_uchar
 #define long_short_bin_op int_short_bin_op
 #define long_short_scalar_bin_op int_short_scalar_bin_op
 #define copy_long_to_short copy_int_to_short
 #define long_to_short int_to_short
 #define long_ushort_bin_op int_ushort_bin_op
 #define long_ushort_scalar_bin_op int_ushort_scalar_bin_op
 #define copy_long_to_ushort copy_int_to_ushort
 #define long_to_ushort int_to_ushort
 #define long_int_bin_op int_int_bin_op
 #define long_int_scalar_bin_op int_int_scalar_bin_op
 #define copy_long_to_int copy_int_to_int
 #define long_to_int int_to_int
 #define long_uint_bin_op int_uint_bin_op
 #define long_uint_scalar_bin_op int_uint_scalar_bin_op
 #define copy_long_to_uint copy_int_to_uint
 #define long_to_uint int_to_uint
 #define long_long_bin_op int_int_bin_op
 #define long_long_scalar_bin_op int_int_scalar_bin_op
 #define copy_long_to_long copy_int_to_int
 #define long_to_long int_to_int
 #define long_ulong_bin_op int_ulong_bin_op
 #define long_ulong_scalar_bin_op int_ulong_scalar_bin_op
 #define copy_long_to_ulong copy_int_to_ulong
 #define long_to_ulong int_to_ulong
 #define long_llong_bin_op int_llong_bin_op
 #define long_llong_scalar_bin_op int_llong_scalar_bin_op
 #define copy_long_to_llong copy_int_to_llong
 #define long_to_llong int_to_llong
 #define long_ullong_bin_op int_ullong_bin_op
 #define long_ullong_scalar_bin_op int_ullong_scalar_bin_op
 #define copy_long_to_ullong copy_int_to_ullong
 #define long_to_ullong int_to_ullong
 #define long_float_bin_op int_float_bin_op
 #define long_float_scalar_bin_op int_float_scalar_bin_op
 #define copy_long_to_float copy_int_to_float
 #define long_to_float int_to_float
 #define long_double_bin_op int_double_bin_op
 #define long_double_scalar_bin_op int_double_scalar_bin_op
 #define copy_long_to_double copy_int_to_double
 #define long_to_double int_to_double
 #define long_ldouble_bin_op int_ldouble_bin_op
 #define long_ldouble_scalar_bin_op int_ldouble_scalar_bin_op
 #define copy_long_to_ldouble copy_int_to_ldouble
 #define long_to_ldouble int_to_ldouble
 #define long_unary_op int_unary_op
 #define long_cmp_function int_cmp_function
 #define long_to_one_double int_to_one_double
#endif /* LONG_IS_NOT_INT */

/* unsigned long */
#if LONG_IS_NOT_INT
/* (unsigned long, signed char) */
 #define ulong_char_bin_op NULL
 #define GENERIC_A_TYPE unsigned long
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ulong_to_char
 #define ulong_to_char NULL
 #include "slarith.inc"

/* (unsigned long, unsigned char) */
 #define ulong_uchar_bin_op NULL
 #define GENERIC_A_TYPE unsigned long
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ulong_to_uchar
 #define ulong_to_uchar NULL
 #include "slarith.inc"

/* (unsigned long, short) */
 #if SHORT_IS_NOT_INT
  #define ulong_short_bin_op NULL
  #define GENERIC_A_TYPE unsigned long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE short
  #define GENERIC_C_TYPE unsigned long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ulong_to_short
  #define ulong_to_short NULL
  #include "slarith.inc"
 #else
  #define ulong_short_bin_op ulong_int_bin_op
  #define copy_ulong_to_short copy_ulong_to_int
  #define ulong_to_short ulong_to_int
 #endif /* SHORT_IS_NOT_INT */

/* (unsigned long, unsigned short) */
 #if SHORT_IS_NOT_INT
  #define ulong_ushort_bin_op NULL
  #define GENERIC_A_TYPE unsigned long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned short
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ulong_to_ushort
  #define ulong_to_ushort NULL
  #include "slarith.inc"
 #else
  #define ulong_ushort_bin_op ulong_uint_bin_op
  #define copy_ulong_to_ushort copy_ulong_to_uint
  #define ulong_to_ushort ulong_to_uint
 #endif /* SHORT_IS_NOT_INT */

/* (unsigned long, int) */
 #define GENERIC_BINARY_FUNCTION ulong_int_bin_op
 #define GENERIC_A_TYPE unsigned long
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ulong_to_int
 #define ulong_to_int NULL
 #include "slarith.inc"

/* (unsigned long, unsigned int) */
 #define ulong_uint_bin_op NULL
 #define GENERIC_A_TYPE unsigned long
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define GENERIC_COPY_FUNCTION copy_ulong_to_uint
 #define ulong_to_uint NULL
 #include "slarith.inc"

/* (unsigned long, long) */
 #if LONG_IS_NOT_INT
  #define ulong_long_bin_op NULL
  #define GENERIC_A_TYPE unsigned long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE long
  #define GENERIC_C_TYPE unsigned long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define copy_ulong_to_long copy_long_to_long
  #define ulong_to_long convert_self_to_self
  #include "slarith.inc"
 #else
  #define ulong_long_bin_op ulong_int_bin_op
  #define copy_ulong_to_long copy_ulong_to_int
  #define ulong_to_long ulong_to_int
 #endif /* LONG_IS_NOT_INT */

/* (unsigned long, unsigned long) */
 #define GENERIC_BINARY_FUNCTION ulong_ulong_bin_op
 #define GENERIC_A_TYPE unsigned long
 #define GENERIC_A_TYPE_UNSIGNED 1
 #define GENERIC_B_TYPE unsigned long
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE unsigned long
 #define GENERIC_BIT_OPERATIONS 1
 #define TRAP_DIV_ZERO 1
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) ((a) % (b))
 #define SCALAR_BINARY_FUNCTION ulong_ulong_scalar_bin_op
 #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_long_obj(SLANG_ULONG_TYPE, (long)(a))
 #define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
 #define GENERIC_UNARY_FUNCTION ulong_unary_op
 #define ABS_FUNCTION(a) (a)
 #define CMP_FUNCTION ulong_cmp_function
 #define TO_BINARY_FUNCTION ulong_to_binary
 #define TO_DOUBLE_FUNCTION ulong_to_one_double
 #define copy_ulong_to_ulong copy_long_to_long
 #define ulong_to_ulong convert_self_to_self
 #include "slarith.inc"

/* (unsigned long, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define ulong_llong_bin_op NULL
   #define GENERIC_A_TYPE unsigned long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ulong_to_llong
   #define GENERIC_CONVERT_FUNCTION ulong_to_llong
   #include "slarith.inc"
  #else
   #define ulong_llong_bin_op ulong_long_bin_op
   #define copy_ulong_to_llong copy_ulong_to_long
   #define ulong_to_llong ulong_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (unsigned long, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define ulong_ullong_bin_op NULL
   #define GENERIC_A_TYPE unsigned long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ulong_to_ullong
   #define GENERIC_CONVERT_FUNCTION ulong_to_ullong
   #include "slarith.inc"
  #else
   #define ulong_ullong_bin_op ulong_ulong_bin_op
   #define copy_ulong_to_ullong copy_ulong_to_ulong
   #define ulong_to_ullong ulong_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (unsigned long, float) */
 #if SLANG_HAS_FLOAT
  #define ulong_float_bin_op NULL
  #define GENERIC_A_TYPE unsigned long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE float
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ulong_to_float
  #define GENERIC_CONVERT_FUNCTION ulong_to_float
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (unsigned long, double) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION ulong_double_bin_op
  #define GENERIC_A_TYPE unsigned long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE double
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ulong_to_double
  #define GENERIC_CONVERT_FUNCTION ulong_to_double
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (unsigned long, long double) */
 #if defined(HAVE_LONG_DOUBLE)
  #define ulong_ldouble_bin_op NULL
  #define GENERIC_A_TYPE unsigned long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE long double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ulong_to_ldouble
  #define GENERIC_CONVERT_FUNCTION ulong_to_ldouble
  #include "slarith.inc"
 #endif /* defined(HAVE_LONG_DOUBLE) */

#else
 #define ulong_char_bin_op uint_char_bin_op
 #define ulong_char_scalar_bin_op uint_char_scalar_bin_op
 #define copy_ulong_to_char copy_uint_to_char
 #define ulong_to_char uint_to_char
 #define ulong_uchar_bin_op uint_uchar_bin_op
 #define ulong_uchar_scalar_bin_op uint_uchar_scalar_bin_op
 #define copy_ulong_to_uchar copy_uint_to_uchar
 #define ulong_to_uchar uint_to_uchar
 #define ulong_short_bin_op uint_short_bin_op
 #define ulong_short_scalar_bin_op uint_short_scalar_bin_op
 #define copy_ulong_to_short copy_uint_to_short
 #define ulong_to_short uint_to_short
 #define ulong_ushort_bin_op uint_ushort_bin_op
 #define ulong_ushort_scalar_bin_op uint_ushort_scalar_bin_op
 #define copy_ulong_to_ushort copy_uint_to_ushort
 #define ulong_to_ushort uint_to_ushort
 #define ulong_int_bin_op uint_int_bin_op
 #define ulong_int_scalar_bin_op uint_int_scalar_bin_op
 #define copy_ulong_to_int copy_uint_to_int
 #define ulong_to_int uint_to_int
 #define ulong_uint_bin_op uint_uint_bin_op
 #define ulong_uint_scalar_bin_op uint_uint_scalar_bin_op
 #define copy_ulong_to_uint copy_uint_to_uint
 #define ulong_to_uint uint_to_uint
 #define ulong_long_bin_op uint_long_bin_op
 #define ulong_long_scalar_bin_op uint_long_scalar_bin_op
 #define copy_ulong_to_long copy_uint_to_long
 #define ulong_to_long uint_to_long
 #define ulong_ulong_bin_op uint_uint_bin_op
 #define ulong_ulong_scalar_bin_op uint_uint_scalar_bin_op
 #define copy_ulong_to_ulong copy_uint_to_uint
 #define ulong_to_ulong uint_to_uint
 #define ulong_llong_bin_op uint_llong_bin_op
 #define ulong_llong_scalar_bin_op uint_llong_scalar_bin_op
 #define copy_ulong_to_llong copy_uint_to_llong
 #define ulong_to_llong uint_to_llong
 #define ulong_ullong_bin_op uint_ullong_bin_op
 #define ulong_ullong_scalar_bin_op uint_ullong_scalar_bin_op
 #define copy_ulong_to_ullong copy_uint_to_ullong
 #define ulong_to_ullong uint_to_ullong
 #define ulong_float_bin_op uint_float_bin_op
 #define ulong_float_scalar_bin_op uint_float_scalar_bin_op
 #define copy_ulong_to_float copy_uint_to_float
 #define ulong_to_float uint_to_float
 #define ulong_double_bin_op uint_double_bin_op
 #define ulong_double_scalar_bin_op uint_double_scalar_bin_op
 #define copy_ulong_to_double copy_uint_to_double
 #define ulong_to_double uint_to_double
 #define ulong_ldouble_bin_op uint_ldouble_bin_op
 #define ulong_ldouble_scalar_bin_op uint_ldouble_scalar_bin_op
 #define copy_ulong_to_ldouble copy_uint_to_ldouble
 #define ulong_to_ldouble uint_to_ldouble
 #define ulong_unary_op uint_unary_op
 #define ulong_cmp_function uint_cmp_function
 #define ulong_to_binary uint_to_binary
 #define ulong_to_one_double uint_to_one_double
#endif /* LONG_IS_NOT_INT */

/* long long */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
/* (long long, signed char) */
  #define llong_char_bin_op NULL
  #define GENERIC_A_TYPE long long
  #define GENERIC_B_TYPE signed char
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_llong_to_char
  #define llong_to_char NULL
  #include "slarith.inc"

/* (long long, unsigned char) */
  #define llong_uchar_bin_op NULL
  #define GENERIC_A_TYPE long long
  #define GENERIC_B_TYPE unsigned char
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_llong_to_uchar
  #define llong_to_uchar NULL
  #include "slarith.inc"

/* (long long, short) */
  #if SHORT_IS_NOT_INT
   #define llong_short_bin_op NULL
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE short
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_short
   #define llong_to_short NULL
   #include "slarith.inc"
  #else
   #define llong_short_bin_op llong_int_bin_op
   #define copy_llong_to_short copy_llong_to_int
   #define llong_to_short llong_to_int
  #endif /* SHORT_IS_NOT_INT */

/* (long long, unsigned short) */
  #if SHORT_IS_NOT_INT
   #define llong_ushort_bin_op NULL
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE unsigned short
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_ushort
   #define llong_to_ushort NULL
   #include "slarith.inc"
  #else
   #define llong_ushort_bin_op llong_uint_bin_op
   #define copy_llong_to_ushort copy_llong_to_uint
   #define llong_to_ushort llong_to_uint
  #endif /* SHORT_IS_NOT_INT */

/* (long long, int) */
  #define GENERIC_BINARY_FUNCTION llong_int_bin_op
  #define GENERIC_A_TYPE long long
  #define GENERIC_B_TYPE int
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_llong_to_int
  #define llong_to_int NULL
  #include "slarith.inc"

/* (long long, unsigned int) */
  #define llong_uint_bin_op NULL
  #define GENERIC_A_TYPE long long
  #define GENERIC_B_TYPE unsigned int
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_llong_to_uint
  #define llong_to_uint NULL
  #include "slarith.inc"

/* (long long, long) */
  #if LONG_IS_NOT_INT
   #define llong_long_bin_op NULL
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE long
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_long
   #define llong_to_long NULL
   #include "slarith.inc"
  #else
   #define llong_long_bin_op llong_int_bin_op
   #define copy_llong_to_long copy_llong_to_int
   #define llong_to_long llong_to_int
  #endif /* LONG_IS_NOT_INT */

/* (long long, unsigned long) */
  #if LONG_IS_NOT_INT
   #define llong_ulong_bin_op NULL
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE unsigned long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_ulong
   #define llong_to_ulong NULL
   #include "slarith.inc"
  #else
   #define llong_ulong_bin_op llong_uint_bin_op
   #define copy_llong_to_ulong copy_llong_to_uint
   #define llong_to_ulong llong_to_uint
  #endif /* LONG_IS_NOT_INT */

/* (long long, long long) */
  #define GENERIC_BINARY_FUNCTION llong_llong_bin_op
  #define GENERIC_A_TYPE long long
  #define GENERIC_B_TYPE long long
  #define GENERIC_C_TYPE long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define SCALAR_BINARY_FUNCTION llong_llong_scalar_bin_op
  #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_llong_obj(SLANG_LLONG_TYPE, (long long)(a))
  #define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
  #define GENERIC_UNARY_FUNCTION llong_unary_op
  #define ABS_FUNCTION(a) (((a) >= 0) ? (a) : -(a))
  #define CMP_FUNCTION llong_cmp_function
  #define TO_DOUBLE_FUNCTION llong_to_one_double
  #define GENERIC_COPY_FUNCTION copy_llong_to_llong
  #define llong_to_llong convert_self_to_self
  #include "slarith.inc"

/* (long long, unsigned long long) */
  #if defined(HAVE_LONG_LONG)
   #if LLONG_IS_NOT_LONG
    #define llong_ullong_bin_op NULL
    #define GENERIC_A_TYPE long long
    #define GENERIC_B_TYPE unsigned long long
    #define GENERIC_B_TYPE_UNSIGNED 1
    #define GENERIC_C_TYPE unsigned long long
    #define GENERIC_BIT_OPERATIONS 1
    #define TRAP_DIV_ZERO 1
    #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
    #define POW_RESULT_TYPE double
    #define MOD_FUNCTION(a,b) ((a) % (b))
    #define copy_llong_to_ullong copy_llong_to_llong
    #define llong_to_ullong convert_self_to_self
    #include "slarith.inc"
   #else
    #define llong_ullong_bin_op llong_ulong_bin_op
    #define copy_llong_to_ullong copy_llong_to_ulong
    #define llong_to_ullong llong_to_ulong
   #endif /* LLONG_IS_NOT_LONG */
  #endif /* defined(HAVE_LONG_LONG) */

/* (long long, float) */
  #if SLANG_HAS_FLOAT
   #define llong_float_bin_op NULL
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE float
   #define GENERIC_C_TYPE float
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE float
   #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_float
   #define GENERIC_CONVERT_FUNCTION llong_to_float
   #include "slarith.inc"
  #endif /* SLANG_HAS_FLOAT */

/* (long long, double) */
  #if SLANG_HAS_FLOAT
   #define GENERIC_BINARY_FUNCTION llong_double_bin_op
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE double
   #define GENERIC_C_TYPE double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_double
   #define GENERIC_CONVERT_FUNCTION llong_to_double
   #include "slarith.inc"
  #endif /* SLANG_HAS_FLOAT */

/* (long long, long double) */
  #if defined(HAVE_LONG_DOUBLE)
   #define llong_ldouble_bin_op NULL
   #define GENERIC_A_TYPE long long
   #define GENERIC_B_TYPE long double
   #define GENERIC_C_TYPE long double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
   #define POW_RESULT_TYPE long double
   #define MOD_FUNCTION(a,b) fmodl((a),(b))
   #define GENERIC_COPY_FUNCTION copy_llong_to_ldouble
   #define GENERIC_CONVERT_FUNCTION llong_to_ldouble
   #include "slarith.inc"
  #endif /* defined(HAVE_LONG_DOUBLE) */

 #else
  #define llong_char_bin_op long_char_bin_op
  #define llong_char_scalar_bin_op long_char_scalar_bin_op
  #define copy_llong_to_char copy_long_to_char
  #define llong_to_char long_to_char
  #define llong_uchar_bin_op long_uchar_bin_op
  #define llong_uchar_scalar_bin_op long_uchar_scalar_bin_op
  #define copy_llong_to_uchar copy_long_to_uchar
  #define llong_to_uchar long_to_uchar
  #define llong_short_bin_op long_short_bin_op
  #define llong_short_scalar_bin_op long_short_scalar_bin_op
  #define copy_llong_to_short copy_long_to_short
  #define llong_to_short long_to_short
  #define llong_ushort_bin_op long_ushort_bin_op
  #define llong_ushort_scalar_bin_op long_ushort_scalar_bin_op
  #define copy_llong_to_ushort copy_long_to_ushort
  #define llong_to_ushort long_to_ushort
  #define llong_int_bin_op long_int_bin_op
  #define llong_int_scalar_bin_op long_int_scalar_bin_op
  #define copy_llong_to_int copy_long_to_int
  #define llong_to_int long_to_int
  #define llong_uint_bin_op long_uint_bin_op
  #define llong_uint_scalar_bin_op long_uint_scalar_bin_op
  #define copy_llong_to_uint copy_long_to_uint
  #define llong_to_uint long_to_uint
  #define llong_long_bin_op long_long_bin_op
  #define llong_long_scalar_bin_op long_long_scalar_bin_op
  #define copy_llong_to_long copy_long_to_long
  #define llong_to_long long_to_long
  #define llong_ulong_bin_op long_ulong_bin_op
  #define llong_ulong_scalar_bin_op long_ulong_scalar_bin_op
  #define copy_llong_to_ulong copy_long_to_ulong
  #define llong_to_ulong long_to_ulong
  #define llong_llong_bin_op long_long_bin_op
  #define llong_llong_scalar_bin_op long_long_scalar_bin_op
  #define copy_llong_to_llong copy_long_to_long
  #define llong_to_llong long_to_long
  #define llong_ullong_bin_op long_ullong_bin_op
  #define llong_ullong_scalar_bin_op long_ullong_scalar_bin_op
  #define copy_llong_to_ullong copy_long_to_ullong
  #define llong_to_ullong long_to_ullong
  #define llong_float_bin_op long_float_bin_op
  #define llong_float_scalar_bin_op long_float_scalar_bin_op
  #define copy_llong_to_float copy_long_to_float
  #define llong_to_float long_to_float
  #define llong_double_bin_op long_double_bin_op
  #define llong_double_scalar_bin_op long_double_scalar_bin_op
  #define copy_llong_to_double copy_long_to_double
  #define llong_to_double long_to_double
  #define llong_ldouble_bin_op long_ldouble_bin_op
  #define llong_ldouble_scalar_bin_op long_ldouble_scalar_bin_op
  #define copy_llong_to_ldouble copy_long_to_ldouble
  #define llong_to_ldouble long_to_ldouble
  #define llong_unary_op long_unary_op
  #define llong_cmp_function long_cmp_function
  #define llong_to_one_double long_to_one_double
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* unsigned long long */
#if defined(HAVE_LONG_LONG)
 #if LLONG_IS_NOT_LONG
/* (unsigned long long, signed char) */
  #define ullong_char_bin_op NULL
  #define GENERIC_A_TYPE unsigned long long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE signed char
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ullong_to_char
  #define ullong_to_char NULL
  #include "slarith.inc"

/* (unsigned long long, unsigned char) */
  #define ullong_uchar_bin_op NULL
  #define GENERIC_A_TYPE unsigned long long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned char
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ullong_to_uchar
  #define ullong_to_uchar NULL
  #include "slarith.inc"

/* (unsigned long long, short) */
  #if SHORT_IS_NOT_INT
   #define ullong_short_bin_op NULL
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE short
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_short
   #define ullong_to_short NULL
   #include "slarith.inc"
  #else
   #define ullong_short_bin_op ullong_int_bin_op
   #define copy_ullong_to_short copy_ullong_to_int
   #define ullong_to_short ullong_to_int
  #endif /* SHORT_IS_NOT_INT */

/* (unsigned long long, unsigned short) */
  #if SHORT_IS_NOT_INT
   #define ullong_ushort_bin_op NULL
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE unsigned short
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_ushort
   #define ullong_to_ushort NULL
   #include "slarith.inc"
  #else
   #define ullong_ushort_bin_op ullong_uint_bin_op
   #define copy_ullong_to_ushort copy_ullong_to_uint
   #define ullong_to_ushort ullong_to_uint
  #endif /* SHORT_IS_NOT_INT */

/* (unsigned long long, int) */
  #define GENERIC_BINARY_FUNCTION ullong_int_bin_op
  #define GENERIC_A_TYPE unsigned long long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE int
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ullong_to_int
  #define ullong_to_int NULL
  #include "slarith.inc"

/* (unsigned long long, unsigned int) */
  #define ullong_uint_bin_op NULL
  #define GENERIC_A_TYPE unsigned long long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned int
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define GENERIC_COPY_FUNCTION copy_ullong_to_uint
  #define ullong_to_uint NULL
  #include "slarith.inc"

/* (unsigned long long, long) */
  #if LONG_IS_NOT_INT
   #define ullong_long_bin_op NULL
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE long
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_long
   #define ullong_to_long NULL
   #include "slarith.inc"
  #else
   #define ullong_long_bin_op ullong_int_bin_op
   #define copy_ullong_to_long copy_ullong_to_int
   #define ullong_to_long ullong_to_int
  #endif /* LONG_IS_NOT_INT */

/* (unsigned long long, unsigned long) */
  #if LONG_IS_NOT_INT
   #define ullong_ulong_bin_op NULL
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE unsigned long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE unsigned long long
   #define GENERIC_BIT_OPERATIONS 1
   #define TRAP_DIV_ZERO 1
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) ((a) % (b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_ulong
   #define ullong_to_ulong NULL
   #include "slarith.inc"
  #else
   #define ullong_ulong_bin_op ullong_uint_bin_op
   #define copy_ullong_to_ulong copy_ullong_to_uint
   #define ullong_to_ulong ullong_to_uint
  #endif /* LONG_IS_NOT_INT */

/* (unsigned long long, long long) */
  #if defined(HAVE_LONG_LONG)
   #if LLONG_IS_NOT_LONG
    #define ullong_llong_bin_op NULL
    #define GENERIC_A_TYPE unsigned long long
    #define GENERIC_A_TYPE_UNSIGNED 1
    #define GENERIC_B_TYPE long long
    #define GENERIC_C_TYPE unsigned long long
    #define GENERIC_BIT_OPERATIONS 1
    #define TRAP_DIV_ZERO 1
    #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
    #define POW_RESULT_TYPE double
    #define MOD_FUNCTION(a,b) ((a) % (b))
    #define copy_ullong_to_llong copy_llong_to_llong
    #define ullong_to_llong convert_self_to_self
    #include "slarith.inc"
   #else
    #define ullong_llong_bin_op ullong_long_bin_op
    #define copy_ullong_to_llong copy_ullong_to_long
    #define ullong_to_llong ullong_to_long
   #endif /* LLONG_IS_NOT_LONG */
  #endif /* defined(HAVE_LONG_LONG) */

/* (unsigned long long, unsigned long long) */
  #define GENERIC_BINARY_FUNCTION ullong_ullong_bin_op
  #define GENERIC_A_TYPE unsigned long long
  #define GENERIC_A_TYPE_UNSIGNED 1
  #define GENERIC_B_TYPE unsigned long long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE unsigned long long
  #define GENERIC_BIT_OPERATIONS 1
  #define TRAP_DIV_ZERO 1
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) ((a) % (b))
  #define SCALAR_BINARY_FUNCTION ullong_ullong_scalar_bin_op
  #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_llong_obj(SLANG_ULLONG_TYPE, (long long)(a))
  #define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
  #define GENERIC_UNARY_FUNCTION ullong_unary_op
  #define ABS_FUNCTION(a) (a)
  #define CMP_FUNCTION ullong_cmp_function
  #define TO_BINARY_FUNCTION ullong_to_binary
  #define TO_DOUBLE_FUNCTION ullong_to_one_double
  #define copy_ullong_to_ullong copy_llong_to_llong
  #define ullong_to_ullong convert_self_to_self
  #include "slarith.inc"

/* (unsigned long long, float) */
  #if SLANG_HAS_FLOAT
   #define ullong_float_bin_op NULL
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE float
   #define GENERIC_C_TYPE float
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE float
   #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_float
   #define GENERIC_CONVERT_FUNCTION ullong_to_float
   #include "slarith.inc"
  #endif /* SLANG_HAS_FLOAT */

/* (unsigned long long, double) */
  #if SLANG_HAS_FLOAT
   #define GENERIC_BINARY_FUNCTION ullong_double_bin_op
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE double
   #define GENERIC_C_TYPE double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_double
   #define GENERIC_CONVERT_FUNCTION ullong_to_double
   #include "slarith.inc"
  #endif /* SLANG_HAS_FLOAT */

/* (unsigned long long, long double) */
  #if defined(HAVE_LONG_DOUBLE)
   #define ullong_ldouble_bin_op NULL
   #define GENERIC_A_TYPE unsigned long long
   #define GENERIC_A_TYPE_UNSIGNED 1
   #define GENERIC_B_TYPE long double
   #define GENERIC_C_TYPE long double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
   #define POW_RESULT_TYPE long double
   #define MOD_FUNCTION(a,b) fmodl((a),(b))
   #define GENERIC_COPY_FUNCTION copy_ullong_to_ldouble
   #define GENERIC_CONVERT_FUNCTION ullong_to_ldouble
   #include "slarith.inc"
  #endif /* defined(HAVE_LONG_DOUBLE) */

 #else
  #define ullong_char_bin_op ulong_char_bin_op
  #define ullong_char_scalar_bin_op ulong_char_scalar_bin_op
  #define copy_ullong_to_char copy_ulong_to_char
  #define ullong_to_char ulong_to_char
  #define ullong_uchar_bin_op ulong_uchar_bin_op
  #define ullong_uchar_scalar_bin_op ulong_uchar_scalar_bin_op
  #define copy_ullong_to_uchar copy_ulong_to_uchar
  #define ullong_to_uchar ulong_to_uchar
  #define ullong_short_bin_op ulong_short_bin_op
  #define ullong_short_scalar_bin_op ulong_short_scalar_bin_op
  #define copy_ullong_to_short copy_ulong_to_short
  #define ullong_to_short ulong_to_short
  #define ullong_ushort_bin_op ulong_ushort_bin_op
  #define ullong_ushort_scalar_bin_op ulong_ushort_scalar_bin_op
  #define copy_ullong_to_ushort copy_ulong_to_ushort
  #define ullong_to_ushort ulong_to_ushort
  #define ullong_int_bin_op ulong_int_bin_op
  #define ullong_int_scalar_bin_op ulong_int_scalar_bin_op
  #define copy_ullong_to_int copy_ulong_to_int
  #define ullong_to_int ulong_to_int
  #define ullong_uint_bin_op ulong_uint_bin_op
  #define ullong_uint_scalar_bin_op ulong_uint_scalar_bin_op
  #define copy_ullong_to_uint copy_ulong_to_uint
  #define ullong_to_uint ulong_to_uint
  #define ullong_long_bin_op ulong_long_bin_op
  #define ullong_long_scalar_bin_op ulong_long_scalar_bin_op
  #define copy_ullong_to_long copy_ulong_to_long
  #define ullong_to_long ulong_to_long
  #define ullong_ulong_bin_op ulong_ulong_bin_op
  #define ullong_ulong_scalar_bin_op ulong_ulong_scalar_bin_op
  #define copy_ullong_to_ulong copy_ulong_to_ulong
  #define ullong_to_ulong ulong_to_ulong
  #define ullong_llong_bin_op ulong_llong_bin_op
  #define ullong_llong_scalar_bin_op ulong_llong_scalar_bin_op
  #define copy_ullong_to_llong copy_ulong_to_llong
  #define ullong_to_llong ulong_to_llong
  #define ullong_ullong_bin_op ulong_ulong_bin_op
  #define ullong_ullong_scalar_bin_op ulong_ulong_scalar_bin_op
  #define copy_ullong_to_ullong copy_ulong_to_ulong
  #define ullong_to_ullong ulong_to_ulong
  #define ullong_float_bin_op ulong_float_bin_op
  #define ullong_float_scalar_bin_op ulong_float_scalar_bin_op
  #define copy_ullong_to_float copy_ulong_to_float
  #define ullong_to_float ulong_to_float
  #define ullong_double_bin_op ulong_double_bin_op
  #define ullong_double_scalar_bin_op ulong_double_scalar_bin_op
  #define copy_ullong_to_double copy_ulong_to_double
  #define ullong_to_double ulong_to_double
  #define ullong_ldouble_bin_op ulong_ldouble_bin_op
  #define ullong_ldouble_scalar_bin_op ulong_ldouble_scalar_bin_op
  #define copy_ullong_to_ldouble copy_ulong_to_ldouble
  #define ullong_to_ldouble ulong_to_ldouble
  #define ullong_unary_op ulong_unary_op
  #define ullong_cmp_function ulong_cmp_function
  #define ullong_to_binary ulong_to_binary
  #define ullong_to_one_double ulong_to_one_double
 #endif /* LLONG_IS_NOT_LONG */
#endif /* defined(HAVE_LONG_LONG) */

/* float */
#if SLANG_HAS_FLOAT
/* (float, signed char) */
 #define float_char_bin_op NULL
 #define GENERIC_A_TYPE float
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_float_to_char
 #define float_to_char NULL
 #include "slarith.inc"

/* (float, unsigned char) */
 #define float_uchar_bin_op NULL
 #define GENERIC_A_TYPE float
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_float_to_uchar
 #define float_to_uchar NULL
 #include "slarith.inc"

/* (float, short) */
 #if SHORT_IS_NOT_INT
  #define float_short_bin_op NULL
  #define GENERIC_A_TYPE float
  #define GENERIC_B_TYPE short
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_float_to_short
  #define float_to_short NULL
  #include "slarith.inc"
 #else
  #define float_short_bin_op float_int_bin_op
  #define copy_float_to_short copy_float_to_int
  #define float_to_short float_to_int
 #endif /* SHORT_IS_NOT_INT */

/* (float, unsigned short) */
 #if SHORT_IS_NOT_INT
  #define float_ushort_bin_op NULL
  #define GENERIC_A_TYPE float
  #define GENERIC_B_TYPE unsigned short
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_float_to_ushort
  #define float_to_ushort NULL
  #include "slarith.inc"
 #else
  #define float_ushort_bin_op float_uint_bin_op
  #define copy_float_to_ushort copy_float_to_uint
  #define float_to_ushort float_to_uint
 #endif /* SHORT_IS_NOT_INT */

/* (float, int) */
 #define GENERIC_BINARY_FUNCTION float_int_bin_op
 #define GENERIC_A_TYPE float
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_float_to_int
 #define float_to_int NULL
 #include "slarith.inc"

/* (float, unsigned int) */
 #define float_uint_bin_op NULL
 #define GENERIC_A_TYPE float
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_float_to_uint
 #define float_to_uint NULL
 #include "slarith.inc"

/* (float, long) */
 #if LONG_IS_NOT_INT
  #define float_long_bin_op NULL
  #define GENERIC_A_TYPE float
  #define GENERIC_B_TYPE long
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_float_to_long
  #define float_to_long NULL
  #include "slarith.inc"
 #else
  #define float_long_bin_op float_int_bin_op
  #define copy_float_to_long copy_float_to_int
  #define float_to_long float_to_int
 #endif /* LONG_IS_NOT_INT */

/* (float, unsigned long) */
 #if LONG_IS_NOT_INT
  #define float_ulong_bin_op NULL
  #define GENERIC_A_TYPE float
  #define GENERIC_B_TYPE unsigned long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE float
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE float
  #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_float_to_ulong
  #define float_to_ulong NULL
  #include "slarith.inc"
 #else
  #define float_ulong_bin_op float_uint_bin_op
  #define copy_float_to_ulong copy_float_to_uint
  #define float_to_ulong float_to_uint
 #endif /* LONG_IS_NOT_INT */

/* (float, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define float_llong_bin_op NULL
   #define GENERIC_A_TYPE float
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE float
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE float
   #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_float_to_llong
   #define float_to_llong NULL
   #include "slarith.inc"
  #else
   #define float_llong_bin_op float_long_bin_op
   #define copy_float_to_llong copy_float_to_long
   #define float_to_llong float_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (float, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define float_ullong_bin_op NULL
   #define GENERIC_A_TYPE float
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE float
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE float
   #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_float_to_ullong
   #define float_to_ullong NULL
   #include "slarith.inc"
  #else
   #define float_ullong_bin_op float_ulong_bin_op
   #define copy_float_to_ullong copy_float_to_ulong
   #define float_to_ullong float_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (float, float) */
 #define GENERIC_BINARY_FUNCTION float_float_bin_op
 #define GENERIC_A_TYPE float
 #define GENERIC_B_TYPE float
 #define GENERIC_C_TYPE float
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE float
 #define MOD_FUNCTION(a,b) (float)fmod((a),(b))
 #define SCALAR_BINARY_FUNCTION float_float_scalar_bin_op
 #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_float_obj(SLANG_FLOAT_TYPE, (float)(a))
 #define PUSH_POW_OBJ_FUN(a) SLclass_push_float_obj(SLANG_FLOAT_TYPE,(a))
 #define GENERIC_UNARY_FUNCTION float_unary_op
 #define ABS_FUNCTION(a) (float)fabs((double)(a))
 #define CMP_FUNCTION float_cmp_function
 #define TO_DOUBLE_FUNCTION float_to_one_double
 #define GENERIC_COPY_FUNCTION copy_float_to_float
 #define float_to_float convert_self_to_self
 #include "slarith.inc"

/* (float, double) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION float_double_bin_op
  #define GENERIC_A_TYPE float
  #define GENERIC_B_TYPE double
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_float_to_double
  #define GENERIC_CONVERT_FUNCTION float_to_double
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (float, long double) */
 #if defined(HAVE_LONG_DOUBLE)
  #define float_ldouble_bin_op NULL
  #define GENERIC_A_TYPE float
  #define GENERIC_B_TYPE long double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_float_to_ldouble
  #define GENERIC_CONVERT_FUNCTION float_to_ldouble
  #include "slarith.inc"
 #endif /* defined(HAVE_LONG_DOUBLE) */

#endif /* SLANG_HAS_FLOAT */

/* double */
#if SLANG_HAS_FLOAT
/* (double, signed char) */
 #define GENERIC_BINARY_FUNCTION double_char_bin_op
 #define GENERIC_A_TYPE double
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_double_to_char
 #define double_to_char NULL
 #include "slarith.inc"

/* (double, unsigned char) */
 #define GENERIC_BINARY_FUNCTION double_uchar_bin_op
 #define GENERIC_A_TYPE double
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_double_to_uchar
 #define double_to_uchar NULL
 #include "slarith.inc"

/* (double, short) */
 #if SHORT_IS_NOT_INT
  #define GENERIC_BINARY_FUNCTION double_short_bin_op
  #define GENERIC_A_TYPE double
  #define GENERIC_B_TYPE short
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_double_to_short
  #define double_to_short NULL
  #include "slarith.inc"
 #else
  #define double_short_bin_op double_int_bin_op
  #define copy_double_to_short copy_double_to_int
  #define double_to_short double_to_int
 #endif /* SHORT_IS_NOT_INT */

/* (double, unsigned short) */
 #if SHORT_IS_NOT_INT
  #define GENERIC_BINARY_FUNCTION double_ushort_bin_op
  #define GENERIC_A_TYPE double
  #define GENERIC_B_TYPE unsigned short
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_double_to_ushort
  #define double_to_ushort NULL
  #include "slarith.inc"
 #else
  #define double_ushort_bin_op double_uint_bin_op
  #define copy_double_to_ushort copy_double_to_uint
  #define double_to_ushort double_to_uint
 #endif /* SHORT_IS_NOT_INT */

/* (double, int) */
 #define GENERIC_BINARY_FUNCTION double_int_bin_op
 #define GENERIC_A_TYPE double
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_double_to_int
 #define double_to_int NULL
 #include "slarith.inc"

/* (double, unsigned int) */
 #define GENERIC_BINARY_FUNCTION double_uint_bin_op
 #define GENERIC_A_TYPE double
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define GENERIC_COPY_FUNCTION copy_double_to_uint
 #define double_to_uint NULL
 #include "slarith.inc"

/* (double, long) */
 #if LONG_IS_NOT_INT
  #define GENERIC_BINARY_FUNCTION double_long_bin_op
  #define GENERIC_A_TYPE double
  #define GENERIC_B_TYPE long
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_double_to_long
  #define double_to_long NULL
  #include "slarith.inc"
 #else
  #define double_long_bin_op double_int_bin_op
  #define copy_double_to_long copy_double_to_int
  #define double_to_long double_to_int
 #endif /* LONG_IS_NOT_INT */

/* (double, unsigned long) */
 #if LONG_IS_NOT_INT
  #define GENERIC_BINARY_FUNCTION double_ulong_bin_op
  #define GENERIC_A_TYPE double
  #define GENERIC_B_TYPE unsigned long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_double_to_ulong
  #define double_to_ulong NULL
  #include "slarith.inc"
 #else
  #define double_ulong_bin_op double_uint_bin_op
  #define copy_double_to_ulong copy_double_to_uint
  #define double_to_ulong double_to_uint
 #endif /* LONG_IS_NOT_INT */

/* (double, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define GENERIC_BINARY_FUNCTION double_llong_bin_op
   #define GENERIC_A_TYPE double
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_double_to_llong
   #define double_to_llong NULL
   #include "slarith.inc"
  #else
   #define double_llong_bin_op double_long_bin_op
   #define copy_double_to_llong copy_double_to_long
   #define double_to_llong double_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (double, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define GENERIC_BINARY_FUNCTION double_ullong_bin_op
   #define GENERIC_A_TYPE double
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
   #define POW_RESULT_TYPE double
   #define MOD_FUNCTION(a,b) fmod((a),(b))
   #define GENERIC_COPY_FUNCTION copy_double_to_ullong
   #define double_to_ullong NULL
   #include "slarith.inc"
  #else
   #define double_ullong_bin_op double_ulong_bin_op
   #define copy_double_to_ullong copy_double_to_ulong
   #define double_to_ullong double_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (double, float) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION double_float_bin_op
  #define GENERIC_A_TYPE double
  #define GENERIC_B_TYPE float
  #define GENERIC_C_TYPE double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
  #define POW_RESULT_TYPE double
  #define MOD_FUNCTION(a,b) fmod((a),(b))
  #define GENERIC_COPY_FUNCTION copy_double_to_float
  #define double_to_float NULL
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (double, double) */
 #define GENERIC_BINARY_FUNCTION double_double_bin_op
 #define GENERIC_A_TYPE double
 #define GENERIC_B_TYPE double
 #define GENERIC_C_TYPE double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) pow((double)(a),(double)(b))
 #define POW_RESULT_TYPE double
 #define MOD_FUNCTION(a,b) fmod((a),(b))
 #define SCALAR_BINARY_FUNCTION double_double_scalar_bin_op
 #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (double)(a))
 #define PUSH_POW_OBJ_FUN(a) SLclass_push_double_obj(SLANG_DOUBLE_TYPE, (a))
 #define GENERIC_UNARY_FUNCTION double_unary_op
 #define ABS_FUNCTION(a) fabs(a)
 #define CMP_FUNCTION double_cmp_function
 #define TO_DOUBLE_FUNCTION double_to_one_double
 #define GENERIC_COPY_FUNCTION copy_double_to_double
 #define double_to_double convert_self_to_self
 #include "slarith.inc"

/* (double, long double) */
 #if defined(HAVE_LONG_DOUBLE)
  #define GENERIC_BINARY_FUNCTION double_ldouble_bin_op
  #define GENERIC_A_TYPE double
  #define GENERIC_B_TYPE long double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_double_to_ldouble
  #define GENERIC_CONVERT_FUNCTION double_to_ldouble
  #include "slarith.inc"
 #endif /* defined(HAVE_LONG_DOUBLE) */

#endif /* SLANG_HAS_FLOAT */

/* long double */
#if defined(HAVE_LONG_DOUBLE)
/* (long double, signed char) */
 #define ldouble_char_bin_op NULL
 #define GENERIC_A_TYPE long double
 #define GENERIC_B_TYPE signed char
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_ldouble_to_char
 #define ldouble_to_char NULL
 #include "slarith.inc"

/* (long double, unsigned char) */
 #define ldouble_uchar_bin_op NULL
 #define GENERIC_A_TYPE long double
 #define GENERIC_B_TYPE unsigned char
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_ldouble_to_uchar
 #define ldouble_to_uchar NULL
 #include "slarith.inc"

/* (long double, short) */
 #if SHORT_IS_NOT_INT
  #define ldouble_short_bin_op NULL
  #define GENERIC_A_TYPE long double
  #define GENERIC_B_TYPE short
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ldouble_to_short
  #define ldouble_to_short NULL
  #include "slarith.inc"
 #else
  #define ldouble_short_bin_op ldouble_int_bin_op
  #define copy_ldouble_to_short copy_ldouble_to_int
  #define ldouble_to_short ldouble_to_int
 #endif /* SHORT_IS_NOT_INT */

/* (long double, unsigned short) */
 #if SHORT_IS_NOT_INT
  #define ldouble_ushort_bin_op NULL
  #define GENERIC_A_TYPE long double
  #define GENERIC_B_TYPE unsigned short
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ldouble_to_ushort
  #define ldouble_to_ushort NULL
  #include "slarith.inc"
 #else
  #define ldouble_ushort_bin_op ldouble_uint_bin_op
  #define copy_ldouble_to_ushort copy_ldouble_to_uint
  #define ldouble_to_ushort ldouble_to_uint
 #endif /* SHORT_IS_NOT_INT */

/* (long double, int) */
 #define GENERIC_BINARY_FUNCTION ldouble_int_bin_op
 #define GENERIC_A_TYPE long double
 #define GENERIC_B_TYPE int
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_ldouble_to_int
 #define ldouble_to_int NULL
 #include "slarith.inc"

/* (long double, unsigned int) */
 #define ldouble_uint_bin_op NULL
 #define GENERIC_A_TYPE long double
 #define GENERIC_B_TYPE unsigned int
 #define GENERIC_B_TYPE_UNSIGNED 1
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define GENERIC_COPY_FUNCTION copy_ldouble_to_uint
 #define ldouble_to_uint NULL
 #include "slarith.inc"

/* (long double, long) */
 #if LONG_IS_NOT_INT
  #define ldouble_long_bin_op NULL
  #define GENERIC_A_TYPE long double
  #define GENERIC_B_TYPE long
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ldouble_to_long
  #define ldouble_to_long NULL
  #include "slarith.inc"
 #else
  #define ldouble_long_bin_op ldouble_int_bin_op
  #define copy_ldouble_to_long copy_ldouble_to_int
  #define ldouble_to_long ldouble_to_int
 #endif /* LONG_IS_NOT_INT */

/* (long double, unsigned long) */
 #if LONG_IS_NOT_INT
  #define ldouble_ulong_bin_op NULL
  #define GENERIC_A_TYPE long double
  #define GENERIC_B_TYPE unsigned long
  #define GENERIC_B_TYPE_UNSIGNED 1
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ldouble_to_ulong
  #define ldouble_to_ulong NULL
  #include "slarith.inc"
 #else
  #define ldouble_ulong_bin_op ldouble_uint_bin_op
  #define copy_ldouble_to_ulong copy_ldouble_to_uint
  #define ldouble_to_ulong ldouble_to_uint
 #endif /* LONG_IS_NOT_INT */

/* (long double, long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define ldouble_llong_bin_op NULL
   #define GENERIC_A_TYPE long double
   #define GENERIC_B_TYPE long long
   #define GENERIC_C_TYPE long double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
   #define POW_RESULT_TYPE long double
   #define MOD_FUNCTION(a,b) fmodl((a),(b))
   #define GENERIC_COPY_FUNCTION copy_ldouble_to_llong
   #define ldouble_to_llong NULL
   #include "slarith.inc"
  #else
   #define ldouble_llong_bin_op ldouble_long_bin_op
   #define copy_ldouble_to_llong copy_ldouble_to_long
   #define ldouble_to_llong ldouble_to_long
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (long double, unsigned long long) */
 #if defined(HAVE_LONG_LONG)
  #if LLONG_IS_NOT_LONG
   #define ldouble_ullong_bin_op NULL
   #define GENERIC_A_TYPE long double
   #define GENERIC_B_TYPE unsigned long long
   #define GENERIC_B_TYPE_UNSIGNED 1
   #define GENERIC_C_TYPE long double
   #define TRAP_DIV_ZERO 0
   #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
   #define POW_RESULT_TYPE long double
   #define MOD_FUNCTION(a,b) fmodl((a),(b))
   #define GENERIC_COPY_FUNCTION copy_ldouble_to_ullong
   #define ldouble_to_ullong NULL
   #include "slarith.inc"
  #else
   #define ldouble_ullong_bin_op ldouble_ulong_bin_op
   #define copy_ldouble_to_ullong copy_ldouble_to_ulong
   #define ldouble_to_ullong ldouble_to_ulong
  #endif /* LLONG_IS_NOT_LONG */
 #endif /* defined(HAVE_LONG_LONG) */

/* (long double, float) */
 #if SLANG_HAS_FLOAT
  #define ldouble_float_bin_op NULL
  #define GENERIC_A_TYPE long double
  #define GENERIC_B_TYPE float
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ldouble_to_float
  #define ldouble_to_float NULL
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (long double, double) */
 #if SLANG_HAS_FLOAT
  #define GENERIC_BINARY_FUNCTION ldouble_double_bin_op
  #define GENERIC_A_TYPE long double
  #define GENERIC_B_TYPE double
  #define GENERIC_C_TYPE long double
  #define TRAP_DIV_ZERO 0
  #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
  #define POW_RESULT_TYPE long double
  #define MOD_FUNCTION(a,b) fmodl((a),(b))
  #define GENERIC_COPY_FUNCTION copy_ldouble_to_double
  #define ldouble_to_double NULL
  #include "slarith.inc"
 #endif /* SLANG_HAS_FLOAT */

/* (long double, long double) */
 #define GENERIC_BINARY_FUNCTION ldouble_ldouble_bin_op
 #define GENERIC_A_TYPE long double
 #define GENERIC_B_TYPE long double
 #define GENERIC_C_TYPE long double
 #define TRAP_DIV_ZERO 0
 #define POW_FUNCTION(a,b) lpow((long double)(a),(long double)(b))
 #define POW_RESULT_TYPE long double
 #define MOD_FUNCTION(a,b) fmodl((a),(b))
 #define SCALAR_BINARY_FUNCTION ldouble_ldouble_scalar_bin_op
 #define PUSH_SCALAR_OBJ_FUN(a) SLclass_push_ldouble_obj(SLANG_LDOUBLE_TYPE, (long double)(a))
 #define PUSH_POW_OBJ_FUN(a) SLclass_push_ldouble_obj(SLANG_LDOUBLE_TYPE,(a))
 #define GENERIC_UNARY_FUNCTION ldouble_unary_op
 #define ABS_FUNCTION(a) fabsl(a)
 #define CMP_FUNCTION ldouble_cmp_function
 #define TO_DOUBLE_FUNCTION ldouble_to_one_double
 #define GENERIC_COPY_FUNCTION copy_ldouble_to_ldouble
 #define ldouble_to_ldouble convert_self_to_self
 #include "slarith.inc"

#endif /* defined(HAVE_LONG_DOUBLE) */


static Binary_Matrix_Type Binary_Matrix [MAX_ARITHMETIC_TYPES][MAX_ARITHMETIC_TYPES] =
{
/* signed char */
   {
     {(SLFvoid_Star)copy_char_to_char, char_to_char, char_char_bin_op},
     {(SLFvoid_Star)copy_char_to_uchar, char_to_uchar, char_uchar_bin_op},
     {(SLFvoid_Star)copy_char_to_short, char_to_short, char_short_bin_op},
     {(SLFvoid_Star)copy_char_to_ushort, char_to_ushort, char_ushort_bin_op},
     {(SLFvoid_Star)copy_char_to_int, char_to_int, char_int_bin_op},
     {(SLFvoid_Star)copy_char_to_uint, char_to_uint, char_uint_bin_op},
     {(SLFvoid_Star)copy_char_to_long, char_to_long, char_long_bin_op},
     {(SLFvoid_Star)copy_char_to_ulong, char_to_ulong, char_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_char_to_llong, char_to_llong, char_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_char_to_ullong, char_to_ullong, char_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_char_to_float, char_to_float, char_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_char_to_double, char_to_double, char_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_char_to_ldouble, char_to_ldouble, char_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* unsigned char */
   {
     {(SLFvoid_Star)copy_uchar_to_char, uchar_to_char, uchar_char_bin_op},
     {(SLFvoid_Star)copy_uchar_to_uchar, uchar_to_uchar, uchar_uchar_bin_op},
     {(SLFvoid_Star)copy_uchar_to_short, uchar_to_short, uchar_short_bin_op},
     {(SLFvoid_Star)copy_uchar_to_ushort, uchar_to_ushort, uchar_ushort_bin_op},
     {(SLFvoid_Star)copy_uchar_to_int, uchar_to_int, uchar_int_bin_op},
     {(SLFvoid_Star)copy_uchar_to_uint, uchar_to_uint, uchar_uint_bin_op},
     {(SLFvoid_Star)copy_uchar_to_long, uchar_to_long, uchar_long_bin_op},
     {(SLFvoid_Star)copy_uchar_to_ulong, uchar_to_ulong, uchar_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_uchar_to_llong, uchar_to_llong, uchar_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_uchar_to_ullong, uchar_to_ullong, uchar_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_uchar_to_float, uchar_to_float, uchar_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_uchar_to_double, uchar_to_double, uchar_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_uchar_to_ldouble, uchar_to_ldouble, uchar_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* short */
   {
     {(SLFvoid_Star)copy_short_to_char, short_to_char, short_char_bin_op},
     {(SLFvoid_Star)copy_short_to_uchar, short_to_uchar, short_uchar_bin_op},
     {(SLFvoid_Star)copy_short_to_short, short_to_short, short_short_bin_op},
     {(SLFvoid_Star)copy_short_to_ushort, short_to_ushort, short_ushort_bin_op},
     {(SLFvoid_Star)copy_short_to_int, short_to_int, short_int_bin_op},
     {(SLFvoid_Star)copy_short_to_uint, short_to_uint, short_uint_bin_op},
     {(SLFvoid_Star)copy_short_to_long, short_to_long, short_long_bin_op},
     {(SLFvoid_Star)copy_short_to_ulong, short_to_ulong, short_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_short_to_llong, short_to_llong, short_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_short_to_ullong, short_to_ullong, short_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_short_to_float, short_to_float, short_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_short_to_double, short_to_double, short_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_short_to_ldouble, short_to_ldouble, short_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* unsigned short */
   {
     {(SLFvoid_Star)copy_ushort_to_char, ushort_to_char, ushort_char_bin_op},
     {(SLFvoid_Star)copy_ushort_to_uchar, ushort_to_uchar, ushort_uchar_bin_op},
     {(SLFvoid_Star)copy_ushort_to_short, ushort_to_short, ushort_short_bin_op},
     {(SLFvoid_Star)copy_ushort_to_ushort, ushort_to_ushort, ushort_ushort_bin_op},
     {(SLFvoid_Star)copy_ushort_to_int, ushort_to_int, ushort_int_bin_op},
     {(SLFvoid_Star)copy_ushort_to_uint, ushort_to_uint, ushort_uint_bin_op},
     {(SLFvoid_Star)copy_ushort_to_long, ushort_to_long, ushort_long_bin_op},
     {(SLFvoid_Star)copy_ushort_to_ulong, ushort_to_ulong, ushort_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ushort_to_llong, ushort_to_llong, ushort_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ushort_to_ullong, ushort_to_ullong, ushort_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ushort_to_float, ushort_to_float, ushort_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ushort_to_double, ushort_to_double, ushort_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_ushort_to_ldouble, ushort_to_ldouble, ushort_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* int */
   {
     {(SLFvoid_Star)copy_int_to_char, int_to_char, int_char_bin_op},
     {(SLFvoid_Star)copy_int_to_uchar, int_to_uchar, int_uchar_bin_op},
     {(SLFvoid_Star)copy_int_to_short, int_to_short, int_short_bin_op},
     {(SLFvoid_Star)copy_int_to_ushort, int_to_ushort, int_ushort_bin_op},
     {(SLFvoid_Star)copy_int_to_int, int_to_int, int_int_bin_op},
     {(SLFvoid_Star)copy_int_to_uint, int_to_uint, int_uint_bin_op},
     {(SLFvoid_Star)copy_int_to_long, int_to_long, int_long_bin_op},
     {(SLFvoid_Star)copy_int_to_ulong, int_to_ulong, int_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_int_to_llong, int_to_llong, int_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_int_to_ullong, int_to_ullong, int_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_int_to_float, int_to_float, int_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_int_to_double, int_to_double, int_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_int_to_ldouble, int_to_ldouble, int_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* unsigned int */
   {
     {(SLFvoid_Star)copy_uint_to_char, uint_to_char, uint_char_bin_op},
     {(SLFvoid_Star)copy_uint_to_uchar, uint_to_uchar, uint_uchar_bin_op},
     {(SLFvoid_Star)copy_uint_to_short, uint_to_short, uint_short_bin_op},
     {(SLFvoid_Star)copy_uint_to_ushort, uint_to_ushort, uint_ushort_bin_op},
     {(SLFvoid_Star)copy_uint_to_int, uint_to_int, uint_int_bin_op},
     {(SLFvoid_Star)copy_uint_to_uint, uint_to_uint, uint_uint_bin_op},
     {(SLFvoid_Star)copy_uint_to_long, uint_to_long, uint_long_bin_op},
     {(SLFvoid_Star)copy_uint_to_ulong, uint_to_ulong, uint_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_uint_to_llong, uint_to_llong, uint_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_uint_to_ullong, uint_to_ullong, uint_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_uint_to_float, uint_to_float, uint_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_uint_to_double, uint_to_double, uint_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_uint_to_ldouble, uint_to_ldouble, uint_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* long */
   {
     {(SLFvoid_Star)copy_long_to_char, long_to_char, long_char_bin_op},
     {(SLFvoid_Star)copy_long_to_uchar, long_to_uchar, long_uchar_bin_op},
     {(SLFvoid_Star)copy_long_to_short, long_to_short, long_short_bin_op},
     {(SLFvoid_Star)copy_long_to_ushort, long_to_ushort, long_ushort_bin_op},
     {(SLFvoid_Star)copy_long_to_int, long_to_int, long_int_bin_op},
     {(SLFvoid_Star)copy_long_to_uint, long_to_uint, long_uint_bin_op},
     {(SLFvoid_Star)copy_long_to_long, long_to_long, long_long_bin_op},
     {(SLFvoid_Star)copy_long_to_ulong, long_to_ulong, long_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_long_to_llong, long_to_llong, long_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_long_to_ullong, long_to_ullong, long_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_long_to_float, long_to_float, long_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_long_to_double, long_to_double, long_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_long_to_ldouble, long_to_ldouble, long_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* unsigned long */
   {
     {(SLFvoid_Star)copy_ulong_to_char, ulong_to_char, ulong_char_bin_op},
     {(SLFvoid_Star)copy_ulong_to_uchar, ulong_to_uchar, ulong_uchar_bin_op},
     {(SLFvoid_Star)copy_ulong_to_short, ulong_to_short, ulong_short_bin_op},
     {(SLFvoid_Star)copy_ulong_to_ushort, ulong_to_ushort, ulong_ushort_bin_op},
     {(SLFvoid_Star)copy_ulong_to_int, ulong_to_int, ulong_int_bin_op},
     {(SLFvoid_Star)copy_ulong_to_uint, ulong_to_uint, ulong_uint_bin_op},
     {(SLFvoid_Star)copy_ulong_to_long, ulong_to_long, ulong_long_bin_op},
     {(SLFvoid_Star)copy_ulong_to_ulong, ulong_to_ulong, ulong_ulong_bin_op},
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ulong_to_llong, ulong_to_llong, ulong_llong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ulong_to_ullong, ulong_to_ullong, ulong_ullong_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_LONG) */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ulong_to_float, ulong_to_float, ulong_float_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ulong_to_double, ulong_to_double, ulong_double_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* SLANG_HAS_FLOAT */
#if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_ulong_to_ldouble, ulong_to_ldouble, ulong_ldouble_bin_op},
#else
     {NULL, NULL, NULL},
#endif /* defined(HAVE_LONG_DOUBLE) */
   },
/* long long */
#if defined(HAVE_LONG_LONG)
   {
     {(SLFvoid_Star)copy_llong_to_char, llong_to_char, llong_char_bin_op},
     {(SLFvoid_Star)copy_llong_to_uchar, llong_to_uchar, llong_uchar_bin_op},
     {(SLFvoid_Star)copy_llong_to_short, llong_to_short, llong_short_bin_op},
     {(SLFvoid_Star)copy_llong_to_ushort, llong_to_ushort, llong_ushort_bin_op},
     {(SLFvoid_Star)copy_llong_to_int, llong_to_int, llong_int_bin_op},
     {(SLFvoid_Star)copy_llong_to_uint, llong_to_uint, llong_uint_bin_op},
     {(SLFvoid_Star)copy_llong_to_long, llong_to_long, llong_long_bin_op},
     {(SLFvoid_Star)copy_llong_to_ulong, llong_to_ulong, llong_ulong_bin_op},
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_llong_to_llong, llong_to_llong, llong_llong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_llong_to_ullong, llong_to_ullong, llong_ullong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_llong_to_float, llong_to_float, llong_float_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_llong_to_double, llong_to_double, llong_double_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_llong_to_ldouble, llong_to_ldouble, llong_ldouble_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_DOUBLE) */
   },
#else
   {
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
   },
#endif /* defined(HAVE_LONG_LONG) */
/* unsigned long long */
#if defined(HAVE_LONG_LONG)
   {
     {(SLFvoid_Star)copy_ullong_to_char, ullong_to_char, ullong_char_bin_op},
     {(SLFvoid_Star)copy_ullong_to_uchar, ullong_to_uchar, ullong_uchar_bin_op},
     {(SLFvoid_Star)copy_ullong_to_short, ullong_to_short, ullong_short_bin_op},
     {(SLFvoid_Star)copy_ullong_to_ushort, ullong_to_ushort, ullong_ushort_bin_op},
     {(SLFvoid_Star)copy_ullong_to_int, ullong_to_int, ullong_int_bin_op},
     {(SLFvoid_Star)copy_ullong_to_uint, ullong_to_uint, ullong_uint_bin_op},
     {(SLFvoid_Star)copy_ullong_to_long, ullong_to_long, ullong_long_bin_op},
     {(SLFvoid_Star)copy_ullong_to_ulong, ullong_to_ulong, ullong_ulong_bin_op},
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ullong_to_llong, ullong_to_llong, ullong_llong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ullong_to_ullong, ullong_to_ullong, ullong_ullong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ullong_to_float, ullong_to_float, ullong_float_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ullong_to_double, ullong_to_double, ullong_double_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_ullong_to_ldouble, ullong_to_ldouble, ullong_ldouble_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_DOUBLE) */
   },
#else
   {
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
   },
#endif /* defined(HAVE_LONG_LONG) */
/* float */
#if SLANG_HAS_FLOAT
   {
     {(SLFvoid_Star)copy_float_to_char, float_to_char, float_char_bin_op},
     {(SLFvoid_Star)copy_float_to_uchar, float_to_uchar, float_uchar_bin_op},
     {(SLFvoid_Star)copy_float_to_short, float_to_short, float_short_bin_op},
     {(SLFvoid_Star)copy_float_to_ushort, float_to_ushort, float_ushort_bin_op},
     {(SLFvoid_Star)copy_float_to_int, float_to_int, float_int_bin_op},
     {(SLFvoid_Star)copy_float_to_uint, float_to_uint, float_uint_bin_op},
     {(SLFvoid_Star)copy_float_to_long, float_to_long, float_long_bin_op},
     {(SLFvoid_Star)copy_float_to_ulong, float_to_ulong, float_ulong_bin_op},
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_float_to_llong, float_to_llong, float_llong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_float_to_ullong, float_to_ullong, float_ullong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_float_to_float, float_to_float, float_float_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_float_to_double, float_to_double, float_double_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_float_to_ldouble, float_to_ldouble, float_ldouble_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_DOUBLE) */
   },
#else
   {
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
   },
#endif /* SLANG_HAS_FLOAT */
/* double */
#if SLANG_HAS_FLOAT
   {
     {(SLFvoid_Star)copy_double_to_char, double_to_char, double_char_bin_op},
     {(SLFvoid_Star)copy_double_to_uchar, double_to_uchar, double_uchar_bin_op},
     {(SLFvoid_Star)copy_double_to_short, double_to_short, double_short_bin_op},
     {(SLFvoid_Star)copy_double_to_ushort, double_to_ushort, double_ushort_bin_op},
     {(SLFvoid_Star)copy_double_to_int, double_to_int, double_int_bin_op},
     {(SLFvoid_Star)copy_double_to_uint, double_to_uint, double_uint_bin_op},
     {(SLFvoid_Star)copy_double_to_long, double_to_long, double_long_bin_op},
     {(SLFvoid_Star)copy_double_to_ulong, double_to_ulong, double_ulong_bin_op},
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_double_to_llong, double_to_llong, double_llong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_double_to_ullong, double_to_ullong, double_ullong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_double_to_float, double_to_float, double_float_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_double_to_double, double_to_double, double_double_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_double_to_ldouble, double_to_ldouble, double_ldouble_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_DOUBLE) */
   },
#else
   {
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
   },
#endif /* SLANG_HAS_FLOAT */
/* long double */
#if defined(HAVE_LONG_DOUBLE)
   {
     {(SLFvoid_Star)copy_ldouble_to_char, ldouble_to_char, ldouble_char_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_uchar, ldouble_to_uchar, ldouble_uchar_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_short, ldouble_to_short, ldouble_short_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_ushort, ldouble_to_ushort, ldouble_ushort_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_int, ldouble_to_int, ldouble_int_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_uint, ldouble_to_uint, ldouble_uint_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_long, ldouble_to_long, ldouble_long_bin_op},
     {(SLFvoid_Star)copy_ldouble_to_ulong, ldouble_to_ulong, ldouble_ulong_bin_op},
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ldouble_to_llong, ldouble_to_llong, ldouble_llong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if defined(HAVE_LONG_LONG)
     {(SLFvoid_Star)copy_ldouble_to_ullong, ldouble_to_ullong, ldouble_ullong_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ldouble_to_float, ldouble_to_float, ldouble_float_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if SLANG_HAS_FLOAT
     {(SLFvoid_Star)copy_ldouble_to_double, ldouble_to_double, ldouble_double_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if defined(HAVE_LONG_DOUBLE)
     {(SLFvoid_Star)copy_ldouble_to_ldouble, ldouble_to_ldouble, ldouble_ldouble_bin_op},
 #else
     {NULL, NULL, NULL},
 #endif /* defined(HAVE_LONG_DOUBLE) */
   },
#else
   {
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
     {NULL, NULL, NULL},
   },
#endif /* defined(HAVE_LONG_DOUBLE) */
};

#if SLANG_HAS_FLOAT
static To_Double_Fun_Table_Type To_Double_Fun_Table [MAX_ARITHMETIC_TYPES] =
{
   {sizeof(signed char), char_to_one_double},
   {sizeof(unsigned char), uchar_to_one_double},
   {sizeof(short), short_to_one_double},
   {sizeof(unsigned short), ushort_to_one_double},
   {sizeof(int), int_to_one_double},
   {sizeof(unsigned int), uint_to_one_double},
   {sizeof(long), long_to_one_double},
   {sizeof(unsigned long), ulong_to_one_double},
 #if defined(HAVE_LONG_LONG)
   {sizeof(long long), llong_to_one_double},
 #else
   {0, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if defined(HAVE_LONG_LONG)
   {sizeof(unsigned long long), ullong_to_one_double},
 #else
   {0, NULL},
 #endif /* defined(HAVE_LONG_LONG) */
 #if SLANG_HAS_FLOAT
   {sizeof(float), float_to_one_double},
 #else
   {0, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if SLANG_HAS_FLOAT
   {sizeof(double), double_to_one_double},
 #else
   {0, NULL},
 #endif /* SLANG_HAS_FLOAT */
 #if defined(HAVE_LONG_DOUBLE)
   {sizeof(long double), ldouble_to_one_double},
 #else
   {0, NULL},
 #endif /* defined(HAVE_LONG_DOUBLE) */
};
#endif /* SLANG_HAS_FLOAT */

