systemc: Implement a few more member functions for sc_time.
authorGabe Black <gabeblack@google.com>
Tue, 7 Aug 2018 11:49:04 +0000 (04:49 -0700)
committerGabe Black <gabeblack@google.com>
Thu, 20 Sep 2018 01:40:58 +0000 (01:40 +0000)
Change-Id: I40a7fb278f2a0ec4124589e02e4441c1866c86ea
Reviewed-on: https://gem5-review.googlesource.com/12071
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/sc_time.cc

index 93150aacee081462f3aa94133ce0732e4717d4a6..0a52a6a1395a35e8c8df8d6a93903d3f569987a7 100644 (file)
@@ -176,8 +176,7 @@ sc_time::value() const
 double
 sc_time::to_double() const
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
-    return 0.0;
+    return static_cast<double>(val);
 }
 double
 sc_time::to_seconds() const
@@ -244,16 +243,16 @@ sc_time::operator -= (const sc_time &t)
 }
 
 sc_time &
-sc_time::operator *= (double)
+sc_time::operator *= (double d)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    val = static_cast<int64_t>(static_cast<double>(val) * d + 0.5);
     return *this;
 }
 
 sc_time &
-sc_time::operator /= (double)
+sc_time::operator /= (double d)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    val = static_cast<int64_t>(static_cast<double>(val) / d + 0.5);
     return *this;
 }
 
@@ -310,31 +309,30 @@ operator - (const sc_time &a, const sc_time &b)
 }
 
 const sc_time
-operator * (const sc_time &, double)
+operator * (const sc_time &t, double d)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
-    return sc_time();
+    volatile double tmp = static_cast<double>(t.value()) * d + 0.5;
+    return sc_time::from_value(static_cast<int64_t>(tmp));
 }
 
 const sc_time
-operator * (double, const sc_time &)
+operator * (double d, const sc_time &t)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
-    return sc_time();
+    volatile double tmp = d * static_cast<double>(t.value()) + 0.5;
+    return sc_time::from_value(static_cast<int64_t>(tmp));
 }
 
 const sc_time
-operator / (const sc_time &, double)
+operator / (const sc_time &t, double d)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
-    return sc_time();
+    volatile double tmp = static_cast<double>(t.value()) / d + 0.5;
+    return sc_time::from_value(static_cast<int64_t>(tmp));
 }
 
 double
-operator / (const sc_time &, const sc_time &)
+operator / (const sc_time &t1, const sc_time &t2)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
-    return 0.0;
+    return t1.to_double() / t2.to_double();
 }
 
 std::ostream &