lib/iec_std_lib.h
changeset 165 83963465b773
parent 163 61f65dd6eeb9
child 180 64334c5a00b1
--- 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)