lib/iec_std_lib.h
changeset 156 6b16b7f8b527
parent 149 05ca171a3d57
child 161 a27957e13d42
equal deleted inserted replaced
155:e094c92cf197 156:6b16b7f8b527
   924 /**************/
   924 /**************/
   925 /* Binary ops */
   925 /* Binary ops */
   926 /**************/
   926 /**************/
   927 #define __shift_(fname, TYPENAME, OP)\
   927 #define __shift_(fname, TYPENAME, OP)\
   928 static inline TYPENAME fname##TYPENAME(EN_ENO_PARAMS, TYPENAME IN, USINT N) {\
   928 static inline TYPENAME fname##TYPENAME(EN_ENO_PARAMS, TYPENAME IN, USINT N) {\
   929   TEST_EN_COND(TYPENAME, N < 0)\
   929   TEST_EN(TYPENAME)\
   930   return IN OP N;\
   930   return IN OP N;\
   931 }
   931 }
   932 
   932 
   933 #define __shl_(TYPENAME) __shift_(__shl_, TYPENAME, << )
   933 #define __shl_(TYPENAME) __shift_(__shl_, TYPENAME, << )
   934 /* Call previously defined macro for each ANY_NBIT */
   934 /* Call previously defined macro for each ANY_NBIT */
   938 /* Call previously defined macro for each ANY_NBIT */
   938 /* Call previously defined macro for each ANY_NBIT */
   939 ANY_NBIT(__shr_)
   939 ANY_NBIT(__shr_)
   940 
   940 
   941 #define __ror_(TYPENAME)\
   941 #define __ror_(TYPENAME)\
   942 static inline TYPENAME __ror_##TYPENAME(EN_ENO_PARAMS, TYPENAME IN, USINT N){\
   942 static inline TYPENAME __ror_##TYPENAME(EN_ENO_PARAMS, TYPENAME IN, USINT N){\
   943   TEST_EN_COND(TYPENAME, N < 0)\
   943   TEST_EN(TYPENAME)\
   944   N %= 8*sizeof(TYPENAME);\
   944   N %= 8*sizeof(TYPENAME);\
   945   return (IN >> N) | (IN << 8*sizeof(TYPENAME)-N);\
   945   return (IN >> N) | (IN << 8*sizeof(TYPENAME)-N);\
   946 }
   946 }
   947 /* Call previously defined macro for each ANY_NBIT */
   947 /* Call previously defined macro for each ANY_NBIT */
   948 ANY_NBIT(__ror_)
   948 ANY_NBIT(__ror_)
   949 
   949 
   950 #define __rol_(TYPENAME)\
   950 #define __rol_(TYPENAME)\
   951 static inline TYPENAME __rol_##TYPENAME(EN_ENO_PARAMS, TYPENAME IN, USINT N){\
   951 static inline TYPENAME __rol_##TYPENAME(EN_ENO_PARAMS, TYPENAME IN, USINT N){\
   952   TEST_EN_COND(TYPENAME, N < 0)\
   952   TEST_EN(TYPENAME)\
   953   N %= 8*sizeof(TYPENAME);\
   953   N %= 8*sizeof(TYPENAME);\
   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_)
  1052     /**************/
  1052     /**************/
  1053     /*     MUX    */
  1053     /*     MUX    */
  1054     /**************/
  1054     /**************/
  1055 #define __mux_(TYPENAME) \
  1055 #define __mux_(TYPENAME) \
  1056 static inline TYPENAME __mux_##TYPENAME(EN_ENO_PARAMS, UINT param_count, UINT K, ...){\
  1056 static inline TYPENAME __mux_##TYPENAME(EN_ENO_PARAMS, UINT param_count, UINT K, ...){\
  1057   TEST_EN_COND(TYPENAME, K < 0 || K >= param_count)\
  1057   TEST_EN_COND(TYPENAME, K >= param_count)\
  1058   va_list ap;\
  1058   va_list ap;\
  1059   UINT i;\
  1059   UINT i;\
  1060   TYPENAME tmp = __INIT_##TYPENAME;\
  1060   TYPENAME tmp = __INIT_##TYPENAME;\
  1061   \
  1061   \
  1062   va_start (ap, K);         /* Initialize the argument list.  */\
  1062   va_start (ap, K);         /* Initialize the argument list.  */\