static_inst.hh (2985:c010893f23ae) static_inst.hh (3271:4a871cbe6d84)
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 53 unchanged lines hidden (view full) ---

62class TimingSimpleCPU;
63class InorderCPU;
64class SymbolTable;
65
66namespace Trace {
67 class InstRecord;
68}
69
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 53 unchanged lines hidden (view full) ---

62class TimingSimpleCPU;
63class InorderCPU;
64class SymbolTable;
65
66namespace Trace {
67 class InstRecord;
68}
69
70typedef uint32_t MicroPC;
71
70/**
71 * Base, ISA-independent static instruction class.
72 *
73 * The main component of this class is the vector of flags and the
74 * associated methods for reading them. Any object that can rely
75 * solely on these flags can process instructions without being
76 * recompiled for multiple ISAs.
77 */

--- 56 unchanged lines hidden (view full) ---

134 IsWriteBarrier, ///< Is a write barrier
135
136 IsNonSpeculative, ///< Should not be executed speculatively
137 IsQuiesce, ///< Is a quiesce instruction
138
139 IsIprAccess, ///< Accesses IPRs
140 IsUnverifiable, ///< Can't be verified by a checker
141
72/**
73 * Base, ISA-independent static instruction class.
74 *
75 * The main component of this class is the vector of flags and the
76 * associated methods for reading them. Any object that can rely
77 * solely on these flags can process instructions without being
78 * recompiled for multiple ISAs.
79 */

--- 56 unchanged lines hidden (view full) ---

136 IsWriteBarrier, ///< Is a write barrier
137
138 IsNonSpeculative, ///< Should not be executed speculatively
139 IsQuiesce, ///< Is a quiesce instruction
140
141 IsIprAccess, ///< Accesses IPRs
142 IsUnverifiable, ///< Can't be verified by a checker
143
144 //Flags for microcode
145 IsMacroOp, ///< Is a macroop containing microops
146 IsMicroOp, ///< Is a microop
147 IsDelayedCommit, ///< This microop doesn't commit right away
148 IsLastMicroOp, ///< This microop ends a microop sequence
149 //This flag doesn't do anything yet
150 IsMicroBranch, ///< This microop branches within the microcode for a macroop
151
142 NumFlags
143 };
144
145 /// Flag values for this instruction.
146 std::bitset<NumFlags> flags;
147
148 /// See opClass().
149 OpClass _opClass;

--- 75 unchanged lines hidden (view full) ---

225 bool isSerializeBefore() const { return flags[IsSerializeBefore]; }
226 bool isSerializeAfter() const { return flags[IsSerializeAfter]; }
227 bool isMemBarrier() const { return flags[IsMemBarrier]; }
228 bool isWriteBarrier() const { return flags[IsWriteBarrier]; }
229 bool isNonSpeculative() const { return flags[IsNonSpeculative]; }
230 bool isQuiesce() const { return flags[IsQuiesce]; }
231 bool isIprAccess() const { return flags[IsIprAccess]; }
232 bool isUnverifiable() const { return flags[IsUnverifiable]; }
152 NumFlags
153 };
154
155 /// Flag values for this instruction.
156 std::bitset<NumFlags> flags;
157
158 /// See opClass().
159 OpClass _opClass;

--- 75 unchanged lines hidden (view full) ---

235 bool isSerializeBefore() const { return flags[IsSerializeBefore]; }
236 bool isSerializeAfter() const { return flags[IsSerializeAfter]; }
237 bool isMemBarrier() const { return flags[IsMemBarrier]; }
238 bool isWriteBarrier() const { return flags[IsWriteBarrier]; }
239 bool isNonSpeculative() const { return flags[IsNonSpeculative]; }
240 bool isQuiesce() const { return flags[IsQuiesce]; }
241 bool isIprAccess() const { return flags[IsIprAccess]; }
242 bool isUnverifiable() const { return flags[IsUnverifiable]; }
243 bool isMacroOp() const { return flags[IsMacroOp]; }
244 bool isMicroOp() const { return flags[IsMicroOp]; }
245 bool isDelayedCommit() const { return flags[IsDelayedCommit]; }
246 bool isLastMicroOp() const { return flags[IsLastMicroOp]; }
247 //This flag doesn't do anything yet
248 bool isMicroBranch() const { return flags[IsMicroBranch]; }
233 //@}
234
235 /// Operation class. Used to select appropriate function unit in issue.
236 OpClass opClass() const { return _opClass; }
237};
238
239
240// forward declaration

--- 101 unchanged lines hidden (view full) ---

342
343/**
344 * The execute() signatures are auto-generated by scons based on the
345 * set of CPU models we are compiling in today.
346 */
347#include "cpu/static_inst_exec_sigs.hh"
348
349 /**
249 //@}
250
251 /// Operation class. Used to select appropriate function unit in issue.
252 OpClass opClass() const { return _opClass; }
253};
254
255
256// forward declaration

--- 101 unchanged lines hidden (view full) ---

358
359/**
360 * The execute() signatures are auto-generated by scons based on the
361 * set of CPU models we are compiling in today.
362 */
363#include "cpu/static_inst_exec_sigs.hh"
364
365 /**
366 * Return the microop that goes with a particular micropc. This should
367 * only be defined/used in macroops which will contain microops
368 */
369 virtual StaticInstPtr fetchMicroOp(MicroPC micropc);
370
371 /**
350 * Return the target address for a PC-relative branch.
351 * Invalid if not a PC-relative branch (i.e. isDirectCtrl()
352 * should be true).
353 */
354 virtual Addr branchTarget(Addr branchPC) const
355 {
356 panic("StaticInst::branchTarget() called on instruction "
357 "that is not a PC-relative branch.");

--- 131 unchanged lines hidden ---
372 * Return the target address for a PC-relative branch.
373 * Invalid if not a PC-relative branch (i.e. isDirectCtrl()
374 * should be true).
375 */
376 virtual Addr branchTarget(Addr branchPC) const
377 {
378 panic("StaticInst::branchTarget() called on instruction "
379 "that is not a PC-relative branch.");

--- 131 unchanged lines hidden ---