params.py (11988:665cd5f8b52b) params.py (11991:d3f19484145f)
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
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 # Generate the code needed as a prerequisite for including a
110 # reference to a C++ object of this type in a SWIG .i file.
111 # Typically generates one or more %import or %include statements.
112 @classmethod
113 def swig_predecls(cls, code):
114 pass
115
116 # default for printing to .ini file is regular string conversion.
117 # will be overridden in some cases
118 def ini_str(self):
119 return str(self)
120
121 # default for printing to .json file is regular string conversion.
122 # will be overridden in some cases, mostly to use native Python
123 # types where there are similar JSON types

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

224
225 def cxx_predecls(self, code):
226 code('#include <cstddef>')
227 self.ptype.cxx_predecls(code)
228
229 def pybind_predecls(self, code):
230 self.ptype.pybind_predecls(code)
231
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
232 def swig_predecls(self, code):
233 self.ptype.swig_predecls(code)
234
235 def cxx_decl(self, code):
236 code('${{self.ptype.cxx_type}} ${{self.name}};')
237
238# Vector-valued parameter description. Just like ParamDesc, except
239# that the value is a vector (list) of the specified type instead of a
240# single value.
241
242class VectorParamValue(list):

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

381 tmp_list = [ ParamDesc.convert(self, v) \
382 for v in value.strip('[').strip(']').split(',') ]
383 else:
384 # singleton: coerce to a single-element list
385 tmp_list = [ ParamDesc.convert(self, value) ]
386
387 return VectorParamValue(tmp_list)
388
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
389 def swig_module_name(self):
390 return "%s_vector" % self.ptype_str
391
392 def swig_predecls(self, code):
393 code('%import "${{self.swig_module_name()}}.i"')
394
395 def swig_decl(self, code):
396 code('%module(package="_m5") ${{self.swig_module_name()}}')
397 code('%{')
398 self.ptype.cxx_predecls(code)
399 code('%}')
400 code()
401 # Make sure the SWIGPY_SLICE_ARG is defined through this inclusion
402 code('%include "std_container.i"')
403 code()
404 self.ptype.swig_predecls(code)
405 code()
406 code('%include "std_vector.i"')
407 code()
408
409 ptype = self.ptype_str
410 cxx_type = self.ptype.cxx_type
411
412 code('%template(vector_$ptype) std::vector< $cxx_type >;')
413
414 def cxx_predecls(self, code):
415 code('#include <vector>')
416 self.ptype.cxx_predecls(code)
417
418 def pybind_predecls(self, code):
419 code('#include <vector>')
420 self.ptype.pybind_predecls(code)
421

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

464class String(ParamValue,str):
465 cxx_type = 'std::string'
466 cmd_line_settable = True
467
468 @classmethod
469 def cxx_predecls(self, code):
470 code('#include <string>')
471
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
472 @classmethod
473 def swig_predecls(cls, code):
474 code('%include "std_string.i"')
475
476 def __call__(self, value):
477 self = value
478 return value
479
480 @classmethod
481 def cxx_ini_parse(self, code, src, dest, ret):
482 code('%s = %s;' % (dest, src))
483 code('%s true;' % ret)

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

591 self.__init__(value)
592 return value
593
594 @classmethod
595 def cxx_predecls(cls, code):
596 # most derived types require this, so we just do it here once
597 code('#include "base/types.hh"')
598
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
599 @classmethod
600 def swig_predecls(cls, code):
601 # most derived types require this, so we just do it here once
602 code('%import "stdint.i"')
603 code('%import "base/types.hh"')
604
605 def getValue(self):
606 return long(self.value)
607
608class Int(CheckedInt): cxx_type = 'int'; size = 32; unsigned = False
609class Unsigned(CheckedInt): cxx_type = 'unsigned'; size = 32; unsigned = True
610
611class Int8(CheckedInt): cxx_type = 'int8_t'; size = 8; unsigned = False
612class UInt8(CheckedInt): cxx_type = 'uint8_t'; size = 8; unsigned = True

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

803 code('#include "base/addr_range.hh"')
804
805 @classmethod
806 def pybind_predecls(cls, code):
807 Addr.pybind_predecls(code)
808 code('#include "base/addr_range.hh"')
809
810 @classmethod
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
811 def swig_predecls(cls, code):
812 Addr.swig_predecls(code)
813
814 @classmethod
815 def cxx_ini_predecls(cls, code):
816 code('#include <sstream>')
817
818 @classmethod
819 def cxx_ini_parse(cls, code, src, dest, ret):
820 code('uint64_t _start, _end, _intlvHighBit = 0, _xorHighBit = 0;')
821 code('uint64_t _intlvBits = 0, _intlvMatch = 0;')
822 code('char _sep;')

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

837 code('bool _ret = !_stream.fail() &&'
838 '_stream.eof() && _sep == \':\';')
839 code('if (_ret)')
840 code(' ${dest} = AddrRange(_start, _end, _intlvHighBit, \
841 _xorHighBit, _intlvBits, _intlvMatch);')
842 code('${ret} _ret;')
843
844 def getValue(self):
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):
845 # Go from the Python class to the wrapped C++ class generated
846 # by swig
796 # Go from the Python class to the wrapped C++ class
847 from _m5.range import AddrRange
848
849 return AddrRange(long(self.start), long(self.end),
850 int(self.intlvHighBit), int(self.xorHighBit),
851 int(self.intlvBits), int(self.intlvMatch))
852
853# Boolean parameter type. Python doesn't let you subclass bool, since
854# it doesn't want to let you create multiple instances of True and

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

920 cxx_type = 'Net::EthAddr'
921 ex_str = "00:90:00:00:00:01"
922 cmd_line_settable = True
923
924 @classmethod
925 def cxx_predecls(cls, code):
926 code('#include "base/inet.hh"')
927
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
928 @classmethod
929 def swig_predecls(cls, code):
930 code('%include "python/swig/inet.i"')
931
932 def __init__(self, value):
933 if value == NextEthernetAddr:
934 self.value = value
935 return
936
937 if not isinstance(value, str):
938 raise TypeError, "expected an ethernet address and didn't get one"
939

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

977 cxx_type = 'Net::IpAddress'
978 ex_str = "127.0.0.1"
979 cmd_line_settable = True
980
981 @classmethod
982 def cxx_predecls(cls, code):
983 code('#include "base/inet.hh"')
984
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
985 @classmethod
986 def swig_predecls(cls, code):
987 code('%include "python/swig/inet.i"')
988
989 def __init__(self, value):
990 if isinstance(value, IpAddress):
991 self.ip = value.ip
992 else:
993 try:
994 self.ip = convert.toIpAddress(value)
995 except TypeError:
996 self.ip = long(value)

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

1033 cxx_type = 'Net::IpNetmask'
1034 ex_str = "127.0.0.0/24"
1035 cmd_line_settable = True
1036
1037 @classmethod
1038 def cxx_predecls(cls, code):
1039 code('#include "base/inet.hh"')
1040
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
1041 @classmethod
1042 def swig_predecls(cls, code):
1043 code('%include "python/swig/inet.i"')
1044
1045 def __init__(self, *args, **kwargs):
1046 def handle_kwarg(self, kwargs, key, elseVal = None):
1047 if key in kwargs:
1048 setattr(self, key, kwargs.pop(key))
1049 elif elseVal:
1050 setattr(self, key, elseVal)
1051 else:
1052 raise TypeError, "No value set for %s" % key

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

1111 cxx_type = 'Net::IpWithPort'
1112 ex_str = "127.0.0.1:80"
1113 cmd_line_settable = True
1114
1115 @classmethod
1116 def cxx_predecls(cls, code):
1117 code('#include "base/inet.hh"')
1118
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
1119 @classmethod
1120 def swig_predecls(cls, code):
1121 code('%include "python/swig/inet.i"')
1122
1123 def __init__(self, *args, **kwargs):
1124 def handle_kwarg(self, kwargs, key, elseVal = None):
1125 if key in kwargs:
1126 setattr(self, key, kwargs.pop(key))
1127 elif elseVal:
1128 setattr(self, key, elseVal)
1129 else:
1130 raise TypeError, "No value set for %s" % key

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

1223
1224class Time(ParamValue):
1225 cxx_type = 'tm'
1226
1227 @classmethod
1228 def cxx_predecls(cls, code):
1229 code('#include <time.h>')
1230
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
1231 @classmethod
1232 def swig_predecls(cls, code):
1233 code('%include "python/swig/time.i"')
1234
1235 def __init__(self, value):
1236 self.value = parse_time(value)
1237
1238 def __call__(self, value):
1239 self.__init__(value)
1240 return value
1241
1242 def getValue(self):

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

1400 code(';')
1401 code.dedent()
1402
1403 code('}')
1404 code.dedent()
1405 code()
1406 code('static EmbeddedPyBind embed_enum("enum_${name}", module_init);')
1407
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
1408 def swig_decl(cls, code):
1409 name = cls.__name__
1410 code('''\
1411%module(package="_m5") enum_$name
1412
1338
1413%{
1414#include "enums/$name.hh"
1415%}
1416
1417%include "enums/$name.hh"
1418''')
1419
1420
1421# Base class for enum types.
1422class Enum(ParamValue):
1423 __metaclass__ = MetaEnum
1424 vals = []
1425 cmd_line_settable = True
1426
1427 # The name of the wrapping namespace or struct
1428 wrapper_name = 'Enums'

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

1443 self.__init__(value)
1444 return value
1445
1446 @classmethod
1447 def cxx_predecls(cls, code):
1448 code('#include "enums/$0.hh"', cls.__name__)
1449
1450 @classmethod
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
1451 def swig_predecls(cls, code):
1452 code('%import "python/_m5/enum_$0.i"', cls.__name__)
1453
1454 @classmethod
1455 def cxx_ini_parse(cls, code, src, dest, ret):
1456 code('if (false) {')
1457 for elem_name in cls.map.iterkeys():
1458 code('} else if (%s == "%s") {' % (src, elem_name))
1459 code.indent()
1460 code('%s = Enums::%s;' % (dest, elem_name))
1461 code('%s true;' % ret)
1462 code.dedent()

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

1479 cxx_type = 'Tick'
1480 ex_str = "1MHz"
1481 cmd_line_settable = True
1482
1483 @classmethod
1484 def cxx_predecls(cls, code):
1485 code('#include "base/types.hh"')
1486
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
1487 @classmethod
1488 def swig_predecls(cls, code):
1489 code('%import "stdint.i"')
1490 code('%import "base/types.hh"')
1491
1492 def __call__(self, value):
1493 self.__init__(value)
1494 return value
1495
1496 def getValue(self):
1497 return long(self.value)
1498
1499 @classmethod

--- 667 unchanged lines hidden ---
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 ---