# Path: arybo/lib/exprs_passes.py
# class CachePass(object):
# class ModifyingPass(CachePass):
# class LowerRolRor(ModifyingPass):
#     def __init__(self):
#     def visit_wrapper(self, e, cb):
#     def visit(self, e):
#     def visit_Expr(self, e):
#     def visit_Rol(self, e):
#     def visit_Ror(self, e):
# def wrap_pass(cls):
#     def f(e):
#         P = cls()


    import llvmlite.ir as ll
    import llvmlite.binding as llvm
    import ctypes
import six
import collections
import arybo.lib.mba_exprs as EX
from arybo.lib.exprs_passes import lower_rol_ror, CachePass
            EX.ExprSub: self.IRB.sub,
            EX.ExprMul: self.IRB.mul,
            EX.ExprShl: self.IRB.shl,
            EX.ExprLShr: self.IRB.lshr,
            EX.ExprAShr: self.IRB.ashr
        }
        op = ops[type(e)]
        return self.visit_nary_args(e, op)

    def visit_Div(self, e):
        return self.visit_nary_args(e, self.IRB.sdiv if e.is_signed else self.IRB.udiv)

    def visit_Rem(self, e):
        return self.visit_nary_args(e, self.IRB.srem if e.is_signed else self.IRB.urem)

    def visit_NaryOp(self, e):
        ops = {
            EX.ExprXor: self.IRB.xor,
            EX.ExprAnd: self.IRB.and_,
            EX.ExprOr: self.IRB.or_,
        }
        op = ops[type(e)]
        return self.visit_nary_args(e, op)

    def visit_Cmp(self, e):
        f = self.IRB.icmp_signed if e.is_signed else self.IRB.icmp_unsigned
        cmp_op = {
            EX.ExprCmp.OpEq:  '==',
            EX.ExprCmp.OpNeq: '!=',
            EX.ExprCmp.OpLt:  '<',

# Path: arybo/lib/exprs_passes.py
# class CachePass(object):
# class ModifyingPass(CachePass):
# class LowerRolRor(ModifyingPass):
#     def __init__(self):
#     def visit_wrapper(self, e, cb):
#     def visit(self, e):
#     def visit_Expr(self, e):
#     def visit_Rol(self, e):
#     def visit_Ror(self, e):
# def wrap_pass(cls):
#     def f(e):
#         P = cls()


# Path: arybo/lib/exprs_asm.py
    import llvmlite.ir as ll
    import llvmlite.binding as llvm
    import ctypes
import six
import collections
import arybo.lib.mba_exprs as EX
from arybo.lib.exprs_passes import lower_rol_ror, CachePass

            EX.ExprSub: self.IRB.sub,
            EX.ExprMul: self.IRB.mul,
            EX.ExprShl: self.IRB.shl,
            EX.ExprLShr: self.IRB.lshr,
            EX.ExprAShr: self.IRB.ashr
        }
        op = ops[type(e)]
        return self.visit_nary_args(e, op)

    def visit_Div(self, e):
        return self.visit_nary_args(e, self.IRB.sdiv if e.is_signed else self.IRB.udiv)

    def visit_Rem(self, e):
        return self.visit_nary_args(e, self.IRB.srem if e.is_signed else self.IRB.urem)

    def visit_NaryOp(self, e):
        ops = {
            EX.ExprXor: self.IRB.xor,
            EX.ExprAnd: self.IRB.and_,
            EX.ExprOr: self.IRB.or_,
        }
        op = ops[type(e)]
        return self.visit_nary_args(e, op)

    def visit_Cmp(self, e):
        f = self.IRB.icmp_signed if e.is_signed else self.IRB.icmp_unsigned
        cmp_op = {
            EX.ExprCmp.OpEq:  '==',
            EX.ExprCmp.OpNeq: '!=',
            EX.ExprCmp.OpLt:  '<',

            EX.ExprCmp.OpLte: '<=',