-
major 6 -
note 6The syntaxes for template instantiation in object declarations and in standalone statements have been unified; you can now write:register r is read_only { ... }to instantiate a single template andis (read_only, write_unimplemented);to instantiate two templates. Also, templates and traits now permitisbefore the opening brace, just like object declarations do. -
release 6 6004 -
note 6The binary<host>/bin/dmlchas been replaced with the scriptscripts/dmlc.py. This is considered an internal change; from a user's perspective, the entry point of DMLC is stillbin/dmlc -
release 6 6005 -
note 6The type produced by the<<operator is now alwaysuint64unless both operands are constant. Previously, the result could sometimes be a signedint, which could lead to unexpected sign extension when assigning the result to auint64variable. -
release 6 6006 -
note 6Restrictions have been lifted on what values can be assigned to abitfieldsvariable: Previously, only integer values small enough to fit in the bitfield size were permitted; now we permit assignment of any integer value, and truncate upon overflow. This eliminates some compile errors that were introduced by changes in Simics-Base 5.0.180. -
release 6 6007 -
note 6In theio-memory.dmlstandard library file, theoperationmethod is now markeddefault(fixes HSD-1507149841). -
note 6A new parameterdml_1_2has been added to device scope. The parameter is true, but will be false in future versions of the language. -
note 6The semantics of aselectstatement has changed to report errors less often in dead code. In particular, theelseclause may now contain anerrorstatement to get a compile-time check that thewhereexpression was satisfied. -
release 6 6008 -
note 6Fixed a bug that caused a crash with the deprecated-Mflag -
release 6 6010 -
note 6Upon object instantiation, required attributes inside banks can now be set through the compatibility attributebank_attrin the device upon object creation. Previously, required attributes had to be set directly on the bank object (fixes HSD-2207518293). -
note 6Initial release of DML version 1.4. The new language version is documented in the DML 1.4 reference manual document. Some highlights:- Better compilation performance
2-3 times faster compile for devices with large register banks - Improved reset support
The reset mechanism in 1.4 is not hard-coded, and can be adapted to different reset flows - Templates as types
You can pass around references to banks/registers/fields etc in variables - Multiple levels of overrides
Methods and parameters can be overridden any number of times. In 1.2, this is often prevented by standard library legacy. - Syntax simplification
Many adjustments to improve readability; for instance, removal of$and C-like method syntax - Standard library API simplification
Clearer API, easier to understand - Updated language semantics
More consistent and well-specified behaviour of method bodies and expressions, providing more predictable model behaviour
- Better compilation performance
-
release 6 6012 -
note 6Improved information provided by EATTRDATA error message. -
release 6 6015 -
note 6The bank instrumentation framework no longer invokes callbacks on inquiry accesses. -
note 6Fix issue where the inquiry flag of memory operation was modified when the inquire function of the bank instrumentation framework was invoked. This could cause unnecessary trouble for users that recycle memory operations. -
release 6 6022 -
note 6Improved how inline method arguments are handled when porting a device from DML 1.2 to 1.4. -
note 6It is now permitted to haveconnectobjects inside banks. -
note 6Fixed various bugs that caused crashes and errors for inlined methods, in particular when mixing DML 1.2 and DML 1.4 code. -
release 6 6026 -
note 6Multi-dimensional register, attribute, group, connect, event, bank, port, and implement arrays are now available. -
note 6Add support toheadersections for including a.hfile relative to the currently imported DML file (fixes HSD-2209645860). -
release 6 6028 -
note 6Fixed a bug where theDMLDIR_<name>_Hmacro was undefined when generating dependency files. -
release 6 6030 -
note 6DMLC will now report a syntax error if a DML file contains any invalid UTF-8 characters. Previously, invalid UTF-8 characters were ignored in comments. -
note 6The parametersdescanddocumentationare now required to be correctly encoded as UTF-8. -
release 6 6032 -
note 6Adjusted DMLC code generation to silence false positives reported ondml-builtins.dmlwhen analysing DMLC-generated C code using the Synopsis® Coverity® static analysis tool. -
release 6 6036 -
note 6Improved some error messages (fixes SIMICS-15552). -
note 6Added some rules to permit DML 1.4 methods to call 1.2 methods without atry/catchblock in some common cases. Details are documented with theEBADFAIL_dml12error message. -
note 6When using DML 1.4 attribute templates, such asbool_attr, from a 1.2 device throughdml12-compatibility.dml, thegetmethod is no longer marked asthrows. -
release 6 6044 -
note 6Improved compatibility between DML 1.2 and 1.4: The experimentaldml12-compatibility.dmlfile now provides default implementations of methodsread_register,write_register,read_field,write_fieldandio_memory_access. When overriding these methods in a DML 1.4 file, there are templatesdml12_compat_read_register,dml12_compat_write_registeretc that will make sure the overrides are invoked if the file is imported from DML 1.2. -
note 6Theport-dmlscript now accepts an argument--compatto generate 1.4 code that works better when imported from DML 1.2. The resulting code is less clean, so it should only be used on code that needs to retain 1.2 compatibility for some time. -
release 6 6046 -
note 6The endian class of integer types are now available. These look like[u]intX_(be|le)_t(where X is a multiple of 8, up to 64) and describe an integer of the specified size with the specified byteorder and natural alignment of 1 byte. These can be transparently used as if they were regular[u]intXs in calculations (fixes SIMICS-7603). -
release 6 6049 -
note 6Fixed an issue where typedeffed bitfields would get the incorrect size in layouts. -
release 6 6052 -
note 6Added a scriptbin/port-dml-moduleto port all devices in one Simics module to DML 1.4. -
note 6The typeslong,ulong,size_tandssize_tnow correspond to the correct C types. For instance, on Linux, both thelongandint64types are signed 64-bit integers, yet C considers them incompatible and refuses to assign between pointers of typelong *andint64 *. DML now mirrors this behaviour, which makes it easier to call an externally defined C function that takes along *argument. -
note 6Bitfield types are now considered compatible with the similarly sized unsigned integer type (e.g.bitfield 32 {...}is compatible withuint32). -
release 6 6053 -
note 6Improved compatibility between DML 1.2 and 1.4: The experimentaldml12-compatibility.dmlfile now also provides shared access to typed variables defined in the common templatesname,shown_desc,miss_pattern_bank, andfunction_mapped_bank. See the DML 1.4 reference manual for details on which typed parameters each template provides. -
note 6The experimentalbank_objtemplate is available in DML 1.2 through the experimentaldml12-compatibilityfile. See DML 1.4 releasenotes for the functionality provided. -
release 6 6056 -
note 6Registers and attributes that do not define thedocumentationparameter are now considered internal by default, meaning that they will be excluded from reference documentation by default. This can be changed by explicitly overriding theinternalparameter of the register or attribute. -
release 6 6061 -
note 6Fixed a bug that could cause a segmentation fault when instantiating a device with register arrays following certain patterns (fixes HSD-1508585437). -
release 6 6075 -
note 6If an array ofconnectobjects is declared asconfiguration=optional, then it is now permitted to assign it a shorter list than the array size. For instance, a connectconnect objs[i < 10]now has the type string"o|[os]|n{0:10}"(fixes SIMICS-16132). -
note 6Improved DML's type system. DMLC will now detect and report many type errors instead of generating broken C code. -
note 6typedefs oflayouttypes may no longer be declaredextern. It never worked to access members of such types, so they can safely be replaced with an opaque extern struct. E.g., if you have this declaration:extern typedef layout "big-endian" { uint24 member; } my_type_t;then you can safely replace it with:
extern typedef struct { } my_type_t; -
release 6 6079 -
note 6groupobjects are now allowed anywhere in the device hierarchy. All kinds of objects exceptbank,port,interfaceandimplementmay reside inside a group (in DML 1.2,fieldobjects are also disallowed inside groups) (fixes SIMICS-16563). -
note 6attribute,savedandsessionobjects are now permitted also insideimplementobjects. -
release 6 6082 -
note 6Fixed an issue where interfaces defined as typedeffed aliases of other interfaces would not work correctly in some cases. -
release 6 6088 -
note 6Fixed a problem with strict aliasing; it is now safe to cast auint8array to a layout pointer, assign to the layout members, and then access the arrays as bytes. This would sometimes give problems when using-fstrict-aliasingwith new GCC versions (fixes SIMICS-16978). -
release 6 6090 -
note 6DML devices compiled with simics-base 6.0.82 or later cannot be loaded with simics-base earlier than 6.0.76 -
release 6 6095 -
note 6afterstatements now support methods with serializable method parameters (fixes SIMICS-7030). -
release 6 6118 -
note 6DMLC will now emit a warning when comparing an unsigned operand with a negative constant (fixes SIMICS-17096). -
release 6 6119 -
note 6Single-bit wide ranges within bitfield declarations can now be specified through@ [i], as with field objects (fixes SIMICS-18156). -
release 6 6124 -
note 6The DMLC standard library is now licensed under the BSD Zero Clause License. -
note 6References to interface methods andsharedmethods are now allowed as parameter definitions. -
note 6The filedmllib.h, needed to compile DMLC-generated C files, has been moved tohost/bin/dml/include/simics. Makefiles have been updated to add this directory to the include path. -
release 6 6131 -
note 6Fixed a problem withlog errorstatements when there are more than 32 log groups (fixes HSD-1305472692). -
note 6Unicode BiDi control characters are no longer permitted in DML source files, for security reasons. -
release 6 6132 -
note 6Addressed code generation efficiency issues when using array types insavedvariables or parameters to methods called withafter(fixes SIMICS-18440).Serialized representation of
uint8[(be|le)_t]array types has been changed. The old serialized representation is still accepted for deserialization in order to preserve checkpoint compatibility. -
release 6 6135 -
note 6Added support for non-constant compound initializers inside methods. For example, the following is now supported:local size_t size = get_size(); local buffer_t buf = {size, new uint8[size]}; -
release 6 6139 -
note 6breakmay now be used withinforeachstatements in DML 1.2 and#foreachstatements in DML 1.4 (fixes HSD-1309451301). -
release 6 6141 -
note 6(Partially) const-qualifiedsessionvariables no longer result in invalid generated C (fixes SIMICS-9440). -
note 6Implicitly initializedlocalvariables of (partially) const-qualified struct type no longer result in invalid generated C (fixes SIMICS-10197). -
release 6 6143 -
note 6defaultcan now be called withindestroy()without causing an internal compiler error (fixes SIMICS-19598). -
release 6 6176 -
note 6The DMLC implementation is now shipped as source code, as.pyfiles instead of.pyc. -
note 6The C code emitted by DMLC is now identical every time, when given the same DML files as input. Previously, the compiler had nondeterministic behaviour that affected things like in what order C functions are output. Deterministic output allows more efficient use of tools likeccache. -
release 6 6200 -
note 6Fixed a bug with how template types were handled by DMLC that could cause the compiler to still exhibit nondeterministic behaviour. -
release 6 6205 -
note 6Added an error if a device declares more than 63 log groups (including the two built-in log groups.) -
release 6 6244 -
note 6Added a warning for if a specified log level of a log statement is likely intended to instead specify the log groups, and/or vice versa (fixes HSD-22018374443). This warning is only enabled by default with Simics API version 7 or above. With version 6 and below it must be explicitly enabled by passing--warn=WLOGMIXUPto DMLC. -
release 6 6247 -
note 6Added a flag--no-compatto selectively disable compatibility features. In particular,--no-compat=port_proxy_ifacesdisables generation of interface trampolines, which can speed up compilation of devices with huge arrays of ports. The option--help-no-compatlists all features that can be disabled. -
release 6 6252 -
note 6Addressed multiple issues with line directive generation which were detrimental to the use of debugging and coverage tools. Generated C lines should now only ever be redirected to DML when the DML line in question can be reasonably considered to describe the operation of the C line. -
note 6Fixed an issue where attempting to use inlined method parameters in constant equalities could lead to internal compiler errors or invalid generated C, if the corresponding arguments are themselves constant inlined method parameters (i.e. an inline method call propagates an inline parameter to an inline method call of its own.) -
major 7 -
release 6 6255 -
note 6The DMLC behaviour of suppressing the warningWLOGMIXUPby default below Simics API version 7 is now controlled by the compatibility featuresuppress_WLOGMIXUP. This is in order to increase visibility of the API-dependent behaviour, and to provide migration documentation about it. As a consequence,WLOGMIXUPcan be enabled below Simics API version 7 by passing either--warn=WLOGMIXUP(as before) or--no-compat=suppress_WLOGMIXUPto DMLC. -
release 6 6274 -
release 7 7007 -
note 6Fixed an issue where leveragingtypeofwithin a method signature would lead to incorrect compile-time errors when the method is overridden. -
release 6 6283 -
release 7 7011 -
note 6Added support for thelog warningstatement. -
release 6 6297 -
note 6DMLC will now report errors for some uses of function types that are illegal in C. These would previously yield broken C code. -
note 6Created a compatibility featurefunction_in_extern_struct. The syntaxvoid m(conf_object_t)for function pointers is only permitted when this feature is enabled. The feature will be disabled in Simics API versions > 7. -
release 6 6298 -
release 7 7017 -
note 6Fixed a bug in thedead_dml_methodslibrary, which caused it to never detect methods as dead if they occur directly after afooterblock. -
release 6 6310 -
release 7 7022 -
note 6DMLC's use of the legacy Simics API for attribute registration is now controlled by the compatibility featurelegacy_attributes. This feature can be disabled by passing--no-compat=legacy_attributesto DMLC, in which case the modern API will be used instead, which does not support the use of dictionary attribute values (fixes SIMICS-22406).legacy_attributeswill always be disabled with Simics API version 8 or above. -
note 6Typechecking has been reworked to be more strict, and more accurately reject type mismatch that would result in invalid C or GCC warnings (fixes SIMICS-9504). To avoid breakage from novel type errors from the stricter typechecking, which particularly affects pointer types, the legacy lenient typechecking is still used by default with Simics API version 7 or below. The strict typechecking can be enabled by passing--no-compat=lenient_typecheckingto DMLC. -
release 7 7024 -
note 6Multipleexterndeclarations for the same identifier are now allowed as long as they all declare the same type for the identifier (fixes SIMICS-22472). -
release 6 6313 -
release 7 7025 -
release 6 6316 -
release 7 7027 -
release 7 7029 -
release 6 6320 -
release 7 7032 -
release 6 6321 -
release 7 7033 -
release 6 6324 -
note 6Relaxed the rule which conditionally forbade naming agroup"port" or "bank". Anygroupmay now be named "port" or "bank" regardless of context, butports,banks, orsubdevices may not be declared underneath anygroupnamed "port" or "bank". (For DML 1.2 devices, this change only applies to naming a group "port", as naming any object "bank" in 1.2 devices is impossible due to every object of a 1.2 device having thebankparameter.) -
release 7 7044 -
note 6TheATOM_LIST_ENDmacro has been made referencable in DML (equivalent toATOM_list_end(0)) (fixes SIMICS-22363). -
release 6 6336 -
release 7 7045 -
note 6Added the newregister_view_cataloginterface to all banks. This speeds up various operations that rely on theregister_viewinterface, such as thedev_util.bank_regsfunction and thewrite-device-regandprobe-addressCLI commands. -
release 6 6345 -
release 7 7051 -
note 6Line directives in generated C files will now always use absolute file paths. This is to resolve an issue where debugging or coverage tools may be unable to locate the referenced file in certain contexts (fixes SIMICS-22848). -
release 6 6349 -
release 7 7054 -
note 6The DML files wrapping the Simics API now expose every type and (forenums) associated symbols by default, addressing the issue where several useful types provided by the Simics API were not made available (fixes SIMICS-19133). -
release 6 6354 -
release 7 7059 -
note 6Log statements of kindwarning,error, orcriticialnow support the use of5as a subsequent log level, meaning the log will only happen once. Any other value of the subsequent log level but1will be treated as5for these logging kinds. -
note 6Added checks that cause DMLC to reject the use of any log level but1for log statements of kindwarning,error, orcritical; and reject the use of any subsequent log level for these logging kinds but1or5(fixes SIMICS-22401). For compatibility reasons, these checks are not performed with Simics API version 7 or below unless--no-compat=meaningless_log_levelsis passed to DMLC. -
note 6Added a system and syntax for DMLC pragmas. Every supported pragma is named and documented within the Pragmas subsection of the DML 1.4 Reference Manual. -
note 6Added theCOVERITYpragma, which allows for the manual suppression of defects reported by Synopsys® Coverity® for particular DML lines, as long as Coverity support is enabled by passing--coverityto DMLC. -
release 6 6356 -
release 7 7060 -
note 6Elements of compile-time list expressions are now allowed to be non-constant expressions (fixes SIMICS-13113). -
release 6 6363 -
release 7 7064 -
note 6A new provisional featuresimics_util_vecthas been added. Whenprovisional simics_util_vect;appears in the top of a DML file, DMLC will no longer print warnings when thevectsyntax is used in that file. -
note 6A new compatibility featuresimics_util_vect_without_provisionalhas been created. In files without aprovisional simics_util_vect;declaration, thevectsyntax is only permitted when this feature is enabled. This feature will be disabled in Simics API versions > 7, where all uses ofvectinstead require explicitprovisionaldeclarations. -
note 6The rarely used_warningstatement has been deprecated, through the introduction of a new compatibility featurewarning_statement. Warning statements will be illegal when Simics API 8 or newer is used. -
release 7 7095 -
release 6 6405 -
note 6Added a new flag--breaking-changewhich replaces the--no-compatflag. This flag is easier to understand, and aligns better with terminology used by Simics. Existing--no-compatflags continue to work like before. -
release 7 7134 -
release 6 6449 -
note 6DMLC no longer emits warnings sayingtop-level '#if' body with unsupported statements. These warnings were often triggered in common code, causing excessive polution in build logs unless--no-warn=WEXPERIMENTALwas passed to DMLC. The same rules as before apply to#ifstatements: Statements such asparamandtemplateare forbidden inside#if, but a special exception allows forbidden statements to appear specifically inside an#if (dml_1_2)block. The warning message was meant to highlight this irregularity, but caused more harm than good; error messages surrounding the special case have been improved instead. -
release 7 7146 -
release 6 6457