tests: arch-power: Add 64-bit hello binaries
[gem5.git] / src / sim / core.hh
index fb7f921f47b84bd6866a7447c9273dd4abcd9843..30c8949cca0c7609653dffb08263db9f126c8066 100644 (file)
@@ -1,5 +1,7 @@
 /*
  * Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2013 Advanced Micro Devices, Inc.
+ * Copyright (c) 2013 Mark D. Hill and David A. Wood
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * 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.
- *
- * Authors: Nathan Binkert
- *          Steve Reinhardt
  */
 
 #ifndef __SIM_CORE_HH__
 #define __SIM_CORE_HH__
 
-#include <string>
+/** @file This header provides some core simulator functionality such as time
+ * information, output directory and exit events
+ */
 
-#include "sim/host.hh"
+#include <functional>
+#include <string>
 
-/// The universal simulation clock.
-extern Tick curTick;
-const Tick retryTime = 1000;
+#include "base/types.hh"
+// @todo The next include is not needed in this file, but must be kept
+// until the transitive includes are fixed
+#include "sim/cur_tick.hh"
 
-namespace Clock {
-/// The simulated frequency of curTick.
-extern Tick Frequency;
+/// These are variables that are set based on the simulator frequency
+///@{
+namespace SimClock {
+extern Tick Frequency; ///< The number of ticks that equal one second
 
 namespace Float {
-extern double s;
-extern double ms;
-extern double us;
-extern double ns;
-extern double ps;
 
-extern double Hz;
-extern double kHz;
-extern double MHz;
-extern double GHZ;
-/* namespace Float */ }
+/** These variables equal the number of ticks in the unit of time they're
+ * named after in a double.
+ * @{
+ */
+extern double s;  ///< second
+extern double ms; ///< millisecond
+extern double us; ///< microsecond
+extern double ns; ///< nanosecond
+extern double ps; ///< picosecond
+/** @} */
+
+/** These variables the inverse of above. They're all < 1.
+ * @{
+ */
+extern double Hz;  ///< Hz
+extern double kHz; ///< kHz
+extern double MHz; ///< MHz
+extern double GHz; ///< GHz
+/** @}*/
+} // namespace Float
 
+/** These variables equal the number of ticks in the unit of time they're
+ *  named after in a 64 bit integer.
+ *
+ * @{
+ */
 namespace Int {
-extern Tick s;
-extern Tick ms;
-extern Tick us;
-extern Tick ns;
-extern Tick ps;
-/* namespace Int */ }
-/* namespace Clock */ }
+extern Tick s;  ///< second
+extern Tick ms; ///< millisecond
+extern Tick us; ///< microsecond
+extern Tick ns; ///< nanosecond
+extern Tick ps; ///< picosecond
+/** @} */
+} // namespace Int
+} // namespace SimClock
+/** @} */
+
+void fixClockFrequency();
+bool clockFrequencyFixed();
 
 void setClockFrequency(Tick ticksPerSecond);
+Tick getClockFrequency(); // Ticks per second.
 
-/// Output stream for simulator messages (e.g., cprintf()).  Also used
-/// as default stream for tracing and DPRINTF() messages (unless
-/// overridden with trace:file option).
-extern std::ostream *outputStream;
-void setOutputFile(const std::string &file);
 void setOutputDir(const std::string &dir);
 
-struct Callback;
-void registerExitCallback(Callback *callback);
+void registerExitCallback(const std::function<void()> &callback);
 void doExitCleanup();
 
 #endif /* __SIM_CORE_HH__ */