Project

General

Profile

Actions

Bug #10011

open

Необходима возможность преобразования конструкции if-then-else в mir представление

Added by Alexander Protsenko almost 5 years ago. Updated over 1 year ago.

Status:
New
Priority:
High
Category:
nML Translator
Target version:
Start date:
12/24/2019
Due date:
% Done:

0%

Estimated time:
Detected in build:
svn
Platform:
Published in build:

Description

Пример:

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)

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;

Actions

Also available in: Atom PDF