00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef INCLUDED_BRANCH_PROFILE_H
00022 #define INCLUDED_BRANCH_PROFILE_H
00023
00024 #include <lego.H>
00025 #include "node_table.h"
00026
00027 class Branch_Profile
00028 {
00029 public:
00030 Branch_Profile() {}
00031
00032 ~Branch_Profile()
00033 {
00034 }
00035
00036 void doit(legoModule *module_ptr,int interested_opcode);
00037
00038 void lego_write(legoModule *module_ptr,char *input_filename);
00039 void instrument_main(legoModule *module_ptr,legoProc *proc_ptr);
00040 void instrument(legoProc *proc_ptr,Node_Table *node_table,int interested_opcode);
00041 void instrument_from_table(legoProc *proc_ptr,Node_Table *node_table);
00042
00043 void insert_branch_predictor(int index,legoProc *proc_ptr,legoRegion *region_ptr,legoOprd *address_oprd,legoOprd *save_p1_oprd,legoOprd *dest_p1_oprd,legoOprd *save_p2_oprd,legoOprd *dest_p2_oprd,legoOprd *predicate_oprd,legoOp *from_op_ptr,legoOprd *taken_oprd,char *probe_name,attrList *attr_list,legoOprd *dest_ret_oprd);
00044
00045 void open_main_file(unsigned int max_entry);
00046 void open_header_file();
00047 void close_main_file();
00048 void close_header_file();
00049
00050 attrs *write_attribute(legoProc *proc_ptr);
00051
00052 private:
00053 #define BRANCH_MAIN_FILENAME "BRaNCH_PRoFiLe.c"
00054 #define BRANCH_HEADER_FILENAME "BRaNCH_PRoFiLe.h"
00055
00056 FILE *_main_fp;
00057 FILE *_header_fp;
00058 };
00059
00060 #endif //INCLUDED_BRANCH_PROFILE_H