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) |