Search in sources :

Example 21 with IExpr

use of com.dat3m.dartagnan.expression.IExpr in project Dat3M by hernanponcedeleon.

the class VisitorLitmusAArch64 method visitOffset.

private Register visitOffset(LitmusAArch64Parser.OffsetContext ctx, Register register) {
    Register result = programBuilder.getOrCreateRegister(mainThread, null, ARCH_PRECISION);
    IExpr expr = ctx.immediate() == null ? programBuilder.getOrErrorRegister(mainThread, ctx.expressionConversion().register32().id) : new IValue(new BigInteger(ctx.immediate().constant().getText()), ARCH_PRECISION);
    programBuilder.addChild(mainThread, EventFactory.newLocal(result, new IExprBin(register, IOpBin.PLUS, expr)));
    return result;
}
Also used : IExprBin(com.dat3m.dartagnan.expression.IExprBin) IValue(com.dat3m.dartagnan.expression.IValue) Register(com.dat3m.dartagnan.program.Register) BigInteger(java.math.BigInteger) IExpr(com.dat3m.dartagnan.expression.IExpr)

Example 22 with IExpr

use of com.dat3m.dartagnan.expression.IExpr in project Dat3M by hernanponcedeleon.

the class VisitorLitmusAArch64 method visitExpressionRegister32.

@Override
public IExpr visitExpressionRegister32(LitmusAArch64Parser.ExpressionRegister32Context ctx) {
    IExpr expr = programBuilder.getOrCreateRegister(mainThread, ctx.register32().id, ARCH_PRECISION);
    if (ctx.shift() != null) {
        IValue val = new IValue(new BigInteger(ctx.shift().immediate().constant().getText()), ARCH_PRECISION);
        expr = new IExprBin(expr, ctx.shift().shiftOperator().op, val);
    }
    return expr;
}
Also used : IExprBin(com.dat3m.dartagnan.expression.IExprBin) IValue(com.dat3m.dartagnan.expression.IValue) BigInteger(java.math.BigInteger) IExpr(com.dat3m.dartagnan.expression.IExpr)

Example 23 with IExpr

use of com.dat3m.dartagnan.expression.IExpr in project Dat3M by hernanponcedeleon.

the class VisitorBase method visitUnlock.

@Override
public List<Event> visitUnlock(Unlock e) {
    Register resultRegister = e.getResultRegister();
    IExpr address = e.getAddress();
    String mo = e.getMo();
    List<Event> events = eventSequence(newLoad(resultRegister, address, mo), newJump(new Atom(resultRegister, NEQ, IValue.ONE), (Label) e.getThread().getExit()), newStore(address, IValue.ZERO, mo));
    for (Event child : events) {
        child.addFilters(C11.LOCK, RMW);
    }
    return events;
}
Also used : Register(com.dat3m.dartagnan.program.Register) Label(com.dat3m.dartagnan.program.event.core.Label) Event(com.dat3m.dartagnan.program.event.core.Event) IExpr(com.dat3m.dartagnan.expression.IExpr) Atom(com.dat3m.dartagnan.expression.Atom)

Aggregations

IExpr (com.dat3m.dartagnan.expression.IExpr)23 Register (com.dat3m.dartagnan.program.Register)16 IConst (com.dat3m.dartagnan.expression.IConst)7 IExprBin (com.dat3m.dartagnan.expression.IExprBin)6 ExprInterface (com.dat3m.dartagnan.expression.ExprInterface)4 IValue (com.dat3m.dartagnan.expression.IValue)4 BigInteger (java.math.BigInteger)4 ExprsContext (com.dat3m.dartagnan.parsers.BoogieParser.ExprsContext)2 Event (com.dat3m.dartagnan.program.event.core.Event)2 RegWriter (com.dat3m.dartagnan.program.event.core.utils.RegWriter)2 MemoryObject (com.dat3m.dartagnan.program.memory.MemoryObject)2 ParsingException (com.dat3m.dartagnan.exception.ParsingException)1 Atom (com.dat3m.dartagnan.expression.Atom)1 IOpBin (com.dat3m.dartagnan.expression.op.IOpBin)1 PLUS (com.dat3m.dartagnan.expression.op.IOpBin.PLUS)1 ExprContext (com.dat3m.dartagnan.parsers.BoogieParser.ExprContext)1 Program (com.dat3m.dartagnan.program.Program)1 AliasAnalysis (com.dat3m.dartagnan.program.analysis.AliasAnalysis)1 Tag (com.dat3m.dartagnan.program.event.Tag)1 com.dat3m.dartagnan.program.event.core (com.dat3m.dartagnan.program.event.core)1