lib/iec_std_lib.h
changeset 165 83963465b773
parent 163 61f65dd6eeb9
child 180 64334c5a00b1
equal deleted inserted replaced
164:a0679c78143a 165:83963465b773
   954   return (IN << N) | (IN >> 8*sizeof(TYPENAME)-N);\
   954   return (IN << N) | (IN >> 8*sizeof(TYPENAME)-N);\
   955 }
   955 }
   956 /* Call previously defined macro for each ANY_NBIT */
   956 /* Call previously defined macro for each ANY_NBIT */
   957 ANY_NBIT(__rol_)
   957 ANY_NBIT(__rol_)
   958 
   958 
       
   959 /*******************************************/
       
   960 /*     Arithmetic and bitwise functions    */
       
   961 /*******************************************/
       
   962 
       
   963 #define __numeric(fname,TYPENAME, FUNC) \
       
   964 static inline TYPENAME fname##TYPENAME(EN_ENO_PARAMS, TYPENAME op){\
       
   965   TEST_EN(TYPENAME)\
       
   966   return FUNC(op);\
       
   967 }
       
   968 
       
   969   /**************/
       
   970   /*    ABS     */
       
   971   /**************/
       
   972 #define __abs_(TYPENAME) __numeric(__abs_, TYPENAME, abs)
       
   973 ANY_NUM(__abs_)
       
   974 
       
   975   /**************/
       
   976   /*    SQRT    */
       
   977   /**************/
       
   978 #define __sqrt_(TYPENAME) __numeric(__sqrt_, TYPENAME, sqrt)
       
   979 ANY_REAL(__sqrt_)
       
   980 
       
   981   /**************/
       
   982   /*     LN     */
       
   983   /**************/
       
   984 #define __ln_(TYPENAME) __numeric(__ln_, TYPENAME, ln)
       
   985 ANY_REAL(__ln_)
       
   986 
       
   987   /**************/
       
   988   /*     LOG    */
       
   989   /**************/
       
   990 #define __log_(TYPENAME) __numeric(__log_, TYPENAME, log)
       
   991 ANY_REAL(__log_)
       
   992 
       
   993   /**************/
       
   994   /*     EXP    */
       
   995   /**************/
       
   996 #define __exp_(TYPENAME) __numeric(__exp_, TYPENAME, exp)
       
   997 ANY_REAL(__exp_)
       
   998 
       
   999   /**************/
       
  1000   /*     SIN    */
       
  1001   /**************/
       
  1002 #define __sin_(TYPENAME) __numeric(__sin_, TYPENAME, sin)
       
  1003 ANY_REAL(__sin_)
       
  1004 
       
  1005   /**************/
       
  1006   /*     COS    */
       
  1007   /**************/
       
  1008 #define __cos_(TYPENAME) __numeric(__cos_, TYPENAME, cos)
       
  1009 ANY_REAL(__cos_)
       
  1010 
       
  1011   /**************/
       
  1012   /*     TAN    */
       
  1013   /**************/
       
  1014 #define __tan_(TYPENAME) __numeric(__tan_, TYPENAME, tan)
       
  1015 ANY_REAL(__tan_)
       
  1016 
       
  1017   /**************/
       
  1018   /*    ASIN    */
       
  1019   /**************/
       
  1020 #define __asin_(TYPENAME) __numeric(__asin_, TYPENAME, asin)
       
  1021 ANY_REAL(__asin_)
       
  1022 
       
  1023   /**************/
       
  1024   /*    ACOS    */
       
  1025   /**************/
       
  1026 #define __acos_(TYPENAME) __numeric(__acos_, TYPENAME, acos)
       
  1027 ANY_REAL(__acos_)
       
  1028 
       
  1029   /**************/
       
  1030   /*    ATAN    */
       
  1031   /**************/
       
  1032 #define __atan_(TYPENAME) __numeric(__atan_, TYPENAME, atan)
       
  1033 ANY_REAL(__atan_)
       
  1034 
       
  1035   /**************/
       
  1036   /*    EXPT    */
       
  1037   /**************/
       
  1038 #define __expt_(TYPENAME)\
       
  1039 static inline TYPENAME __expt_##TYPENAME(EN_ENO_PARAMS, TYPENAME IN1, REAL IN2){\
       
  1040   TEST_EN(TYPENAME)\
       
  1041   return pow(IN1, IN2);\
       
  1042 }ANY_REAL(__expt_)
       
  1043 
   959 /**************/
  1044 /**************/
   960 /* Selection  */
  1045 /* Selection  */
   961 /**************/
  1046 /**************/
   962 
  1047 
   963   /**************/
  1048   /**************/
  1012   va_list ap;\
  1097   va_list ap;\
  1013   UINT i;\
  1098   UINT i;\
  1014   \
  1099   \
  1015   va_start (ap, op1);         /* Initialize the argument list.  */\
  1100   va_start (ap, op1);         /* Initialize the argument list.  */\
  1016   \
  1101   \
  1017   for (i = 0; i < param_count; i++){\
  1102   for (i = 0; i < param_count - 1; i++){\
  1018     TYPENAME tmp = va_arg (ap, VA_ARGS_##TYPENAME);\
  1103     TYPENAME tmp = va_arg (ap, VA_ARGS_##TYPENAME);\
  1019     op1 = COND ? tmp : op1;\
  1104     op1 = COND ? tmp : op1;\
  1020   }\
  1105   }\
  1021   \
  1106   \
  1022   va_end (ap);                  /* Clean up.  */\
  1107   va_end (ap);                  /* Clean up.  */\
  1035 __max_time(TIME)
  1120 __max_time(TIME)
  1036 
  1121 
  1037     /**************/
  1122     /**************/
  1038     /*     MIN    */
  1123     /*     MIN    */
  1039     /**************/
  1124     /**************/
  1040 #define __min_num(TYPENAME) __extrem_(__min, TYPENAME, op1 > tmp)
  1125 #define __min_num(TYPENAME) __extrem_(__min_, TYPENAME, op1 > tmp)
  1041 ANY_NBIT(__min_num)
  1126 ANY_NBIT(__min_num)
  1042 ANY_NUM(__min_num)
  1127 ANY_NUM(__min_num)
  1043 
  1128 
  1044 __extrem_(__min, STRING, __STR_CMP(op1,tmp) > 0)
  1129 __extrem_(__min_, STRING, __STR_CMP(op1,tmp) > 0)
  1045 
  1130 
  1046 #define __min_time(TYPENAME) __extrem_(__min_, TYPENAME, __TIME_CMP(op1, tmp) > 0)
  1131 #define __min_time(TYPENAME) __extrem_(__min_, TYPENAME, __TIME_CMP(op1, tmp) > 0)
  1047 
  1132 
  1048 /* Call previously defined macro for each concerned type */
  1133 /* Call previously defined macro for each concerned type */
  1049 ANY_DATE(__min_time)
  1134 ANY_DATE(__min_time)