00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef INCLUDED_BRANCH_RESULT_H
00023 #define INCLUDED_BRANCH_RESULT_H
00024
00025 #include <stdio.h>
00026 #include <assert.h>
00027
00028 #include "my_mem_db.h"
00029
00030 #define MAX_NUM_OF_BR 10000
00031
00032 class Branch_Result
00033 {
00034 public:
00035 Branch_Result():_ip(-1),_access(0),_br_incor(0),_br_cor(0),_next(NULL) {}
00036 ~Branch_Result() {}
00037
00038 void reset()
00039 {
00040 _ip=-1;
00041 _access=0;
00042 _br_incor=0;
00043 _br_cor=0;
00044 _next=NULL;
00045 }
00046
00047 void set_ip(int ip) {_ip=ip;}
00048 void inc_access() {_access++;}
00049 void inc_br_incor() {_br_incor++;}
00050 void inc_br_cor() {_br_cor++;}
00051 void set_next(Branch_Result *i) {_next=i;}
00052
00053 int ip() {return _ip;}
00054 int access() {return _access;}
00055 int br_incor() {return _br_incor;}
00056 int br_cor() {return _br_cor;}
00057 Branch_Result *next() {return _next;}
00058
00059 void print(FILE *f)
00060 {
00061 fprintf(f,"_ip=%d _access=%d _br_incor=%d _br_cor=%d miss_rate=%.2f%%",_ip,_access,_br_incor,_br_cor,(double)100*_br_incor/_access);
00062 }
00063
00064 private:
00065 int _ip;
00066 int _access;
00067 int _br_incor;
00068 int _br_cor;
00069
00070 Branch_Result *_next;
00071 };
00072
00073 class Profile_Branch
00074 {
00075 public:
00076 Profile_Branch():_b(0)
00077 {
00078 init();
00079 }
00080 Profile_Branch(int b):_b(b)
00081 {
00082 init();
00083 }
00084
00085 void init()
00086 {
00087 for(int i=0;i<MAX_NUM_OF_BR;i++)
00088 {
00089 _br[i].reset();
00090 }
00091 }
00092
00093 ~Profile_Branch() {}
00094
00095 void record(int ip,int correct);
00096 void print(FILE *f,A_Proc *code_database);
00097
00098 private:
00099 int _b;
00100 Branch_Result _br[MAX_NUM_OF_BR];
00101 };
00102
00103 #endif // INCLUDED_BRANCH_RESULT_H
00104