forked from s-kanev/XIOSim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzesto-commit.h
131 lines (119 loc) · 6.06 KB
/
zesto-commit.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef ZESTO_COMMIT_INCLUDED
#define ZESTO_COMMIT_INCLUDED
/* zesto-commit.h - Zesto commit stage class
*
* Copyright © 2009 by Gabriel H. Loh and the Georgia Tech Research Corporation
* Atlanta, GA 30332-0415
* All Rights Reserved.
*
* THIS IS A LEGAL DOCUMENT BY DOWNLOADING ZESTO, YOU ARE AGREEING TO THESE
* TERMS AND CONDITIONS.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* NOTE: Portions of this release are directly derived from the SimpleScalar
* Toolset (property of SimpleScalar LLC), and as such, those portions are
* bound by the corresponding legal terms and conditions. All source files
* derived directly or in part from the SimpleScalar Toolset bear the original
* user agreement.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the Georgia Tech Research Corporation nor the names of
* its contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* 4. Zesto is distributed freely for commercial and non-commercial use. Note,
* however, that the portions derived from the SimpleScalar Toolset are bound
* by the terms and agreements set forth by SimpleScalar, LLC. In particular:
*
* "Nonprofit and noncommercial use is encouraged. SimpleScalar may be
* downloaded, compiled, executed, copied, and modified solely for nonprofit,
* educational, noncommercial research, and noncommercial scholarship
* purposes provided that this notice in its entirety accompanies all copies.
* Copies of the modified software can be delivered to persons who use it
* solely for nonprofit, educational, noncommercial research, and
* noncommercial scholarship purposes provided that this notice in its
* entirety accompanies all copies."
*
* User is responsible for reading and adhering to the terms set forth by
* SimpleScalar, LLC where appropriate.
*
* 5. No nonprofit user may place any restrictions on the use of this software,
* including as modified by the user, by any other authorized user.
*
* 6. Noncommercial and nonprofit users may distribute copies of Zesto in
* compiled or executable form as set forth in Section 2, provided that either:
* (A) it is accompanied by the corresponding machine-readable source code, or
* (B) it is accompanied by a written offer, with no time limit, to give anyone
* a machine-readable copy of the corresponding source code in return for
* reimbursement of the cost of distribution. This written offer must permit
* verbatim duplication by anyone, or (C) it is distributed by someone who
* received only the executable form, and is accompanied by a copy of the
* written offer of source code.
*
* 7. Zesto was developed by Gabriel H. Loh, Ph.D. US Mail: 266 Ferst Drive,
* Georgia Institute of Technology, Atlanta, GA 30332-0765
*/
class core_commit_t
{
enum commit_stall_t {CSTALL_NONE, /* no stall */
CSTALL_NOT_READY, /* oldest inst not done (no uops finished) */
CSTALL_PARTIAL, /* oldest inst not done (but some uops finished) */
CSTALL_EMPTY, /* ROB is empty, nothing to commit */
CSTALL_JECLEAR_INFLIGHT, /* Mop is done, but its jeclear hasn't been handled yet */
CSTALL_MAX_BRANCHES, /* exceeded maximum number of branches committed per cycle */
CSTALL_num
};
public:
core_commit_t(void);
virtual ~core_commit_t();
virtual void reg_stats(struct stat_sdb_t * const sdb) = 0;
virtual void update_occupancy(void) = 0;
virtual void step(void) = 0;
virtual void IO_step(void) = 0;
virtual void recover(const struct Mop_t * const Mop) = 0;
virtual void recover(void) = 0;
/* ROB management functions
ROB_available() returns true if a ROB entry is available
ROB_empty() returns true when there are no uops in the ROB
ROB_insert() inserts a uop into the ROB
ROB_fuse_insert() adds a fused uop body to the uop head
(and any previously fuse_inserted uops) to an already
allocated ROB entry (i.e., that alloc'd to the head) */
virtual bool ROB_available(void) = 0;
virtual bool ROB_empty(void) = 0;
virtual bool pipe_empty(void) = 0;
virtual void ROB_insert(struct uop_t * const uop) = 0;
virtual void ROB_fuse_insert(struct uop_t * const uop) = 0;
virtual bool pre_commit_available(void) = 0;
virtual void pre_commit_insert(struct uop_t * const uop) = 0;
virtual void pre_commit_fused_insert(struct uop_t * const uop) = 0;
virtual void pre_commit_step(void) = 0;
virtual void pre_commit_recover(struct Mop_t * const Mop) = 0;
virtual int squash_uop(struct uop_t * const uop) = 0;
bool deadlocked;
static const int deadlock_threshold = 50000;
protected:
struct core_t * core;
};
class core_commit_t * commit_create(const char * commit_opt_string, struct core_t * core);
#endif /* ZESTO_COMMIT_INCLUDED */