11 #define INITHISTLENGTH
22 #ifndef INITHISTLENGTH
28 #define HISTBUFFERLENGTH 4096
36 int m[
NHIST+1]={0, 0, 10, 16, 27, 44, 60, 96, 109, 219, 449, 487, 714, 1313, 2146, 3881};
52 void init(uint64_t original_length, uint64_t compressed_length)
163 #ifndef INITHISTLENGTH
168 for (
int i = 3; i <=
NHIST; i++) {
171 for (
int i = 2; i <=
NHIST; i++)
172 if (
m[i] <=
m[i - 1] + 2)
175 #ifndef SHARINGTABLES
176 for (
int i = 2; i <=
NHIST; i++) {
186 for (
int i = 2; i <= 4; i++)
188 for (
int i = 5; i <= 13; i++)
190 for (
int i = 14; i <=
NHIST; i++)
201 for (
int i = 2; i <=
STEP1-1; i++)
207 for (
int i =
STEP2+1; i <= 15; i++)
215 for (
int i = 1; i <=
STEP1-1; i++) {
225 for (
int i =
STEP2; i <= 15; i++) {
232 for (
int i = 1; i <=
NHIST; i++) {
238 for (
int i = 1; i <=
NHIST; i++) {
245 #ifndef SHARINGTABLES
246 for (
int i = 0; i <=
NHIST; i++) {
256 fprintf(stdout,
"history lengths: " );
258 for (
int i = 0; i <=
NHIST; i++) {
259 fprintf (stdout,
"%d ",
m[i]);
261 fprintf (stdout,
"\n");
262 #ifndef SHARINGTABLES
263 for (
int i = 0; i <=
NHIST; i++) {
264 STORAGESIZE += (1 <<
logg[i]) * (25 + 2 + (i != 0) +
TB[i]);
265 NBENTRY += (1 <<
logg[i]);
270 STORAGESIZE += (1 << (
logg[0])) * (25 + 2 +
TB[0]);
271 STORAGESIZE += (1 << (
logg[1])) * (25 + 2 + 1 +
TB[1]);
277 fprintf(stdout,
"ITTAGE tables: %d bytes;", STORAGESIZE/8);
278 fprintf(stdout,
"Region table: %d bytes;", 15*128/8);
279 STORAGESIZE += 15 * 128;
281 fprintf(stdout,
"IUM: %d bytes;", (1 <<
LOGSPEC) * 48/8);
282 STORAGESIZE += (1 <<
LOGSPEC) * 48;
285 fprintf (stdout,
"Total Storage= %d bytes;\n", STORAGESIZE / 8);
295 index = pc ^ (pc >> (abs (
logg[bank] - bank) + 1)) ^
ch_i[bank].
comp;
296 return (index & ((1 << (
logg[bank])) - 1));
302 uint16_t tag = pc ^ ch0[bank].
comp ^ (ch1[bank].
comp << 1);
303 return (tag & ((1 <<
TB[bank]) - 1));
325 for (
int i =
NHIST; i >= 0; i--) {
332 for (
int i =
HitBank - 1; i >= 0; i--) {
358 for (
int i = 0; i <=
NHIST; i++) {
363 for (
int i = 2; i <=
STEP1-1; i++)
364 GI[i] = ((
GI[1] & 7) ^ (i - 1)) + (
GI[i] << 3);
369 for (
int i =
STEP2+1; i <= 15; i++)
374 GI[0] = pc & ((1 <<
logg[0]) - 1);
423 uint64_t PATH = ((target ^ (target >> 3) ^ pc));
427 for (
int t = 0; t < maxt; t++) {
436 for (
int i = 1; i <=
NHIST; i++) {
456 for (
int i = 0; i <=
NHIST; i++) {
461 for (
int i = 2; i <=
STEP1-1; i++)
462 GI[i] = ((
GI[1] & 7) ^ (i - 1)) + (
GI[i] << 3);
467 for (
int i =
STEP2+1; i <= 15; i++)
471 GI[0] = pc & ((1 <<
logg[0]) - 1);
482 if (PseudoNewAlloc) {
501 uint64_t Region = (target >> 18);
502 int64_t PtRegion = -1;
504 for (
int i = 0; i < 128; i++) {
505 if (
rtable[i].region == Region) {
511 if (PtRegion == -1) {
513 for (
int i = 0; i < 128; i++) {
523 if (PtRegion == -1) {
524 for (
int i = 0; i < 128; i++) {
532 uint64_t IndTarget = (target & ((1 << 18) - 1)) + (PtRegion << 18);
543 for (
int i = X; i <=
NHIST; i += 1) {
564 for (
int i = 0; i <=
NHIST; i++)
565 for (
int j = 0; j < (1 <<
logg[i]); j++)
576 uint64_t Region = (target >> 18);
577 int64_t PtRegion = -1;
579 for (
int i = 0; i < 128; i++)
580 if (
rtable[i].region == Region) {
584 if (PtRegion == -1) {
585 for (
int i = 0; i < 128; i++)
594 if (PtRegion == -1) {
595 for (
int i = 0; i < 128; i++)
602 uint64_t IndTarget = (target & ((1 << 18) - 1)) + (PtRegion << 18);
Definition: ittage_64KB.h:41
void update(uint8_t *h, uint64_t PT)
Definition: ittage_64KB.h:60
folded_history()
Definition: ittage_64KB.h:50
uint64_t comp
Definition: ittage_64KB.h:45
void init(uint64_t original_length, uint64_t compressed_length)
Definition: ittage_64KB.h:52
uint64_t CLENGTH
Definition: ittage_64KB.h:46
uint64_t OLENGTH
Definition: ittage_64KB.h:47
uint64_t OUTPOINT
Definition: ittage_64KB.h:48
Definition: ittage_64KB.h:82
uint64_t target
Definition: ittage_64KB.h:86
gentry()
Definition: ittage_64KB.h:88
int8_t u
Definition: ittage_64KB.h:87
uint16_t tag
Definition: ittage_64KB.h:85
int8_t ctr
Definition: ittage_64KB.h:84
Definition: ittage_64KB.h:98
int8_t u
Definition: ittage_64KB.h:101
regionentry()
Definition: ittage_64KB.h:102
uint64_t region
Definition: ittage_64KB.h:100
Definition: ittage_64KB.h:72
uint64_t tag
Definition: ittage_64KB.h:74
uint64_t pred
Definition: ittage_64KB.h:75
specentry()
Definition: ittage_64KB.h:76
Definition: ittage_64KB.h:34
int HitBank
Definition: ittage_64KB.h:139
uint64_t alttaken
Definition: ittage_64KB.h:137
int Seed
Definition: ittage_64KB.h:143
int8_t USE_ALT_ON_NA
Definition: ittage_64KB.h:109
folded_history Retire_ch_i[NHIST+1]
Definition: ittage_64KB.h:121
void update_brindirect(uint64_t pc, uint8_t branch_type, uint8_t taken, uint64_t target)
Definition: ittage_64KB.h:448
uint64_t Retire_ptghist
Definition: ittage_64KB.h:120
int PtIumRetire
Definition: ittage_64KB.h:146
uint64_t Fetch_ptghist
Definition: ittage_64KB.h:115
uint64_t GTAG[NHIST+1]
Definition: ittage_64KB.h:133
int logg[NHIST+1]
Definition: ittage_64KB.h:131
uint8_t ghist[HISTBUFFERLENGTH]
Definition: ittage_64KB.h:113
my_predictor(void)
Definition: ittage_64KB.h:152
int PtIumFetch
Definition: ittage_64KB.h:147
int AltBank
Definition: ittage_64KB.h:140
uint64_t LongestMatchPred
Definition: ittage_64KB.h:141
folded_history Fetch_ch_i[NHIST+1]
Definition: ittage_64KB.h:116
int TB[NHIST+1]
Definition: ittage_64KB.h:130
int TICK
Definition: ittage_64KB.h:37
void HistoryUpdate(uint64_t pc, uint8_t branch_type, uint8_t taken, uint64_t target, uint64_t &Y, folded_history *H, folded_history *G, folded_history *J)
Definition: ittage_64KB.h:417
void Tagepred()
Definition: ittage_64KB.h:319
int m[NHIST+1]
Definition: ittage_64KB.h:36
int GI[NHIST+1]
Definition: ittage_64KB.h:132
uint64_t gindex(uint64_t pc, int bank, folded_history *ch_i)
Definition: ittage_64KB.h:292
int MYRANDOM()
Definition: ittage_64KB.h:309
uint64_t tage_pred
Definition: ittage_64KB.h:138
uint64_t pred_taken
Definition: ittage_64KB.h:136
uint64_t PredSpecIUM(uint64_t pred)
Definition: ittage_64KB.h:384
specentry * IUMPred
Definition: ittage_64KB.h:148
regionentry * rtable
Definition: ittage_64KB.h:127
uint64_t predict_brindirect(uint64_t pc)
Definition: ittage_64KB.h:355
void UpdateSpecIUM(uint64_t target)
Definition: ittage_64KB.h:398
uint16_t gtag(uint64_t pc, int bank, folded_history *ch0, folded_history *ch1)
Definition: ittage_64KB.h:300
gentry * gtable[NHIST+1]
Definition: ittage_64KB.h:126
void fetch_history_update(uint64_t pc, uint8_t branch_type, uint8_t taken, uint64_t target)
Definition: ittage_64KB.h:409
folded_history Retire_ch_t[2][NHIST+1]
Definition: ittage_64KB.h:122
folded_history Fetch_ch_t[2][NHIST+1]
Definition: ittage_64KB.h:117
#define MINHIST
Definition: hashed_perceptron.cc:65
#define MAXHIST
Definition: hashed_perceptron.cc:61
branch_type
Definition: instruction.h:30
@ BRANCH_INDIRECT_CALL
Definition: instruction.h:36
@ BRANCH_DIRECT_CALL
Definition: instruction.h:35
@ BRANCH_CONDITIONAL
Definition: instruction.h:34
@ BRANCH_INDIRECT
Definition: instruction.h:33
#define HISTBUFFERLENGTH
Definition: ittage_64KB.h:28
#define LOGSPEC
Definition: ittage_64KB.h:31
#define LOGG
Definition: ittage_64KB.h:17
#define LOGTICK
Definition: ittage_64KB.h:27
#define NHIST
Definition: ittage_64KB.h:9
#define TBITS
Definition: tage_sc_l.cc:240
folded_history ch_i[NHIST+1]
Definition: tage_sc_l.cc:274