Mostly hacks for multiplying Frequency-type proxies by constants
authorSteve Reinhardt <stever@eecs.umich.edu>
Sun, 17 Apr 2005 04:41:50 +0000 (00:41 -0400)
committerSteve Reinhardt <stever@eecs.umich.edu>
Sun, 17 Apr 2005 04:41:50 +0000 (00:41 -0400)
(plus some small fixes).

python/m5/config.py:
    Hacks to allow multiplication on Frequency/Latency-valued proxies.
    Provide __rmul__ as well as __mul__ on Proxy objects.
test/genini.py:
    Default value for -EFOO should be True not 1 (since 1 is no longer
    convertable to Bool).

--HG--
extra : convert_revision : f8a221fcd9e095fdd7b7db4be0ed0cdcd20074be

python/m5/config.py
test/genini.py

index 74988109bbab2f714740d82b3e7d11442cf9946d..2db2164fc4564b3a9a6537cdcebcc6a1003a42e5 100644 (file)
@@ -177,7 +177,7 @@ class Proxy(object):
 
     # support multiplying proxies by constants
     def __mul__(self, other):
-        if not isinstance(other, int):
+        if not isinstance(other, (int, float)):
             raise TypeError, "Proxy multiplier must be integer"
         if self._multiplier == None:
             self._multiplier = other
@@ -186,13 +186,19 @@ class Proxy(object):
             self._multiplier *= other
         return self
 
+    __rmul__ = __mul__
+
     def _mulcheck(self, result):
         if self._multiplier == None:
             return result
         if not isinstance(result, int):
-            raise TypeError, "Proxy with multiplier resolves to " \
-                  "non-integer value"
-        return result * self._multiplier
+            # this was an error, but for now we'll assume if it's not
+            # an int it must be a Frequency (yuk)
+            result = Frequency._convert(result)
+        # assuming we're dealing with a frequency here, turn it into
+        # a string and give it a 't' suffix so the Frequency._convert
+        # doesn't choke on it later.
+        return ("%d" % int(round((result * self._multiplier)))) + 't'
 
     def unproxy(self, base, ptype):
         obj = base
index b8eda5d46fda5d6efcec2adb1bccda61689943b9..d04f049eaf7df7679fe3e95698f9ccac254afadb 100755 (executable)
@@ -44,7 +44,7 @@ try:
             offset = arg.find('=')
             if offset == -1:
                 name = arg
-                value = '1'
+                value = 'True'
             else:
                 name = arg[:offset]
                 value = arg[offset+1:]