diff -r a0679c78143a -r 83963465b773 lib/iec_std_lib.h --- a/lib/iec_std_lib.h Fri Jan 09 17:05:24 2009 +0100 +++ b/lib/iec_std_lib.h Wed Jan 14 19:47:41 2009 +0100 @@ -956,6 +956,91 @@ /* Call previously defined macro for each ANY_NBIT */ ANY_NBIT(__rol_) +/*******************************************/ +/* Arithmetic and bitwise functions */ +/*******************************************/ + +#define __numeric(fname,TYPENAME, FUNC) \ +static inline TYPENAME fname##TYPENAME(EN_ENO_PARAMS, TYPENAME op){\ + TEST_EN(TYPENAME)\ + return FUNC(op);\ +} + + /**************/ + /* ABS */ + /**************/ +#define __abs_(TYPENAME) __numeric(__abs_, TYPENAME, abs) +ANY_NUM(__abs_) + + /**************/ + /* SQRT */ + /**************/ +#define __sqrt_(TYPENAME) __numeric(__sqrt_, TYPENAME, sqrt) +ANY_REAL(__sqrt_) + + /**************/ + /* LN */ + /**************/ +#define __ln_(TYPENAME) __numeric(__ln_, TYPENAME, ln) +ANY_REAL(__ln_) + + /**************/ + /* LOG */ + /**************/ +#define __log_(TYPENAME) __numeric(__log_, TYPENAME, log) +ANY_REAL(__log_) + + /**************/ + /* EXP */ + /**************/ +#define __exp_(TYPENAME) __numeric(__exp_, TYPENAME, exp) +ANY_REAL(__exp_) + + /**************/ + /* SIN */ + /**************/ +#define __sin_(TYPENAME) __numeric(__sin_, TYPENAME, sin) +ANY_REAL(__sin_) + + /**************/ + /* COS */ + /**************/ +#define __cos_(TYPENAME) __numeric(__cos_, TYPENAME, cos) +ANY_REAL(__cos_) + + /**************/ + /* TAN */ + /**************/ +#define __tan_(TYPENAME) __numeric(__tan_, TYPENAME, tan) +ANY_REAL(__tan_) + + /**************/ + /* ASIN */ + /**************/ +#define __asin_(TYPENAME) __numeric(__asin_, TYPENAME, asin) +ANY_REAL(__asin_) + + /**************/ + /* ACOS */ + /**************/ +#define __acos_(TYPENAME) __numeric(__acos_, TYPENAME, acos) +ANY_REAL(__acos_) + + /**************/ + /* ATAN */ + /**************/ +#define __atan_(TYPENAME) __numeric(__atan_, TYPENAME, atan) +ANY_REAL(__atan_) + + /**************/ + /* EXPT */ + /**************/ +#define __expt_(TYPENAME)\ +static inline TYPENAME __expt_##TYPENAME(EN_ENO_PARAMS, TYPENAME IN1, REAL IN2){\ + TEST_EN(TYPENAME)\ + return pow(IN1, IN2);\ +}ANY_REAL(__expt_) + /**************/ /* Selection */ /**************/ @@ -1014,7 +1099,7 @@ \ va_start (ap, op1); /* Initialize the argument list. */\ \ - for (i = 0; i < param_count; i++){\ + for (i = 0; i < param_count - 1; i++){\ TYPENAME tmp = va_arg (ap, VA_ARGS_##TYPENAME);\ op1 = COND ? tmp : op1;\ }\ @@ -1037,11 +1122,11 @@ /**************/ /* MIN */ /**************/ -#define __min_num(TYPENAME) __extrem_(__min, TYPENAME, op1 > tmp) +#define __min_num(TYPENAME) __extrem_(__min_, TYPENAME, op1 > tmp) ANY_NBIT(__min_num) ANY_NUM(__min_num) -__extrem_(__min, STRING, __STR_CMP(op1,tmp) > 0) +__extrem_(__min_, STRING, __STR_CMP(op1,tmp) > 0) #define __min_time(TYPENAME) __extrem_(__min_, TYPENAME, __TIME_CMP(op1, tmp) > 0)