Open-Source Projects: Issueshttps://forge.ispras.ru/https://forge.ispras.ru/favicon.ico?16490126692018-06-09T11:26:06ZOpen-Source Projects
Redmine MicroTESK - Feature #8939 (Closed): [autogen] New option 'base-template-path' must be supported.https://forge.ispras.ru/issues/89392018-06-09T11:26:06ZAndrei Tatarnikovandrewt@ispras.ru
<p>A new option 'base-template-path' (<code>--base-template-path</code> or <code>-btp</code>) was established.<br />It specifies the path to the base template file.<br />This must be supported in Template Generator.</p> MicroTESK - Task #8481 (New): Need a way to specify the termination address for the test programhttps://forge.ispras.ru/issues/84812017-10-05T07:38:41ZAndrei Tatarnikovandrewt@ispras.ru
<p>When generation is finished MicroTESK checks whether the execution reaches the end of the program.<br />Currently, MicroTESK considers the end of the program to be the last instruction of the last sequence (e.g. the program's epilogue).<br />However, the end of epilogue might contain some supplementary code that does not necessarily executed last (handlers, termination for different PEs).<br />In such cases, MicroTESK mistakenly says that execution cannot reach the termination point. This causes generation to fail.</p>
<p>To avoid such situation, there must be a way to explicitly specify the termination point for each PE.<br />It can be a special pseudo instruction that marks the termination point or a way to specify the termination address for a PE.</p> MicroTESK - Bug #8060 (New): Attributes image and syntax and static instanceshttps://forge.ispras.ru/issues/80602017-04-13T10:48:57ZAndrei Tatarnikovandrewt@ispras.ru
<p>The following construct is illegal:<br /><pre>image = slt(rd, X(0), rs).image</pre><br />nML translator forces to write it like this:<br /><pre>image = format("%s", slt(rd, X(0), rs).image)</pre><br />This is inconvenient and redundant.</p>
<p>Constructs like in the first example must be supported.</p> TestBase - Bug #7759 (Closed): Avoid using lambda functionshttps://forge.ispras.ru/issues/77592016-11-28T13:25:42ZAndrei Tatarnikovandrewt@ispras.ru
<p>Использование lambda-функций (<a href="http://forge.ispras.ru/projects/testbase/repository/revisions/50f3ae809bbfc504fc7745eee8b626a5e7f4b019/entry/src/main/java/ru/ispras/testbase/storage/SQLiteStorage/db/dao/FormulaDAO.java" class="external">как здесь</a>) в реализации нежелательно. Они не поддерживаются в Java 1.7, которая сейчас используется для сборки всех проектов.</p> MicroTESK - Bug #7690 (Closed): Exception handler is not handled if it is not the first element i...https://forge.ispras.ru/issues/76902016-11-08T12:29:38ZAndrei Tatarnikovandrewt@ispras.ru
<p>Subject. Investigation is required. See the code below. It is claimed that only <code>IntegerOverflow</code> is handled while others are not found.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">exception_handler</span> <span class="p">{</span>
<span class="n">section</span><span class="p">(</span><span class="ss">:org</span> <span class="o">=></span> <span class="mh">0x380</span><span class="p">,</span> <span class="ss">:exception</span> <span class="o">=></span> <span class="p">[</span><span class="s1">'IntegerOverflow'</span><span class="p">,</span> <span class="s1">'SystemCall'</span><span class="p">,</span> <span class="s1">'Breakpoint'</span><span class="p">])</span> <span class="p">{</span>
<span class="n">trace</span> <span class="s1">'Exception handler (EPC = 0x%x)'</span><span class="p">,</span> <span class="n">location</span><span class="p">(</span><span class="s1">'COP0_R'</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
<span class="n">mfc0</span> <span class="n">ra</span><span class="p">,</span> <span class="n">rcop0</span><span class="p">(</span><span class="mi">14</span><span class="p">)</span>
<span class="n">addi</span> <span class="n">ra</span><span class="p">,</span> <span class="n">ra</span><span class="p">,</span> <span class="mi">4</span>
<span class="n">jr</span> <span class="n">ra</span>
<span class="n">nop</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre> MicroTESK - Task #7678 (New): Generation of LLVM configuration files from nML specificationshttps://forge.ispras.ru/issues/76782016-11-04T08:41:14ZAndrei Tatarnikovandrewt@ispras.ru
<p>Subject. To solve this task, you need implement an extension in Java that will traverse nML IR and generated the required files.</p>
<p>Such extensions implement the <code>TranslatorHandler</code> interface and are registered in the constuctor of the <code>NmlTranslator</code> class (see the code fragment below).</p>
<pre><code class="java syntaxhl" data-language="java"><span class="kd">public</span> <span class="kd">final</span> <span class="kd">class</span> <span class="nc">NmlTranslator</span> <span class="kd">extends</span> <span class="nc">Translator</span><span class="o"><</span><span class="nc">Ir</span><span class="o">></span> <span class="o">{</span>
<span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="nc">Set</span><span class="o"><</span><span class="nc">String</span><span class="o">></span> <span class="no">FILTER</span> <span class="o">=</span> <span class="nc">Collections</span><span class="o">.</span><span class="na">singleton</span><span class="o">(</span><span class="s">".nml"</span><span class="o">);</span>
<span class="kd">public</span> <span class="nf">NmlTranslator</span><span class="o">()</span> <span class="o">{</span>
<span class="kd">super</span><span class="o">(</span><span class="no">FILTER</span><span class="o">);</span>
<span class="n">getSymbols</span><span class="o">().</span><span class="na">defineReserved</span><span class="o">(</span><span class="nc">NmlSymbolKind</span><span class="o">.</span><span class="na">KEYWORD</span><span class="o">,</span> <span class="nc">ReservedKeywords</span><span class="o">.</span><span class="na">JAVA</span><span class="o">);</span>
<span class="n">getSymbols</span><span class="o">().</span><span class="na">defineReserved</span><span class="o">(</span><span class="nc">NmlSymbolKind</span><span class="o">.</span><span class="na">KEYWORD</span><span class="o">,</span> <span class="nc">ReservedKeywords</span><span class="o">.</span><span class="na">RUBY</span><span class="o">);</span>
<span class="c1">// Detects parent-child connections between primitives</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">ReferenceDetector</span><span class="o">());</span>
<span class="c1">// Adds the list of root operations to IR </span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">RootDetector</span><span class="o">());</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">ArgumentModeDetector</span><span class="o">());</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">BranchDetector</span><span class="o">());</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">MemoryAccessDetector</span><span class="o">());</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">Analyzer</span><span class="o">(</span><span class="k">this</span><span class="o">));</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">PrimitiveSyntesizer</span><span class="o">(</span><span class="k">this</span><span class="o">));</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">ExceptionDetector</span><span class="o">());</span>
<span class="c1">// Generate Java code of the ISA model</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">MetaDataGenerator</span><span class="o">(</span><span class="k">this</span><span class="o">));</span>
<span class="n">addHandler</span><span class="o">(</span><span class="k">new</span> <span class="nc">Generator</span><span class="o">(</span><span class="k">this</span><span class="o">));</span>
<span class="o">}</span>
</code></pre>
<p>All these handlers are examples of how to implement logic traversing IR. Some of them perform analysis and some generate code. Code generation is done using the <a href="http://www.stringtemplate.org/" class="external">StringTemplate</a> library (STG files + java classes).</p>
<p>To traverse the IR, the following classes and interfaces can be used: <code>IrVisitor</code>, <code>IrVisitorDefault</code> and <code>IrWalker</code> (or its variations <code>IrWalkerFlow</code>, <code>IrWalkerShortcuts</code>) defined in the <code>ru.ispras.microtesk.translator.nml.ir</code> package. You need to implement <code>IrVisitor</code> (use <code>IrVisitorDefault</code> as default implementation with empty methods) and pass it to the most suitable walker. <em>NOTE: implementation of IR walker and visitor is raw and a subject to improvements. Any questions/feedback are appreciated.</em></p>
<p>Expressions require using a separate walker and visitor implemented in Fortress: <code>ExprTreeVisitor</code>, <code>ExprTreeVisitorDefault</code> and <code>ExprTreeWalker</code> (<code>ru.ispras.fortress.expression</code>). Examples of using them you can find both in MicroTESK and in Fortress.</p> MicroTESK - Bug #7628 (Closed): Methods 'dist' and 'range' are not supported in data sectionshttps://forge.ispras.ru/issues/76282016-10-25T10:57:22ZAndrei Tatarnikovandrewt@ispras.ru
<p>Subject. The code below gives error: <code>(MTRubyError) Method 'range' is not available in data sections</code>.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">data</span> <span class="p">{</span>
<span class="n">int32_dist</span> <span class="o">=</span> <span class="n">dist</span><span class="p">(</span><span class="n">range</span><span class="p">(</span><span class="ss">:value</span> <span class="o">=></span> <span class="mi">0</span><span class="p">,</span> <span class="ss">:bias</span> <span class="o">=></span> <span class="mi">25</span><span class="p">),</span>
<span class="n">range</span><span class="p">(</span><span class="ss">:value</span> <span class="o">=></span> <span class="mi">1</span><span class="o">..</span><span class="mi">2</span><span class="p">,</span> <span class="ss">:bias</span> <span class="o">=></span> <span class="mi">25</span><span class="p">),</span>
<span class="n">range</span><span class="p">(</span><span class="ss">:value</span> <span class="o">=></span> <span class="mh">0xffffFFFE</span><span class="o">..</span><span class="mh">0xffffFFFF</span><span class="p">,</span> <span class="ss">:bias</span> <span class="o">=></span> <span class="mi">50</span><span class="p">))</span>
<span class="n">word</span> <span class="n">int32_dist</span><span class="p">.</span><span class="nf">next_value</span><span class="p">,</span>
<span class="n">int32_dist</span><span class="p">.</span><span class="nf">next_value</span><span class="p">,</span>
<span class="n">int32_dist</span><span class="p">.</span><span class="nf">next_value</span>
<span class="p">}</span>
</code></pre>
<p>It must be supported.</p> MicroTESK - Bug #7603 (New): List of plug-ins must be stored in etc/settings.xmlhttps://forge.ispras.ru/issues/76032016-10-11T15:49:53ZAndrei Tatarnikovandrewt@ispras.ru
<p>List of MicroTESK plugins is stored in config.xml included in JAR's resources. As a result, it cannot be modified. The format of config.xml looks like this:</p>
<pre>
<config>
<plugin class="ru.ispras.microtesk.mmu.MmuPlugin"/>
</config>
</pre>
<p>This information must be stored in etc/settings.xml.</p> MicroTESK - Task #7534 (Closed): Configuration option to manage reservation of explicitly specifi...https://forge.ispras.ru/issues/75342016-08-26T12:23:33ZAndrei Tatarnikovandrewt@ispras.ru
<p>It should be a possibility to inform the generator not to reserve registers specified explicitly. E.g.,</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">mov</span> <span class="n">reg</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="o">...</span> <span class="n">reg</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="c1"># is not marked as busy</span>
<span class="n">mov</span> <span class="n">reg</span><span class="p">(</span><span class="n">_</span><span class="p">),</span> <span class="o">...</span> <span class="c1"># an allocated register is marked as busy</span>
</code></pre>
<p>Configuration option: <code>--reserve-explicit-registers</code>.</p> MicroTESK - Bug #6911 (New): The "get_address_of" method must work with all label types.https://forge.ispras.ru/issues/69112016-03-01T08:49:06ZAndrei Tatarnikovandrewt@ispras.ru
<p>Currently, it is limited to labels defined in global data sections. It must support all kinds of label. It should return a lazy value instead of a constant.</p> MicroTESK - Bug #6380 (New): Possibility to specify initial values for registershttps://forge.ispras.ru/issues/63802015-10-29T12:24:31ZAndrei Tatarnikovandrewt@ispras.ru
<p>Possibility to specify initial values for registers must be provided in nML:</p>
<pre>reg R[1, card(32)] initial = 100</pre> MicroTESK - Bug #5990 (New): Memory state must be taken into account when generating test datahttps://forge.ispras.ru/issues/59902015-05-27T08:46:50ZAndrei Tatarnikovandrewt@ispras.ru
<p>Data defined in <code>data{...}</code> blocks (global data) must be taken into account when generating test data.<br />Now the test data generator does not see data placed into memory outside of the current test template block.</p> TestBase - Task #5312 (Closed): TestBase.executeQuery should return some status descriptionhttps://forge.ispras.ru/issues/53122014-10-05T15:05:36ZAndrei Tatarnikovandrewt@ispras.ru
<p>Метод TestBase.executeQuery сейчас возвращает объект типа TestDataProvider. Клиенту этой информации не совсем достаточно.<br />Если запрос будет успешно выполнен, то мы получим нужные данные. А если нет? Вернётся null или пустой TestDataProvider? А как мы узнаем, почему наш запрос не выполнился (мне нужно вывести соответствующее сообщение)? Будет кидаться исключение?</p>
<p>Наверное, нужно возвращать какой-то статус. Например, как в Solver (Fortress), есть класс SolverResult, который хранит следующие атрибуты:</p>
<p>1. Статус (enum: OK, ERROR, UNSAT и т.д.).<br />2. Результат (в нашем случае TestDataProvider).<br />3. Список ошибок (List<String>).</p> MicroTESK - Task #5192 (New): Assert constructions to check the model state during and after simu...https://forge.ispras.ru/issues/51922014-08-12T08:43:23ZAndrei Tatarnikovandrewt@ispras.ru
<p>Необходимо реализовать конструкции assert для тестовых шаблонов. Это внутренняя фича для нас, а не для пользователя. Assert'ами будем проверять внутреннее состояние модели во время симуляции символической тестовой программы и после (во время генерации кода тестовой программы). Это нужно для тестирования работы симулятора. Можно будет включить в автоматическую сборку генерацию тестовых программ для всех примеров тестовых шаблонов - будут регрессионные тесты.</p> MicroTESK - Task #4061 (New): Support for endiannesshttps://forge.ispras.ru/issues/40612013-04-03T09:36:03ZAndrei Tatarnikovandrewt@ispras.ru
<p>Сейчас порядок байт не учитывается при моделировании. Он принимается за little-endian по умолчанию.</p>
<p>В моделях, предоставленных IIT Kanpur порядок байт задаётся ключом byte_order. Это выглядит так:</p>
<p>let byte_order = "little" <br />let byte_order = "big"</p>
<p>Нам тоже нужно учитывать порядок байт при моделировании модели.</p>