00001
00007 #if !defined(INC_HEUR_REGPROFMGR_H)
00008 #define INC_HEUR_REGPROFMGR_H
00009
00010 #include <oski/common.h>
00011 #include <oski/mangle.h>
00012
00013 #if defined(DO_NAME_MANGLING)
00014
00016 #define oski_regprof_t MANGLE_(oski_regprof_t)
00017
00018 #define oski_CreateRegProfile MANGLE_(oski_CreateRegProfile)
00019 #define oski_CopyRegProfile MANGLE_(oski_CopyRegProfile)
00020 #define oski_LoadRegProfile MANGLE_(oski_LoadRegProfile)
00021 #define oski_InitRegProfile MANGLE_(oski_InitRegProfile)
00022 #define oski_ResetRegProfile MANGLE_(oski_ResetRegProfile)
00023 #define oski_ZeroRegProfile MANGLE_(oski_ZeroRegProfile)
00024 #define oski_InvRegProfile MANGLE_(oski_InvRegProfile)
00025 #define oski_ScaleRegProfile MANGLE_(oski_InvRegProfile)
00026 #define oski_MinRegProfile MANGLE_(oski_MinRegProfile)
00027 #define oski_MaxRegProfile MANGLE_(oski_MaxRegProfile)
00028 #define oski_MulEqRegProfile MANGLE_(oski_MulEqRegProfile)
00029 #define oski_AddEqRegProfile MANGLE_(oski_AddEqRegProfile)
00030 #define oski_DestroyRegProfile MANGLE_(oski_DestroyRegProfile)
00031 #define oski_PrintDebugRegProfile MANGLE_(oski_PrintDebugRegProfile)
00032
00033 #define oski_CalcHarmonicMeanRegProfile \
00034 MANGLE_(oski_CalcHarmonicMeanRegProfile)
00035
00036 #endif
00037
00039 typedef struct
00040 {
00041 oski_index_t max_r;
00042 oski_index_t max_c;
00043 double *perf;
00044 } oski_regprof_t;
00045
00051 #define REGPROF_GET(P, r, c) ((P)->perf[((r)-1)*(P)->max_c + (c)-1])
00052
00056 #define REGPROF_MULEQ(P, r, c, a) (REGPROF_GET(P, r, c) *= (a))
00057
00061 #define REGPROF_ADDEQ(P, r, c, a) (REGPROF_GET(P, r, c) += (a))
00062
00068 #define REGPROF_SET(P, r, c, v) (REGPROF_GET(P, r, c) = (v))
00069
00073 oski_regprof_t *oski_CreateRegProfile (oski_index_t max_r,
00074 oski_index_t max_c);
00075
00079 int oski_LoadRegProfile (const char *filename, oski_regprof_t * profile);
00080
00085 void oski_ResetRegProfile (oski_regprof_t * profile);
00086
00091 int oski_InitRegProfile (oski_regprof_t * profile,
00092 oski_index_t max_r, oski_index_t max_c);
00093
00097 void oski_ZeroRegProfile (oski_regprof_t * profile);
00098
00104 void oski_CopyRegProfile (const oski_regprof_t * src, oski_regprof_t * dest);
00105
00109 void oski_InvRegProfile (oski_regprof_t * profile);
00110
00114 void oski_ScaleRegProfile (oski_regprof_t * profile, double alpha);
00115
00123 void oski_MulEqRegProfile (oski_regprof_t * P1, const oski_regprof_t * P2);
00124
00132 void oski_AddEqRegProfile (oski_regprof_t * P1, const oski_regprof_t * P2);
00133
00140 void oski_CalcHarmonicMeanRegProfile (oski_regprof_t * P1, double w1,
00141 const oski_regprof_t * P2, double w2);
00142
00146 void oski_DestroyRegProfile (oski_regprof_t * profile);
00147
00151 double oski_MinRegProfile (const oski_regprof_t * profile,
00152 oski_index_t * p_r, oski_index_t * p_c);
00153
00157 double oski_MaxRegProfile (const oski_regprof_t * profile,
00158 oski_index_t * p_r, oski_index_t * p_c);
00159
00163 void oski_PrintDebugRegProfile (int debug_level, const char *title,
00164 const oski_regprof_t * profile);
00165
00166 #endif
00167
00168