Open-Source Projects: Issueshttps://forge.ispras.ru/https://forge.ispras.ru/favicon.ico?16490126692017-09-23T13:32:46ZOpen-Source Projects
Redmine MicroTESK - Bug #8455 (Rejected): Test Documenthttps://forge.ispras.ru/issues/84552017-09-23T13:32:46ZAndrei Tatarnikovandrewt@ispras.ru
<p>test</p> MicroTESK - Bug #7385 (Closed): The 'prepare' function does not work with randomly selected regis...https://forge.ispras.ru/issues/73852016-07-11T12:26:17ZAndrei Tatarnikovandrewt@ispras.ru
<p>Code like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">prepare</span> <span class="n">reg</span><span class="p">(</span><span class="n">_</span><span class="p">),</span> <span class="mh">0xDEADBEEF</span>
</pre></code>
<p>leads to the following error:</p>
<pre>
Preparator invocation: REG = 0xdeadbeef
********************************************************************************
ATTENTION! An unexpected error has occurred:
java.lang.IllegalStateException: Value is not set.
The program will be terminated. Please contact us at:
microtesk-support@ispras.ru
We are sorry for the inconvenience.
Exception stack:
java.lang.IllegalStateException: Value is not set.
at ru.ispras.microtesk.test.template.UnknownImmediateValue.getValue(ru/ispras/microtesk/test/template/UnknownImmediateValue.java:111)
at ru.ispras.microtesk.test.template.Argument.getImmediateValue(ru/ispras/microtesk/test/template/Argument.java:119)
at ru.ispras.microtesk.test.template.Preparator.isMatch(ru/ispras/microtesk/test/template/Preparator.java:140)
at ru.ispras.microtesk.test.template.PreparatorStore.getPreparator(ru/ispras/microtesk/test/template/PreparatorStore.java:124)
at ru.ispras.microtesk.test.template.PreparatorStore.getPreparator(ru/ispras/microtesk/test/template/PreparatorStore.java:83)
at ru.ispras.microtesk.test.template.Template.addPreparatorCall(ru/ispras/microtesk/test/template/Template.java:633)
at java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:606)
at RUBY.prepare(/home/andrewt/Documents/ISPRAS/src/microtesk/trunk/microtesk/dist/lib/ruby/template.rb:662)
at RUBY.run(/home/andrewt/Documents/ISPRAS/src/microtesk/trunk/microtesk/dist/arch/minimips/templates/euclid.rb:34)
at RUBY.generate(/home/andrewt/Documents/ISPRAS/src/microtesk/trunk/microtesk/dist/lib/ruby/template.rb:961)
at RUBY.main(/home/andrewt/Documents/ISPRAS/src/microtesk/trunk/microtesk/dist/lib/ruby/microtesk.rb:35)
at org.jruby.RubyHash.each(org/jruby/RubyHash.java:1342)
at RUBY.main(/home/andrewt/Documents/ISPRAS/src/microtesk/trunk/microtesk/dist/lib/ruby/microtesk.rb:31)
at RUBY.(root)(/home/andrewt/Documents/ISPRAS/src/microtesk/trunk/microtesk/dist/lib/ruby/microtesk.rb:54)
at ru.ispras.microtesk.test.TestEngine.generate(ru/ispras/microtesk/test/TestEngine.java:153)
at ru.ispras.microtesk.MicroTESK.generate(ru/ispras/microtesk/MicroTESK.java:290)
at ru.ispras.microtesk.MicroTESK.main(ru/ispras/microtesk/MicroTESK.java:72)
</pre></pre> 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 #6910 (Closed): The is_global flag for data sectionshttps://forge.ispras.ru/issues/69102016-03-01T08:45:34ZAndrei Tatarnikovandrewt@ispras.ru
<p>It should be possible to treat data defined inside of blocks, which are normally treated as test case data, as global data. This is important for code libraries.</p> MicroTESK - Task #5654 (Closed): [template] User-defined seed for random generationhttps://forge.ispras.ru/issues/56542015-02-24T11:19:25ZAndrei Tatarnikovandrewt@ispras.ru
<p>Need an option to specify a user-defined seed for random generation.</p> MicroTESK - Bug #5514 (Closed): The implementation of 'coerce' needs a reviewhttps://forge.ispras.ru/issues/55142014-12-19T07:57:17ZAndrei Tatarnikovandrewt@ispras.ru
<p>The implementation is very simple: size is changed, extra bits are set to zero. <br />Sign extension is not supported, which causes bugs. Also, conversion from different data type families (e.g float to integer is not supported)/</p> MicroTESK - Task #5403 (Closed): Test sequence generation logic (blocks, combinators, compositors...https://forge.ispras.ru/issues/54032014-10-31T15:44:13ZAndrei Tatarnikovandrewt@ispras.ru
<p>Необходимо проработать логику генерации тестовых последовательностей (блоки и комбинаторы/композиторы). Необходимо:</p>
<ol>
<li>Уточнение требований</li>
<li>Реализация</li>
<li>Примеры</li>
<li>Документация</li>
</ol>
<p>Следующие случаи должны быть проработаны:</p>
<ol>
<li>atomic { I1, ..., In } - возвращает итератор, который возвращает одну единственную последовательность.</li>
<li>atomic { I1, ..., In, block {...}, In+1, ..., Im} - возвращает итератор, который возвращает столько последовательностей, сколько из дает block: (I1, ..., In, seq1, In+1, ..., Im), ..., (I1, ..., In, seqk, In+1, ..., Im).</li>
<li>atomic { I1, ..., In, block {...}, In+1, ..., Im, block {…}, Im+1, …, Ik} - (вложенные блоки дают разное количество последовательностей) <strong>- ???</strong></li>
<li>block { I1, ..., In } - возвращает итератор, который выдает n последовательностей, состоящих из одного элемента каждая. </li>
<li>block { I1, ..., In, block {...}, In+1, ..., Im} <strong>- ???</strong></li>
<li>block { I1, ..., In, block {...}, In+1, ..., Im, block {…}, Im+1, …, Ik} <strong>- ???</strong></li>
</ol>
<p>P.S. Cейчас из этого только atomic { I1, ..., In } и block { I1, ..., In } работают корректно. Более сложные случаи не проработаны: atomic { ... } объединяет все в единственную последовательность, а block { ... } создает на основе n вложенных элементов (инструкций или блоков) n последовательностей, которые получаются путем объединения всех последовательностей, возвращаемых соответствующим элементом.</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 - Bug #4996 (Closed): [translator] It should be possible to define the "instruction" op...https://forge.ispras.ru/issues/49962014-06-18T11:42:22ZAndrei Tatarnikovandrewt@ispras.ru
<p>The current version has an unreasonable limitation: the "instruction" operation (root) can be defined as an AND rule only. This should be changed. It should be allowed to define the "instruction" operation as an OR rule.</p> MicroTESK - Task #4283 (Closed): [translator] Support for custom attributes in operations and add...https://forge.ispras.ru/issues/42832013-07-01T10:24:28ZAndrei Tatarnikovandrewt@ispras.ru
<p>Транслятор и модель должны поддерживатить использование <strong>кастомных аттрибутов</strong>. Например, в приведённом ниже куске используется аттрибут loop, который организует цикл путём рекурсии. Для трансляции модели MIPS требуется эта возможность.</p>
<pre>
op CLZ(rd : index, rs : REG_IND_ZERO)
syntax = format ("CLZ %d,%s", rd, rs.syntax)
image = format ("011100%s%5b%5b00000100000", rs.image, rd, rd)
action = {
tmp_signed_byte = 31;
GPR [rd] = 32;
loop;
}
loop = {
if tmp_signed_byte >= 0 then
if ( rs < tmp_signed_byte..tmp_signed_byte > == 0 ) then
tmp_signed_byte = tmp_signed_byte - 1;
else
GPR [ rd ] = 31 - tmp_signed_byte;
tmp_signed_byte = -1;
endif;
loop;
endif;
}
</pre> MicroTESK - Bug #4281 (Closed): [translator] Support for aliases in memory (aka mem) definitions.https://forge.ispras.ru/issues/42812013-07-01T06:29:20ZAndrei Tatarnikovandrewt@ispras.ru
<p>Подобные конструкции сейчас не поддерживаются транслятором Sim-nML:</p>
<pre>
mem tmp_signed_half_word [1, int(16)]
mem tmp_signed_half_word_A0 [1, int(8)] alias = tmp_signed_half_word[8]
</pre>
<p>Это одна из причин, по которой не удаётся оттранслировать спецификацию процессора MIPS.</p> MicroTESK - Task #4104 (Closed): [translator] Reset VAR values after an instruction callhttps://forge.ispras.ru/issues/41042013-04-13T20:16:19ZAndrei Tatarnikovandrewt@ispras.ru
<p>Согласно спецификации переменные (объявлены ключевым словом var) не сохраняют своих значений между вызовами инструкции (в отличие от reg-ов и mem-ов). Нужно сбрасывать их значения, что бы там не скапливался мусор, который может привести к некорректным результатам.</p> MicroTESK - Bug #4015 (Closed): [translator] Shift and Rotate operations: negative distancehttps://forge.ispras.ru/issues/40152013-03-17T15:00:02ZAndrei Tatarnikovandrewt@ispras.ru
<p>Для данных, моделируемых через RawData, не будут работать операторы сдвига и поворота, если второй операнд (на сколько сдвигаем/поворачиваем) будет отрицательным.</p> MicroTESK - Bug #3996 (Closed): [translator] Support for long types (64-bit) in expressionshttps://forge.ispras.ru/issues/39962013-03-11T09:47:24ZAndrei Tatarnikovandrewt@ispras.ru
<p>Сейчас не поддерживаются числа больше 32-х бит (int). При трансляции встречаются выражения, использующие 64-битные константы и транслирующиеся напрямую в Java код (без упаковки в классы Data/RawData). Такие выражения мы не можем оттраслировать т.к. не используем тип long при трансляции в Java. Нужно его использовать.</p>
<p>if (sum < 0xffffffff80000001) then <br /> GPR[rd] = 0x80000001;<br /> CPSR<27..27> = 1;<br />else<br /> GPR[rd] = op1 - op2;<br />endif;</p> MicroTESK - Bug #3995 (Closed): [translator] Support for bitfields using non-constant expressionshttps://forge.ispras.ru/issues/39952013-03-11T09:39:51ZAndrei Tatarnikovandrewt@ispras.ru
<p>Для правильной индентификации типов при обращении к битовым полям вычисляется размер поля (на этапе трансляции).<br />Индексные выражения, как правило, - статически вычисляемые константные выражения. Однако, возможны следующие варианты:</p>
<p>shifter_carry_out = GPR[r]<amount-1..amount-1>;</p>
<p>Такой код не будет транслироваться т.к. amount - не константа. Однако, размер поля можно посчтитать и видно, что он будет равен 1.<br />В модели ARM встречается несколько подобных симметричных конструкций. Для них можно и НУЖНО вычислять размер поля.</p>