# No subject

Fri Feb 8 08:55:55 EST 2008

++ip;
--sp;
#define                 CEE_ADD_OP(t, A, B)    BINARY_OP (t, +, (A), =
(B))
BINARY_NUMERIC_SWITCH (CEE_ADD, sp [-1], sp [0]);
BREAK;
CASE (CEE_SUB)
++ip;
--sp;
#define                 CEE_SUB_CHECK(t, A, B) CHECK_NONE
#define                 CEE_SUB_OP(t, A, B)    BINARY_OP (t, -, (A), =
(B))
BINARY_NUMERIC_SWITCH (CEE_SUB, sp [-1], sp [0]);
BREAK;
CASE (CEE_MUL)
++ip;
--sp;
#define                 CEE_MUL_CHECK(t, A, B) CHECK_NONE
#define                 CEE_MUL_OP(t, A, B)    BINARY_OP (t, *, (A), =
(B))
BINARY_NUMERIC_SWITCH (CEE_MUL, sp [-1], sp [0]);
BREAK;
CASE (CEE_DIV)
++ip;
--sp;
#define                 CEE_DIV_CHECK(t, A, B) \
do { \
/* check for division by zero */ \
if (VAL_TYPE (t) !=3D VAL_DOUBLE \
&& READ_SV (t, (B)) =3D=3D (DATA_TYPE (t))0)
\
THROW_DIV_BY_ZERO_EX (ip - 1); \
/* check for result type overflow (MIN/-1)
*/ \
if (VAL_TYPE (t) !=3D VAL_DOUBLE \
&& READ_SV (t, (A)) =3D=3D VAL_MIN (t) \
&& READ_SV (t, (B)) =3D=3D (DATA_TYPE
(t))-1) \
THROW_ARITHMETIC_EX (ip - 1); \
} while (0)
#define                 CEE_DIV_OP(t, A, B) \
do { \
if (VAL_TYPE (t) =3D=3D VAL_DOUBLE \
&& READ_SV (t, (B)) =3D=3D (DATA_TYPE (t))0)
\
/* A / 0.0 =3D> NaN ? */; \
BINARY_OP (t, /, (A), (B)); \
} while (0)

BINARY_NUMERIC_SWITCH (CEE_DIV, sp [-1], sp [0]);
BREAK;