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 --- |