Deleted Added
sdiff udiff text old ( 11988:665cd5f8b52b ) new ( 11991:d3f19484145f )
full compact
1# Copyright (c) 2012-2014, 2017 ARM Limited
2# All rights reserved.
3#
4# The license below extends only to copyright in the software and shall
5# not be construed as granting a license to any other intellectual
6# property including but not limited to intellectual property relating
7# to a hardware implementation of the functionality of the software
8# licensed hereunder. You may use the software subject to the license

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

101 @classmethod
102 def cxx_predecls(cls, code):
103 pass
104
105 @classmethod
106 def pybind_predecls(cls, code):
107 cls.cxx_predecls(code)
108
109 # default for printing to .ini file is regular string conversion.
110 # will be overridden in some cases
111 def ini_str(self):
112 return str(self)
113
114 # default for printing to .json file is regular string conversion.
115 # will be overridden in some cases, mostly to use native Python
116 # types where there are similar JSON types

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

217
218 def cxx_predecls(self, code):
219 code('#include <cstddef>')
220 self.ptype.cxx_predecls(code)
221
222 def pybind_predecls(self, code):
223 self.ptype.pybind_predecls(code)
224
225 def cxx_decl(self, code):
226 code('${{self.ptype.cxx_type}} ${{self.name}};')
227
228# Vector-valued parameter description. Just like ParamDesc, except
229# that the value is a vector (list) of the specified type instead of a
230# single value.
231
232class VectorParamValue(list):

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

371 tmp_list = [ ParamDesc.convert(self, v) \
372 for v in value.strip('[').strip(']').split(',') ]
373 else:
374 # singleton: coerce to a single-element list
375 tmp_list = [ ParamDesc.convert(self, value) ]
376
377 return VectorParamValue(tmp_list)
378
379 def cxx_predecls(self, code):
380 code('#include <vector>')
381 self.ptype.cxx_predecls(code)
382
383 def pybind_predecls(self, code):
384 code('#include <vector>')
385 self.ptype.pybind_predecls(code)
386

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

429class String(ParamValue,str):
430 cxx_type = 'std::string'
431 cmd_line_settable = True
432
433 @classmethod
434 def cxx_predecls(self, code):
435 code('#include <string>')
436
437 def __call__(self, value):
438 self = value
439 return value
440
441 @classmethod
442 def cxx_ini_parse(self, code, src, dest, ret):
443 code('%s = %s;' % (dest, src))
444 code('%s true;' % ret)

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

552 self.__init__(value)
553 return value
554
555 @classmethod
556 def cxx_predecls(cls, code):
557 # most derived types require this, so we just do it here once
558 code('#include "base/types.hh"')
559
560 def getValue(self):
561 return long(self.value)
562
563class Int(CheckedInt): cxx_type = 'int'; size = 32; unsigned = False
564class Unsigned(CheckedInt): cxx_type = 'unsigned'; size = 32; unsigned = True
565
566class Int8(CheckedInt): cxx_type = 'int8_t'; size = 8; unsigned = False
567class UInt8(CheckedInt): cxx_type = 'uint8_t'; size = 8; unsigned = True

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

758 code('#include "base/addr_range.hh"')
759
760 @classmethod
761 def pybind_predecls(cls, code):
762 Addr.pybind_predecls(code)
763 code('#include "base/addr_range.hh"')
764
765 @classmethod
766 def cxx_ini_predecls(cls, code):
767 code('#include <sstream>')
768
769 @classmethod
770 def cxx_ini_parse(cls, code, src, dest, ret):
771 code('uint64_t _start, _end, _intlvHighBit = 0, _xorHighBit = 0;')
772 code('uint64_t _intlvBits = 0, _intlvMatch = 0;')
773 code('char _sep;')

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

788 code('bool _ret = !_stream.fail() &&'
789 '_stream.eof() && _sep == \':\';')
790 code('if (_ret)')
791 code(' ${dest} = AddrRange(_start, _end, _intlvHighBit, \
792 _xorHighBit, _intlvBits, _intlvMatch);')
793 code('${ret} _ret;')
794
795 def getValue(self):
796 # Go from the Python class to the wrapped C++ class
797 from _m5.range import AddrRange
798
799 return AddrRange(long(self.start), long(self.end),
800 int(self.intlvHighBit), int(self.xorHighBit),
801 int(self.intlvBits), int(self.intlvMatch))
802
803# Boolean parameter type. Python doesn't let you subclass bool, since
804# it doesn't want to let you create multiple instances of True and

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

870 cxx_type = 'Net::EthAddr'
871 ex_str = "00:90:00:00:00:01"
872 cmd_line_settable = True
873
874 @classmethod
875 def cxx_predecls(cls, code):
876 code('#include "base/inet.hh"')
877
878 def __init__(self, value):
879 if value == NextEthernetAddr:
880 self.value = value
881 return
882
883 if not isinstance(value, str):
884 raise TypeError, "expected an ethernet address and didn't get one"
885

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

923 cxx_type = 'Net::IpAddress'
924 ex_str = "127.0.0.1"
925 cmd_line_settable = True
926
927 @classmethod
928 def cxx_predecls(cls, code):
929 code('#include "base/inet.hh"')
930
931 def __init__(self, value):
932 if isinstance(value, IpAddress):
933 self.ip = value.ip
934 else:
935 try:
936 self.ip = convert.toIpAddress(value)
937 except TypeError:
938 self.ip = long(value)

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

975 cxx_type = 'Net::IpNetmask'
976 ex_str = "127.0.0.0/24"
977 cmd_line_settable = True
978
979 @classmethod
980 def cxx_predecls(cls, code):
981 code('#include "base/inet.hh"')
982
983 def __init__(self, *args, **kwargs):
984 def handle_kwarg(self, kwargs, key, elseVal = None):
985 if key in kwargs:
986 setattr(self, key, kwargs.pop(key))
987 elif elseVal:
988 setattr(self, key, elseVal)
989 else:
990 raise TypeError, "No value set for %s" % key

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

1049 cxx_type = 'Net::IpWithPort'
1050 ex_str = "127.0.0.1:80"
1051 cmd_line_settable = True
1052
1053 @classmethod
1054 def cxx_predecls(cls, code):
1055 code('#include "base/inet.hh"')
1056
1057 def __init__(self, *args, **kwargs):
1058 def handle_kwarg(self, kwargs, key, elseVal = None):
1059 if key in kwargs:
1060 setattr(self, key, kwargs.pop(key))
1061 elif elseVal:
1062 setattr(self, key, elseVal)
1063 else:
1064 raise TypeError, "No value set for %s" % key

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

1157
1158class Time(ParamValue):
1159 cxx_type = 'tm'
1160
1161 @classmethod
1162 def cxx_predecls(cls, code):
1163 code('#include <time.h>')
1164
1165 def __init__(self, value):
1166 self.value = parse_time(value)
1167
1168 def __call__(self, value):
1169 self.__init__(value)
1170 return value
1171
1172 def getValue(self):

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

1330 code(';')
1331 code.dedent()
1332
1333 code('}')
1334 code.dedent()
1335 code()
1336 code('static EmbeddedPyBind embed_enum("enum_${name}", module_init);')
1337
1338
1339# Base class for enum types.
1340class Enum(ParamValue):
1341 __metaclass__ = MetaEnum
1342 vals = []
1343 cmd_line_settable = True
1344
1345 # The name of the wrapping namespace or struct
1346 wrapper_name = 'Enums'

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

1361 self.__init__(value)
1362 return value
1363
1364 @classmethod
1365 def cxx_predecls(cls, code):
1366 code('#include "enums/$0.hh"', cls.__name__)
1367
1368 @classmethod
1369 def cxx_ini_parse(cls, code, src, dest, ret):
1370 code('if (false) {')
1371 for elem_name in cls.map.iterkeys():
1372 code('} else if (%s == "%s") {' % (src, elem_name))
1373 code.indent()
1374 code('%s = Enums::%s;' % (dest, elem_name))
1375 code('%s true;' % ret)
1376 code.dedent()

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

1393 cxx_type = 'Tick'
1394 ex_str = "1MHz"
1395 cmd_line_settable = True
1396
1397 @classmethod
1398 def cxx_predecls(cls, code):
1399 code('#include "base/types.hh"')
1400
1401 def __call__(self, value):
1402 self.__init__(value)
1403 return value
1404
1405 def getValue(self):
1406 return long(self.value)
1407
1408 @classmethod

--- 667 unchanged lines hidden ---