Open-Source Projects: Issueshttps://forge.ispras.ru/https://forge.ispras.ru/favicon.ico?16490126692023-03-06T15:03:36ZOpen-Source Projects
Redmine MicroTESK - Bug #12223 (New): Конфликт инструкций с разными модификаторами (op, internal op) и с ...https://forge.ispras.ru/issues/122232023-03-06T15:03:36ZAlexander Protsenkoprotsenko@ispras.ru
<p>Пример:<br /><pre>
op ands_bitmask (rd: REG, rn: REG, N: BIT, imms: card(6), immr: card(6))
internal op ands_bitmask_32n (rd: REG_32, rn: REG_32, N: BIT, imms: card(6), immr: card(6))
init = {}
syntax = format("ands %s, %s, %s", rd.syntax, rn.syntax, lsx(sf_53, wmask).syntax)
image = format("%22s%5s%5s", lix(sf_53, N, imms, immr, opc_53).image, rn.image, rd.image)
action = {}
</pre><br />Спецификация собирается, но инструкция ands_bitmask не доступна в шаблонах.</p> MicroTESK - Task #12027 (New): SMT Solvers: CVC4 -> CVC5https://forge.ispras.ru/issues/120272022-11-02T10:34:51ZAlexander Protsenkoprotsenko@ispras.ru
<p>Обновить используемый в инструменте MicroTESK SMT Solvers CVC4 до CVC5.</p> MicroTESK - Bug #11695 (New): error: cannot find symbol (зависимость mode от op)https://forge.ispras.ru/issues/116952022-06-28T10:27:08ZAlexander Protsenkoprotsenko@ispras.ru
<p>Описание ошибки:<br /><pre>
internal op imm4_syntax_i32(imm: imm4)
init = {}
syntax = format("0x%x", sign_extend(i32, imm))
mode BRANCH_IMM4(imm: int(4)) = imm
init = {
jump_imm4 = imm;
}
syntax = format("%s", imm4_syntax_i32(imm).syntax)
image = format("%s", imm)
</pre></p>
<p>Ошибка:<br /><pre>
mode\BRANCH_IMM4.java:72: error: cannot find symbol
return String.format("%s", new imm4_syntax_i32(imm).text(vars__));
^
symbol: class imm4_syntax_i32
location: class BRANCH_IMM4
</pre></p>
<p>В BRANCH_IMM4.java отсутствует импорт imm4_syntax_i32.</p> MicroTESK - Task #10193 (New): Cache instances configurationhttps://forge.ispras.ru/issues/101932020-04-01T07:23:10ZAlexander Kamkinaskamkin@gmail.com
<p>MMU specifications look like they are written for a single core. That's OK and, I think, it should be so. However, it is unclear how to instantiate the caches and connects them with the cores, the main memory and each other in multi-core settings. There should be a kind of configuration.</p>
<p>The modeling library provides the following mechanisms.</p>
<p><code>CacheUnit</code>'s constructor has the <code>next</code> parameter, which is a reference to the next-level cache instance or the main memory (<code>null</code> if the <code>next</code> attribute is not specified):</p>
<pre><code class="java syntaxhl" data-language="java"><span class="kd">public</span> <span class="nf">CacheUnit</span><span class="o">(...,</span> <span class="kd">final</span> <span class="nc">Buffer</span><span class="o"><?</span> <span class="kd">extends</span> <span class="nc">Struct</span><span class="o"><?>,</span> <span class="no">A</span><span class="o">></span> <span class="n">next</span><span class="o">)</span>
</code></pre>
<p>Also, <code>CacheUnit</code> implements the <code>addNeighbor</code> method that links the cache instance with the same-level ones:</p>
<pre><code class="java syntaxhl" data-language="java"><span class="kd">public</span> <span class="kt">void</span> <span class="nf">addNeighbor</span><span class="o">(</span><span class="kd">final</span> <span class="nc">CacheUnit</span><span class="o"><?,</span> <span class="no">A</span><span class="o">></span> <span class="n">other</span><span class="o">)</span>
</code></pre> Fortress - Bug #10177 (Feedback): TreeVisitor's SKIP status does not work as expectedhttps://forge.ispras.ru/issues/101772020-03-24T08:49:09ZAlexander Kamkinaskamkin@gmail.com
<p>When I call <code>setStatus(Status.SKIP)</code> in <code>onOperationBegin(node)</code>, I expect the visitor will not visit the node's children but will visit the node's neighbors.<br />However, the call skips visiting the neighbors.</p> MicroTESK - Bug #10061 (New): Buffers are now shared among all processing elementshttps://forge.ispras.ru/issues/100612020-01-23T08:22:05ZAlexander Kamkinaskamkin@gmail.com
<ol>
<li>By default, each buffer (unless it is memory mapped) is local.</li>
<li>To make a buffer global, one should write <code>shared</code> before the buffer declaration.</li>
<li>The memory plugin is not responsible for resetting memory- and register-mapped buffers.</li>
</ol>
<p>Classes to be modified: <code>Model</code>, <code>ProcessingElement</code>, <code>MmuPlugin</code>, etc.</p> MicroTESK - Bug #10011 (New): Необходима возможность преобразования конструкции if-then-else в mi...https://forge.ispras.ru/issues/100112019-12-24T17:00:39ZAlexander Protsenkoprotsenko@ispras.ru
<p>Пример:<br /><pre>
inline calls
PASS: inline 'general_rev_op_32.action'
PASS: inline call 'REG_32.read'
PASS: inline call 'general_rev.action'
********************************************************************************
ATTENTION! An unexpected error has occurred:
java.lang.IllegalArgumentException: Bit vector sizes do not match: 1 != 6.
The program will be terminated. Please contact us at:
microtesk-support@ispras.ru
We are sorry for the inconvenience.
Exception stack:
java.lang.IllegalArgumentException: Bit vector sizes do not match: 1 != 6.
at ru.ispras.fortress.data.types.bitvector.BitVectorMath.checkEqualSize(BitVectorMath.java:926)
at ru.ispras.fortress.data.types.bitvector.BitVectorMath.transform(BitVectorMath.java:902)
at ru.ispras.fortress.data.types.bitvector.BitVectorMath.add(BitVectorMath.java:682)
at ru.ispras.microtesk.translator.mir.BvOpcode$1.evalBitVector(Instruction.java:412)
at ru.ispras.microtesk.translator.mir.BvOpcode.evalConst(Instruction.java:512)
at ru.ispras.microtesk.translator.mir.EvalContext.visit(EvalContext.java:74)
at ru.ispras.microtesk.translator.mir.Instruction$Assignment.accept(Instruction.java:30)
at ru.ispras.microtesk.translator.mir.EvalContext.eval(EvalContext.java:59)
at ru.ispras.microtesk.translator.mir.InlinePass.apply(InlinePass.java:28)
at ru.ispras.microtesk.translator.mir.MirPassDriver.apply(MirPassDriver.java:46)
at ru.ispras.microtesk.translator.mir.MirPassDriver.run(MirPassDriver.java:56)
at ru.ispras.microtesk.translator.mir.MirTransHandler.processIr(MirTransHandler.java:72)
at ru.ispras.microtesk.translator.mir.MirTransHandler.processIr(MirTransHandler.java:30)
at ru.ispras.microtesk.translator.Translator.processIr(Translator.java:84)
at ru.ispras.microtesk.translator.nml.NmlTranslator.start(NmlTranslator.java:133)
at ru.ispras.microtesk.translator.Translator.translate(Translator.java:201)
at ru.ispras.microtesk.MicroTESK.translate(MicroTESK.java:168)
at ru.ispras.microtesk.MicroTESK.runTask(MicroTESK.java:141)
at ru.ispras.microtesk.MicroTESK.main(MicroTESK.java:79)
</pre><br /><pre>
var V_var[card(6)]
internal op general_rev (x: DWORD, rev_op: card(2), size: BIT)
action = {
if rev_op == RevOp_REV16 then V_var = 0b001000;
elif rev_op == RevOp_REV32 then V_var = 0b011000;
elif rev_op == RevOp_REV64 then V_var = 0b111000;
elif rev_op == RevOp_RBIT then
---> V_var = if size == 0 then coerce(card(6), 0b111111) else coerce(card(6), 0b011111) endif;
endif;
</pre></p> MicroTESK - Developer Request #9472 (Open): Неочевидные преобразования типов при вычислении выраж...https://forge.ispras.ru/issues/94722019-02-05T09:25:55ZAlexander Protsenkoprotsenko@ispras.ru
<pre>
trace("store_global: MEM_WORD 1");
tmp_qword = MEM[mem_index + 1]::MEM[mem_index];
trace("store_global: MEM_WORD 2 tmp_bit_offset = 0x%x", tmp_bit_offset);
tmp_qword<tmp_bit_offset + 31..0+tmp_bit_offset> = rs2_op<31..0>;
trace("store_global: MEM_WORD 3");
MEM[mem_index + 1]::MEM[mem_index] = tmp_qword;
trace("store_global: MEM_WORD 4");
</pre>
<pre>
Mmu.PreTranslateAddress: satp.mode=0. No translation or protection.
PreTranslateAddress
PreTranslateAddress: read 2
PreTranslateAddress: read 3
store_global: MEM_WORD 2 tmp_bit_offset = 0x28
********************************************************************************
ATTENTION! An unexpected error has occurred:
java.lang.IllegalArgumentException: Assigning 32-bit data to 34-bit location is not allowed.
The program will be terminated. Please contact us at:
microtesk-support@ispras.ru
We are sorry for the inconvenience.
Exception stack:
java.lang.IllegalArgumentException: Assigning 32-bit data to 34-bit location is not allowed.
at ru.ispras.microtesk.model.memory.Location.store(ru/ispras/microtesk/model/memory/Location.java:131)
at ru.ispras.microtesk.model.riscv.op.store_global.action(ru/ispras/microtesk/model/riscv/op/store_global.java:99)
at ru.ispras.microtesk.model.IsaPrimitive.execute(ru/ispras/microtesk/model/IsaPrimitive.java:183)
at ru.ispras.microtesk.model.riscv.op.store_rvi.action(ru/ispras/microtesk/model/riscv/op/store_rvi.java:74)
at ru.ispras.microtesk.model.IsaPrimitive.execute(ru/ispras/microtesk/model/IsaPrimitive.java:183)
at ru.ispras.microtesk.model.riscv.op.sw.action(ru/ispras/microtesk/model/riscv/op/sw.java:118)
at ru.ispras.microtesk.model.IsaPrimitive.execute(ru/ispras/microtesk/model/IsaPrimitive.java:183)
at ru.ispras.microtesk.model.riscv.op.instruction.action(ru/ispras/microtesk/model/riscv/op/instruction.java:77)
at ru.ispras.microtesk.model.IsaPrimitive.execute(ru/ispras/microtesk/model/IsaPrimitive.java:183)
at ru.ispras.microtesk.model.InstructionCall.execute(ru/ispras/microtesk/model/InstructionCall.java:68)
at ru.ispras.microtesk.test.template.ConcreteCall.execute(ru/ispras/microtesk/test/template/ConcreteCall.java:155)
at ru.ispras.microtesk.test.Executor.executeCall(ru/ispras/microtesk/test/Executor.java:455)
at ru.ispras.microtesk.test.Executor.executeToBreak(ru/ispras/microtesk/test/Executor.java:348)
at ru.ispras.microtesk.test.Executor.execute(ru/ispras/microtesk/test/Executor.java:276)
at ru.ispras.microtesk.test.TemplateProcessor.runExecution(ru/ispras/microtesk/test/TemplateProcessor.java:707)
at ru.ispras.microtesk.test.TemplateProcessor.runExecutionFromStart(ru/ispras/microtesk/test/TemplateProcessor.java:723)
at ru.ispras.microtesk.test.TemplateProcessor.finish(ru/ispras/microtesk/test/TemplateProcessor.java:193)
at ru.ispras.microtesk.test.template.Template.endMainSection(ru/ispras/microtesk/test/template/Template.java:213)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at RUBY.generate(C:/!microtesk/MicroTESK-RISC-V/microtesk-riscv/microtesk-riscv/build/target/lib/ruby/template.rb:1066)
at RUBY.main(C:\!microtesk\MicroTESK-RISC-V\microtesk-riscv\microtesk-riscv\build\target\lib\ruby\microtesk.rb:33)
at org.jruby.RubyHash.each(org/jruby/RubyHash.java:1342)
at RUBY.main(C:\!microtesk\MicroTESK-RISC-V\microtesk-riscv\microtesk-riscv\build\target\lib\ruby\microtesk.rb:29)
at RUBY.(root)(C:\!microtesk\MicroTESK-RISC-V\microtesk-riscv\microtesk-riscv\build\target\lib\ruby\microtesk.rb:52)
at ru.ispras.microtesk.RubyRunner.run(ru/ispras/microtesk/RubyRunner.java:62)
at ru.ispras.microtesk.ScriptRunner.run(ru/ispras/microtesk/ScriptRunner.java:43)
at ru.ispras.microtesk.test.TestEngine.generate(ru/ispras/microtesk/test/TestEngine.java:172)
at ru.ispras.microtesk.MicroTESK.generate(ru/ispras/microtesk/MicroTESK.java:284)
at ru.ispras.microtesk.MicroTESK.runTask(ru/ispras/microtesk/MicroTESK.java:131)
at ru.ispras.microtesk.MicroTESK.main(ru/ispras/microtesk/MicroTESK.java:79)
********************************************************************************
</pre>
<p>Возможно стоит выводить больше информации, например имена переменных.</p> MicroTESK - Bug #8696 (New): Parsing an mmu-file with empty read and write definitions causes Ill...https://forge.ispras.ru/issues/86962018-01-30T13:22:00ZAlexander Kamkinaskamkin@gmail.com
<pre>
java.lang.IllegalArgumentException: Failed to determine target buffer for attribute: read
at ru.ispras.fortress.util.InvariantChecks.checkTrue(InvariantChecks.java:53)
at ru.ispras.fortress.util.InvariantChecks.checkNotNull(InvariantChecks.java:109)
at ru.ispras.microtesk.mmu.translator.generation.spec.MemoryControlFlowExplorer.<init>(MemoryControlFlowExplorer.java:49)
at ru.ispras.microtesk.mmu.translator.generation.sim.SimGenerator.processIr(SimGenerator.java:60)
at ru.ispras.microtesk.mmu.translator.generation.sim.SimGenerator.processIr(SimGenerator.java:36)
at ru.ispras.microtesk.translator.Translator.processIr(Translator.java:84)
at ru.ispras.microtesk.mmu.translator.MmuTranslator.start(MmuTranslator.java:136)
at ru.ispras.microtesk.translator.Translator.translate(Translator.java:201)
at ru.ispras.microtesk.MicroTESK.translate(MicroTESK.java:162)
at ru.ispras.microtesk.MicroTESK.runTask(MicroTESK.java:135)
at ru.ispras.microtesk.MicroTESK.main(MicroTESK.java:73)
</pre> MicroTESK - Task #6065 (New): Handling marks with exported symbols in the coverage extractorhttps://forge.ispras.ru/issues/60652015-06-19T03:54:09ZAlexander Kamkinaskamkin@gmail.com
<ol>
<li>External variables should be stored in the internal representation.</li>
<li>There should be a possibility to write constrains over external variables.</li>
</ol> MicroTESK - Task #6064 (New): Translator support for exporting symbols in markshttps://forge.ispras.ru/issues/60642015-06-19T03:51:36ZAlexander Kamkinaskamkin@gmail.com
<p>The syntax is as follows:</p>
<pre>
mark("MarkIdentifier" {, name=expr}*)
</pre> Fortress - Feature #5451 (New): Support external rules in TransformerRule interfacehttps://forge.ispras.ru/issues/54512014-11-26T12:58:41ZArtem Kotsynyak
<p>TransformerRules are dedicated for use in NodeTransformer with other rules, but interface implementations has no information about other rules, therefore it may introduce inconsistencies in transformed expressions accordingly to entire set as a whole. Since given transforms are considered local, i.e. should match and replace only limited (and small) subgraph, it is reasonable to support external rules in interface instead of multiple transformation runs. Consider using abstract class in place of interface to enforce respecting external rules.</p> Fortress - Task #5211 (Open): Unit-тесты для трансформеров и калькулятораhttps://forge.ispras.ru/issues/52112014-08-21T06:38:22ZAlexander Kamkinaskamkin@gmail.com
<ol>
<li>Необходима база (массив, список) разнообразных выражений (разные константы, разные операции, связывание переменных и т.п.).</li>
<li>Необходимы тесты для всех трансформаторов (хотя бы проверка типа падает/не падает).</li>
</ol> Fortress - Task #4713 (New): SMT-LIB structureshttps://forge.ispras.ru/issues/47132014-03-17T06:59:53ZSergey Smolovsmolov@ispras.ru
<p>Реализовать поддержку структур (record) как типа данных языка SMT-LIB.</p> Fortress - Task #4523 (New): Implementing a solver for simple constraintshttps://forge.ispras.ru/issues/45232013-10-03T04:32:56ZAlexander Kamkinaskamkin@gmail.com
<p>Цель - генерация рандомизированных данных, удовлетворяющих несложным ограничениям (constrained random generation).</p>
<ol>
<li>Определить и описать в Wiki класс рассматриваемых ограничений.</li>
<li>Реализовать солвер (постараться добиться равномерного распределение данных, удовлетворяющих ограничениям).</li>
<li>Протестировать солвер (не берется за сложные ограничения, решает простые ограничения, решает их правильно, распределение данных близко к равномерному).</li>
</ol>