about summary refs log tree commit diff stats
path: root/miasm2/arch/arm/sem.py
diff options
context:
space:
mode:
authorCamille Mougey <commial@gmail.com>2018-10-06 16:43:55 +0200
committerGitHub <noreply@github.com>2018-10-06 16:43:55 +0200
commit369371ca24c5f4fd6670cb36b80fbd29650de7d0 (patch)
tree7b9b319f3f365cb8b71b5dcf1f07f13559798513 /miasm2/arch/arm/sem.py
parent75b389f70e7cc6640cbfb62268ba89f8985be1ed (diff)
parent9c4c548e372311f6d685647b3cfed35e1579ad54 (diff)
downloadmiasm-369371ca24c5f4fd6670cb36b80fbd29650de7d0.tar.gz
miasm-369371ca24c5f4fd6670cb36b80fbd29650de7d0.zip
Merge pull request #855 from serpilliere/exprassign
Exprassign
Diffstat (limited to 'miasm2/arch/arm/sem.py')
-rw-r--r--miasm2/arch/arm/sem.py384
1 files changed, 192 insertions, 192 deletions
diff --git a/miasm2/arch/arm/sem.py b/miasm2/arch/arm/sem.py
index 600ad586..f955b585 100644
--- a/miasm2/arch/arm/sem.py
+++ b/miasm2/arch/arm/sem.py
@@ -14,16 +14,16 @@ EXCEPT_PRIV_INSN = (1 << 17)
 
 
 def update_flag_zf(a):
-    return [ExprAff(zf, ExprOp("FLAG_EQ", a))]
+    return [ExprAssign(zf, ExprOp("FLAG_EQ", a))]
 
 
 def update_flag_zf_eq(a, b):
-    return [ExprAff(zf, ExprOp("FLAG_EQ_CMP", a, b))]
+    return [ExprAssign(zf, ExprOp("FLAG_EQ_CMP", a, b))]
 
 
 def update_flag_nf(arg):
     return [
-        ExprAff(
+        ExprAssign(
             nf,
             ExprOp("FLAG_SIGN_SUB", arg, ExprInt(0, arg.size))
         )
@@ -47,22 +47,22 @@ def check_ops_msb(a, b, c):
 
 def update_flag_add_cf(op1, op2):
     "Compute cf in @op1 + @op2"
-    return [ExprAff(cf, ExprOp("FLAG_ADD_CF", op1, op2))]
+    return [ExprAssign(cf, ExprOp("FLAG_ADD_CF", op1, op2))]
 
 
 def update_flag_add_of(op1, op2):
     "Compute of in @op1 + @op2"
-    return [ExprAff(of, ExprOp("FLAG_ADD_OF", op1, op2))]
+    return [ExprAssign(of, ExprOp("FLAG_ADD_OF", op1, op2))]
 
 
 def update_flag_sub_cf(op1, op2):
     "Compote CF in @op1 - @op2"
-    return [ExprAff(cf, ExprOp("FLAG_SUB_CF", op1, op2) ^ ExprInt(1, 1))]
+    return [ExprAssign(cf, ExprOp("FLAG_SUB_CF", op1, op2) ^ ExprInt(1, 1))]
 
 
 def update_flag_sub_of(op1, op2):
     "Compote OF in @op1 - @op2"
-    return [ExprAff(of, ExprOp("FLAG_SUB_OF", op1, op2))]
+    return [ExprAssign(of, ExprOp("FLAG_SUB_OF", op1, op2))]
 
 
 def update_flag_arith_add_co(arg1, arg2):
@@ -78,7 +78,7 @@ def update_flag_arith_add_zn(arg1, arg2):
     """
     e = []
     e += update_flag_zf_eq(arg1, -arg2)
-    e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUB", arg1, -arg2))]
+    e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUB", arg1, -arg2))]
     return e
 
 
@@ -98,17 +98,17 @@ def update_flag_arith_sub_zn(arg1, arg2):
     """
     e = []
     e += update_flag_zf_eq(arg1, arg2)
-    e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUB", arg1, arg2))]
+    e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUB", arg1, arg2))]
     return e
 
 
 
 
 def update_flag_zfaddwc_eq(arg1, arg2, arg3):
-    return [ExprAff(zf, ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))]
+    return [ExprAssign(zf, ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))]
 
 def update_flag_zfsubwc_eq(arg1, arg2, arg3):
-    return [ExprAff(zf, ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))]
+    return [ExprAssign(zf, ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))]
 
 
 def update_flag_arith_addwc_zn(arg1, arg2, arg3):
@@ -117,7 +117,7 @@ def update_flag_arith_addwc_zn(arg1, arg2, arg3):
     """
     e = []
     e += update_flag_zfaddwc_eq(arg1, arg2, arg3)
-    e += [ExprAff(nf, ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))]
+    e += [ExprAssign(nf, ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))]
     return e
 
 
@@ -127,18 +127,18 @@ def update_flag_arith_subwc_zn(arg1, arg2, arg3):
     """
     e = []
     e += update_flag_zfsubwc_eq(arg1, arg2, arg3)
-    e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))]
+    e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))]
     return e
 
 
 def update_flag_addwc_cf(op1, op2, op3):
     "Compute cf in @res = @op1 + @op2 + @op3"
-    return [ExprAff(cf, ExprOp("FLAG_ADDWC_CF", op1, op2, op3))]
+    return [ExprAssign(cf, ExprOp("FLAG_ADDWC_CF", op1, op2, op3))]
 
 
 def update_flag_addwc_of(op1, op2, op3):
     "Compute of in @res = @op1 + @op2 + @op3"
-    return [ExprAff(of, ExprOp("FLAG_ADDWC_OF", op1, op2, op3))]
+    return [ExprAssign(of, ExprOp("FLAG_ADDWC_OF", op1, op2, op3))]
 
 
 def update_flag_arith_addwc_co(arg1, arg2, arg3):
@@ -151,12 +151,12 @@ def update_flag_arith_addwc_co(arg1, arg2, arg3):
 
 def update_flag_subwc_cf(op1, op2, op3):
     "Compute cf in @res = @op1 + @op2 + @op3"
-    return [ExprAff(cf, ExprOp("FLAG_SUBWC_CF", op1, op2, op3) ^ ExprInt(1, 1))]
+    return [ExprAssign(cf, ExprOp("FLAG_SUBWC_CF", op1, op2, op3) ^ ExprInt(1, 1))]
 
 
 def update_flag_subwc_of(op1, op2, op3):
     "Compute of in @res = @op1 + @op2 + @op3"
-    return [ExprAff(of, ExprOp("FLAG_SUBWC_OF", op1, op2, op3))]
+    return [ExprAssign(of, ExprOp("FLAG_SUBWC_OF", op1, op2, op3))]
 
 
 def update_flag_arith_subwc_co(arg1, arg2, arg3):
@@ -184,10 +184,10 @@ def adc(ir, instr, a, b, c=None):
     if instr.name == 'ADCS' and a != PC:
         e += update_flag_arith_addwc_zn(arg1, arg2, cf)
         e += update_flag_arith_addwc_co(arg1, arg2, cf)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -200,10 +200,10 @@ def add(ir, instr, a, b, c=None):
     if instr.name == 'ADDS' and a != PC:
         e += update_flag_arith_add_zn(arg1, arg2)
         e += update_flag_arith_add_co(arg1, arg2)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -213,13 +213,13 @@ def l_and(ir, instr, a, b, c=None):
         b, c = a, b
     r = b & c
     if instr.name == 'ANDS' and a != PC:
-        e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', b, c))]
+        e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', b, c))]
         e += update_flag_nf(r)
 
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -228,10 +228,10 @@ def sub(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b - c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -243,10 +243,10 @@ def subs(ir, instr, a, b, c=None):
     r = b - c
     e += update_flag_arith_sub_zn(arg1, arg2)
     e += update_flag_arith_sub_co(arg1, arg2)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -255,10 +255,10 @@ def eor(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b ^ c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -269,13 +269,13 @@ def eors(ir, instr, a, b, c=None):
     arg1, arg2 = b, c
     r = arg1 ^ arg2
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))]
     e += update_flag_nf(r)
 
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -285,10 +285,10 @@ def rsb(ir, instr, a, b, c=None):
         b, c = a, b
     arg1, arg2 = c, b
     r = arg1 - arg2
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -300,10 +300,10 @@ def rsbs(ir, instr, a, b, c=None):
     r = arg1 - arg2
     e += update_flag_arith_sub_zn(arg1, arg2)
     e += update_flag_arith_sub_co(arg1, arg2)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -313,10 +313,10 @@ def sbc(ir, instr, a, b, c=None):
         b, c = a, b
     arg1, arg2 = b, c
     r = arg1 - (arg2 + (~cf).zeroExtend(32))
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -330,10 +330,10 @@ def sbcs(ir, instr, a, b, c=None):
     e += update_flag_arith_subwc_zn(arg1, arg2, ~cf)
     e += update_flag_arith_subwc_co(arg1, arg2, ~cf)
 
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -343,10 +343,10 @@ def rsc(ir, instr, a, b, c=None):
         b, c = a, b
     arg1, arg2 = c, b
     r = arg1 - (arg2 + (~cf).zeroExtend(32))
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -360,11 +360,11 @@ def rscs(ir, instr, a, b, c=None):
     e += update_flag_arith_subwc_zn(arg1, arg2, ~cf)
     e += update_flag_arith_subwc_co(arg1, arg2, ~cf)
 
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -373,7 +373,7 @@ def tst(ir, instr, a, b):
     arg1, arg2 = a, b
     r = arg1 & arg2
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', arg1, arg2))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', arg1, arg2))]
     e += update_flag_nf(r)
 
     return e, []
@@ -386,7 +386,7 @@ def teq(ir, instr, a, b, c=None):
     arg1, arg2 = b, c
     r = arg1 ^ arg2
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))]
     e += update_flag_nf(r)
 
     return e, []
@@ -417,10 +417,10 @@ def orr(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b | c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -429,10 +429,10 @@ def orn(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = ~(b | c)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -443,66 +443,66 @@ def orrs(ir, instr, a, b, c=None):
     arg1, arg2 = b, c
     r = arg1 | arg2
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', r))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))]
     e += update_flag_nf(r)
 
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
 def mov(ir, instr, a, b):
-    e = [ExprAff(a, b)]
+    e = [ExprAssign(a, b)]
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, b))
+        e.append(ExprAssign(ir.IRDst, b))
     return e, []
 
 
 def movt(ir, instr, a, b):
     r = a | b << ExprInt(16, 32)
-    e = [ExprAff(a, r)]
+    e = [ExprAssign(a, r)]
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
 def movs(ir, instr, a, b):
     e = []
-    e.append(ExprAff(a, b))
+    e.append(ExprAssign(a, b))
     # XXX TODO check
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', b))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', b))]
     e += update_flag_nf(b)
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, b))
+        e.append(ExprAssign(ir.IRDst, b))
     return e, []
 
 
 def mvn(ir, instr, a, b):
     r = b ^ ExprInt(-1, 32)
-    e = [ExprAff(a, r)]
+    e = [ExprAssign(a, r)]
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
 def mvns(ir, instr, a, b):
     e = []
     r = b ^ ExprInt(-1, 32)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     # XXX TODO check
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', r))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))]
     e += update_flag_nf(r)
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -516,7 +516,7 @@ def mrs(ir, instr, a, b):
         out.append(cf)
         out.append(zf)
         out.append(nf)
-        e.append(ExprAff(a, ExprCompose(*out)))
+        e.append(ExprAssign(a, ExprCompose(*out)))
     else:
         raise NotImplementedError("MRS not implemented")
     return e, []
@@ -524,10 +524,10 @@ def mrs(ir, instr, a, b):
 def msr(ir, instr, a, b):
     e = []
     if a.is_id('CPSR_cf'):
-        e.append(ExprAff(nf, b[31:32]))
-        e.append(ExprAff(zf, b[30:31]))
-        e.append(ExprAff(cf, b[29:30]))
-        e.append(ExprAff(of, b[28:29]))
+        e.append(ExprAssign(nf, b[31:32]))
+        e.append(ExprAssign(zf, b[30:31]))
+        e.append(ExprAssign(cf, b[29:30]))
+        e.append(ExprAssign(of, b[28:29]))
     else:
         raise NotImplementedError("MSR not implemented")
     return e, []
@@ -536,10 +536,10 @@ def msr(ir, instr, a, b):
 def neg(ir, instr, a, b):
     e = []
     r = - b
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def negs(ir, instr, a, b):
@@ -550,10 +550,10 @@ def bic(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b & (c ^ ExprInt(-1, 32))
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -564,13 +564,13 @@ def bics(ir, instr, a, b, c=None):
     tmp1, tmp2 = b, ~c
     r = tmp1 & tmp2
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', tmp1, tmp2))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', tmp1, tmp2))]
     e += update_flag_nf(r)
 
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -583,23 +583,23 @@ def sdiv(ir, instr, a, b, c=None):
     loc_except = ExprId(ir.loc_db.add_location(), ir.IRDst.size)
     loc_next = ExprLoc(ir.get_next_loc_key(instr), ir.IRDst.size)
 
-    e.append(ExprAff(ir.IRDst, ExprCond(c, loc_div, loc_except)))
+    e.append(ExprAssign(ir.IRDst, ExprCond(c, loc_div, loc_except)))
 
     do_except = []
-    do_except.append(ExprAff(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size)))
-    do_except.append(ExprAff(ir.IRDst, loc_next))
+    do_except.append(ExprAssign(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size)))
+    do_except.append(ExprAssign(ir.IRDst, loc_next))
     blk_except = IRBlock(loc_except.loc_key, [AssignBlock(do_except, instr)])
 
 
 
     r = ExprOp("idiv", b, c)
     do_div = []
-    do_div.append(ExprAff(a, r))
+    do_div.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        do_div.append(ExprAff(ir.IRDst, r))
+        do_div.append(ExprAssign(ir.IRDst, r))
 
-    do_div.append(ExprAff(ir.IRDst, loc_next))
+    do_div.append(ExprAssign(ir.IRDst, loc_next))
     blk_div = IRBlock(loc_div.loc_key, [AssignBlock(do_div, instr)])
 
     return e, [blk_div, blk_except]
@@ -616,22 +616,22 @@ def udiv(ir, instr, a, b, c=None):
     loc_except = ExprLoc(ir.loc_db.add_location(), ir.IRDst.size)
     loc_next = ExprLoc(ir.get_next_loc_key(instr), ir.IRDst.size)
 
-    e.append(ExprAff(ir.IRDst, ExprCond(c, loc_div, loc_except)))
+    e.append(ExprAssign(ir.IRDst, ExprCond(c, loc_div, loc_except)))
 
     do_except = []
-    do_except.append(ExprAff(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size)))
-    do_except.append(ExprAff(ir.IRDst, loc_next))
+    do_except.append(ExprAssign(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size)))
+    do_except.append(ExprAssign(ir.IRDst, loc_next))
     blk_except = IRBlock(loc_except.loc_key, [AssignBlock(do_except, instr)])
 
 
     r = ExprOp("udiv", b, c)
     do_div = []
-    do_div.append(ExprAff(a, r))
+    do_div.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        do_div.append(ExprAff(ir.IRDst, r))
+        do_div.append(ExprAssign(ir.IRDst, r))
 
-    do_div.append(ExprAff(ir.IRDst, loc_next))
+    do_div.append(ExprAssign(ir.IRDst, loc_next))
     blk_div = IRBlock(loc_div.loc_key, [AssignBlock(do_div, instr)])
 
     return e, [blk_div, blk_except]
@@ -640,10 +640,10 @@ def udiv(ir, instr, a, b, c=None):
 def mla(ir, instr, a, b, c, d):
     e = []
     r = (b * c) + d
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -651,20 +651,20 @@ def mlas(ir, instr, a, b, c, d):
     e = []
     r = (b * c) + d
     e += update_flag_zn(r)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
 def mls(ir, instr, a, b, c, d):
     e = []
     r = d - (b * c)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -673,10 +673,10 @@ def mul(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b * c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -686,73 +686,73 @@ def muls(ir, instr, a, b, c=None):
         b, c = a, b
     r = b * c
     e += update_flag_zn(r)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def umull(ir, instr, a, b, c, d):
     e = []
     r = c.zeroExtend(64) * d.zeroExtend(64)
-    e.append(ExprAff(a, r[0:32]))
-    e.append(ExprAff(b, r[32:64]))
+    e.append(ExprAssign(a, r[0:32]))
+    e.append(ExprAssign(b, r[32:64]))
     # r15/IRDst not allowed as output
     return e, []
 
 def umlal(ir, instr, a, b, c, d):
     e = []
     r = c.zeroExtend(64) * d.zeroExtend(64) + ExprCompose(a, b)
-    e.append(ExprAff(a, r[0:32]))
-    e.append(ExprAff(b, r[32:64]))
+    e.append(ExprAssign(a, r[0:32]))
+    e.append(ExprAssign(b, r[32:64]))
     # r15/IRDst not allowed as output
     return e, []
 
 def smull(ir, instr, a, b, c, d):
     e = []
     r = c.signExtend(64) * d.signExtend(64)
-    e.append(ExprAff(a, r[0:32]))
-    e.append(ExprAff(b, r[32:64]))
+    e.append(ExprAssign(a, r[0:32]))
+    e.append(ExprAssign(b, r[32:64]))
     # r15/IRDst not allowed as output
     return e, []
 
 def smlal(ir, instr, a, b, c, d):
     e = []
     r = c.signExtend(64) * d.signExtend(64) + ExprCompose(a, b)
-    e.append(ExprAff(a, r[0:32]))
-    e.append(ExprAff(b, r[32:64]))
+    e.append(ExprAssign(a, r[0:32]))
+    e.append(ExprAssign(b, r[32:64]))
     # r15/IRDst not allowed as output
     return e, []
 
 def b(ir, instr, a):
     e = []
-    e.append(ExprAff(PC, a))
-    e.append(ExprAff(ir.IRDst, a))
+    e.append(ExprAssign(PC, a))
+    e.append(ExprAssign(ir.IRDst, a))
     return e, []
 
 
 def bl(ir, instr, a):
     e = []
     l = ExprInt(instr.offset + instr.l, 32)
-    e.append(ExprAff(PC, a))
-    e.append(ExprAff(ir.IRDst, a))
-    e.append(ExprAff(LR, l))
+    e.append(ExprAssign(PC, a))
+    e.append(ExprAssign(ir.IRDst, a))
+    e.append(ExprAssign(LR, l))
     return e, []
 
 
 def bx(ir, instr, a):
     e = []
-    e.append(ExprAff(PC, a))
-    e.append(ExprAff(ir.IRDst, a))
+    e.append(ExprAssign(PC, a))
+    e.append(ExprAssign(ir.IRDst, a))
     return e, []
 
 
 def blx(ir, instr, a):
     e = []
     l = ExprInt(instr.offset + instr.l, 32)
-    e.append(ExprAff(PC, a))
-    e.append(ExprAff(ir.IRDst, a))
-    e.append(ExprAff(LR, l))
+    e.append(ExprAssign(PC, a))
+    e.append(ExprAssign(ir.IRDst, a))
+    e.append(ExprAssign(LR, l))
     return e, []
 
 
@@ -804,20 +804,20 @@ def st_ld_r(ir, instr, a, a2, b, store=False, size=32, s_ext=False, z_ext=False)
     dst = None
 
     if store:
-        e.append(ExprAff(m, a))
+        e.append(ExprAssign(m, a))
         if dmem:
-            e.append(ExprAff(ExprMem(ad + ExprInt(4, 32), size=size), a2))
+            e.append(ExprAssign(ExprMem(ad + ExprInt(4, 32), size=size), a2))
     else:
         if a == PC:
             dst = PC
-            e.append(ExprAff(ir.IRDst, m))
-        e.append(ExprAff(a, m))
+            e.append(ExprAssign(ir.IRDst, m))
+        e.append(ExprAssign(a, m))
         if dmem:
-            e.append(ExprAff(a2, ExprMem(ad + ExprInt(4, 32), size=size)))
+            e.append(ExprAssign(a2, ExprMem(ad + ExprInt(4, 32), size=size)))
 
     # XXX TODO check multiple write cause by wb
     if wb or postinc:
-        e.append(ExprAff(base, base + off))
+        e.append(ExprAssign(base, base + off))
     return e, []
 
 
@@ -890,17 +890,17 @@ def st_ld_m(ir, instr, a, b, store=False, postinc=False, updown=False):
     for i, r in enumerate(regs):
         ad = base + ExprInt(i * step, 32)
         if store:
-            e.append(ExprAff(ExprMem(ad, 32), r))
+            e.append(ExprAssign(ExprMem(ad, 32), r))
         else:
-            e.append(ExprAff(r, ExprMem(ad, 32)))
+            e.append(ExprAssign(r, ExprMem(ad, 32)))
             if r == PC:
-                e.append(ExprAff(ir.IRDst, ExprMem(ad, 32)))
+                e.append(ExprAssign(ir.IRDst, ExprMem(ad, 32)))
     # XXX TODO check multiple write cause by wb
     if wb:
         if postinc:
-            e.append(ExprAff(a, base + ExprInt(len(regs) * step, 32)))
+            e.append(ExprAssign(a, base + ExprInt(len(regs) * step, 32)))
         else:
-            e.append(ExprAff(a, base + ExprInt((len(regs) - 1) * step, 32)))
+            e.append(ExprAssign(a, base + ExprInt((len(regs) - 1) * step, 32)))
     if store:
         pass
     else:
@@ -944,8 +944,8 @@ def stmdb(ir, instr, a, b):
 def svc(ir, instr, a):
     e = []
     except_int = EXCEPT_INT_XX
-    e.append(ExprAff(exception_flags, ExprInt(except_int, 32)))
-    e.append(ExprAff(interrupt_num, a))
+    e.append(ExprAssign(exception_flags, ExprInt(except_int, 32)))
+    e.append(ExprAssign(interrupt_num, a))
     return e, []
 
 
@@ -960,10 +960,10 @@ def lsr(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b >> c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -972,14 +972,14 @@ def lsrs(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b >> c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', r))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))]
     e += update_flag_nf(r)
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def asr(ir, instr, a, b, c=None):
@@ -987,10 +987,10 @@ def asr(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = ExprOp("a>>", b, c)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def asrs(ir, instr, a, b, c=None):
@@ -998,14 +998,14 @@ def asrs(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = ExprOp("a>>", b, c)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', r))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))]
     e += update_flag_nf(r)
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def lsl(ir, instr, a, b, c=None):
@@ -1013,10 +1013,10 @@ def lsl(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b << c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -1025,28 +1025,28 @@ def lsls(ir, instr, a, b, c=None):
     if c is None:
         b, c = a, b
     r = b << c
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', r))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))]
     e += update_flag_nf(r)
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
 def rors(ir, instr, a, b):
     e = []
     r = ExprOp(">>>", a, b)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
 
-    e += [ExprAff(zf, ExprOp('FLAG_EQ', r))]
+    e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))]
     e += update_flag_nf(r)
 
     dst = get_dst(a)
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -1055,9 +1055,9 @@ def push(ir, instr, a):
     regs = list(a.args)
     for i in xrange(len(regs)):
         r = SP + ExprInt(-4 * len(regs) + 4 * i, 32)
-        e.append(ExprAff(ExprMem(r, 32), regs[i]))
+        e.append(ExprAssign(ExprMem(r, 32), regs[i]))
     r = SP + ExprInt(-4 * len(regs), 32)
-    e.append(ExprAff(SP, r))
+    e.append(ExprAssign(SP, r))
     return e, []
 
 
@@ -1067,13 +1067,13 @@ def pop(ir, instr, a):
     dst = None
     for i in xrange(len(regs)):
         r = SP + ExprInt(4 * i, 32)
-        e.append(ExprAff(regs[i], ExprMem(r, 32)))
+        e.append(ExprAssign(regs[i], ExprMem(r, 32)))
         if regs[i] == ir.pc:
             dst = ExprMem(r, 32)
     r = SP + ExprInt(4 * len(regs), 32)
-    e.append(ExprAff(SP, r))
+    e.append(ExprAssign(SP, r))
     if dst is not None:
-        e.append(ExprAff(ir.IRDst, dst))
+        e.append(ExprAssign(ir.IRDst, dst))
     return e, []
 
 
@@ -1081,7 +1081,7 @@ def cbz(ir, instr, a, b):
     e = []
     loc_next = ir.get_next_loc_key(instr)
     loc_next_expr = ExprLoc(loc_next, 32)
-    e.append(ExprAff(ir.IRDst, ExprCond(a, loc_next_expr, b)))
+    e.append(ExprAssign(ir.IRDst, ExprCond(a, loc_next_expr, b)))
     return e, []
 
 
@@ -1096,41 +1096,41 @@ def cbnz(ir, instr, a, b):
 def uxtb(ir, instr, a, b):
     e = []
     r = b[:8].zeroExtend(32)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = None
     if PC in a.get_r():
         dst = PC
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def uxth(ir, instr, a, b):
     e = []
     r = b[:16].zeroExtend(32)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = None
     if PC in a.get_r():
         dst = PC
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def sxtb(ir, instr, a, b):
     e = []
     r = b[:8].signExtend(32)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = None
     if PC in a.get_r():
         dst = PC
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def sxth(ir, instr, a, b):
     e = []
     r = b[:16].signExtend(32)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = None
     if PC in a.get_r():
         dst = PC
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -1139,11 +1139,11 @@ def ubfx(ir, instr, a, b, c, d):
     c = int(c)
     d = int(d)
     r = b[c:c+d].zeroExtend(32)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = None
     if PC in a.get_r():
         dst = PC
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 def bfc(ir, instr, a, b, c):
@@ -1161,11 +1161,11 @@ def bfc(ir, instr, a, b, c):
     if last < 32:
         out.append(a[last:])
     r = ExprCompose(*out)
-    e.append(ExprAff(a, r))
+    e.append(ExprAssign(a, r))
     dst = None
     if PC in a.get_r():
         dst = PC
-        e.append(ExprAff(ir.IRDst, r))
+        e.append(ExprAssign(ir.IRDst, r))
     return e, []
 
 
@@ -1181,19 +1181,19 @@ def pldw(ir, instr, a):
 
 def clz(ir, instr, a, b):
     e = []
-    e.append(ExprAff(a, ExprOp('cntleadzeros', b)))
+    e.append(ExprAssign(a, ExprOp('cntleadzeros', b)))
     return e, []
 
 def uxtab(ir, instr, a, b, c):
     e = []
-    e.append(ExprAff(a, b + (c & ExprInt(0xff, 32))))
+    e.append(ExprAssign(a, b + (c & ExprInt(0xff, 32))))
     return e, []
 
 
 def bkpt(ir, instr, a):
     e = []
-    e.append(ExprAff(exception_flags, ExprInt(EXCEPT_SOFT_BP, 32)))
-    e.append(ExprAff(bp_num, a))
+    e.append(ExprAssign(exception_flags, ExprInt(EXCEPT_SOFT_BP, 32)))
+    e.append(ExprAssign(bp_num, a))
     return e, []
 
 
@@ -1206,58 +1206,58 @@ def _extract_s16(arg, part):
 
 def smul(ir, instr, a, b, c):
     e = []
-    e.append(ExprAff(a, _extract_s16(b, instr.name[4]).signExtend(32) * _extract_s16(c, instr.name[5]).signExtend(32)))
+    e.append(ExprAssign(a, _extract_s16(b, instr.name[4]).signExtend(32) * _extract_s16(c, instr.name[5]).signExtend(32)))
     return e, []
 
 
 def smulw(ir, instr, a, b, c):
     e = []
     prod = b.signExtend(48) * _extract_s16(c, instr.name[5]).signExtend(48)
-    e.append(ExprAff(a, prod[16:48]))
+    e.append(ExprAssign(a, prod[16:48]))
     return e, [] # signed most significant 32 bits of the 48-bit result
 
 
 def tbb(ir, instr, a):
     e = []
     dst = PC + ExprInt(2, 32) * a.zeroExtend(32)
-    e.append(ExprAff(PC, dst))
-    e.append(ExprAff(ir.IRDst, dst))
+    e.append(ExprAssign(PC, dst))
+    e.append(ExprAssign(ir.IRDst, dst))
     return e, []
 
 
 def tbh(ir, instr, a):
     e = []
     dst = PC + ExprInt(2, 32) * a.zeroExtend(32)
-    e.append(ExprAff(PC, dst))
-    e.append(ExprAff(ir.IRDst, dst))
+    e.append(ExprAssign(PC, dst))
+    e.append(ExprAssign(ir.IRDst, dst))
     return e, []
 
 
 def smlabb(ir, instr, a, b, c, d):
     e = []
     result = (b[:16].signExtend(32) * c[:16].signExtend(32)) + d
-    e.append(ExprAff(a, result))
+    e.append(ExprAssign(a, result))
     return e, []
 
 
 def smlabt(ir, instr, a, b, c, d):
     e = []
     result = (b[:16].signExtend(32) * c[16:32].signExtend(32)) + d
-    e.append(ExprAff(a, result))
+    e.append(ExprAssign(a, result))
     return e, []
 
 
 def smlatb(ir, instr, a, b, c, d):
     e = []
     result = (b[16:32].signExtend(32) * c[:16].signExtend(32)) + d
-    e.append(ExprAff(a, result))
+    e.append(ExprAssign(a, result))
     return e, []
 
 
 def smlatt(ir, instr, a, b, c, d):
     e = []
     result = (b[16:32].signExtend(32) * c[16:32].signExtend(32)) + d
-    e.append(ExprAff(a, result))
+    e.append(ExprAssign(a, result))
     return e, []
 
 
@@ -1269,10 +1269,10 @@ def uadd8(ir, instr, a, b, c):
         sums.append(b[i:i+8] + c[i:i+8])
         ges.append((b[i:i+8].zeroExtend(9) + c[i:i+8].zeroExtend(9))[8:9])
 
-    e.append(ExprAff(a, ExprCompose(*sums)))
+    e.append(ExprAssign(a, ExprCompose(*sums)))
 
     for i, value in enumerate(ges):
-        e.append(ExprAff(ge_regs[i], value))
+        e.append(ExprAssign(ge_regs[i], value))
     return e, []
 
 
@@ -1283,14 +1283,14 @@ def sel(ir, instr, a, b, c):
     for i in xrange(4):
         parts.append(ExprCond(ge_regs[i], b[i*8:(i+1)*8], c[i*8:(i+1)*8]))
     result = ExprCompose(*parts)
-    e.append(ExprAff(a, result))
+    e.append(ExprAssign(a, result))
     return e, []
 
 
 def rev(ir, instr, a, b):
     e = []
     result = ExprCompose(b[24:32], b[16:24], b[8:16], b[:8])
-    e.append(ExprAff(a, result))
+    e.append(ExprAssign(a, result))
     return e, []
 
 
@@ -1438,9 +1438,9 @@ def add_condition_expr(ir, instr, cond, instr_ir, extra_ir):
             has_irdst = True
             break
     if not has_irdst:
-        instr_ir.append(ExprAff(ir.IRDst, loc_next_expr))
+        instr_ir.append(ExprAssign(ir.IRDst, loc_next_expr))
     e_do = IRBlock(loc_do, [AssignBlock(instr_ir, instr)])
-    e = [ExprAff(ir.IRDst, dst_cond)]
+    e = [ExprAssign(ir.IRDst, dst_cond)]
     return e, [e_do] + extra_ir
 
 mnemo_func = {}
@@ -1656,7 +1656,7 @@ class ir_arml(IntermediateRepresentation):
             if dst != self.pc:
                 dst = dst.replace_expr(pc_fixed)
             src = src.replace_expr(pc_fixed)
-            instr_ir[i] = ExprAff(dst, src)
+            instr_ir[i] = ExprAssign(dst, src)
 
         for idx, irblock in enumerate(extra_ir):
             extra_ir[idx] = irblock.modify_exprs(lambda expr: expr.replace_expr(pc_fixed) \
@@ -1706,7 +1706,7 @@ class ir_arml(IntermediateRepresentation):
 
         # Gen dummy irblock for IT instr
         loc_next = self.get_next_loc_key(instr)
-        dst = ExprAff(self.IRDst, ExprId(loc_next, 32))
+        dst = ExprAssign(self.IRDst, ExprId(loc_next, 32))
         dst_blk = AssignBlock([dst], instr)
         assignments.append(dst_blk)
         irblock = IRBlock(loc, assignments)
@@ -1727,7 +1727,7 @@ class ir_arml(IntermediateRepresentation):
                 local_cond = ~cond_eq
             else:
                 local_cond = cond_eq
-            dst = ExprAff(self.IRDst, ExprCond(local_cond, ExprLoc(loc_do, 32), ExprLoc(loc_next, 32)))
+            dst = ExprAssign(self.IRDst, ExprCond(local_cond, ExprLoc(loc_do, 32), ExprLoc(loc_next, 32)))
             dst_blk = AssignBlock([dst], instr)
             assignments.append(dst_blk)
             irblock = IRBlock(loc, assignments)
@@ -1743,7 +1743,7 @@ class ir_arml(IntermediateRepresentation):
             if split:
                 raise NotImplementedError("Unsupported instr in IT block (%s)" % instr)
 
-            dst = ExprAff(self.IRDst, ExprId(loc_next, 32))
+            dst = ExprAssign(self.IRDst, ExprId(loc_next, 32))
             dst_blk = AssignBlock([dst], instr)
             assignments.append(dst_blk)
             irblock = IRBlock(loc, assignments)
@@ -1824,7 +1824,7 @@ class ir_armtl(ir_arml):
             if dst != self.pc:
                 dst = dst.replace_expr(pc_fixed)
             src = src.replace_expr(pc_fixed)
-            instr_ir[i] = ExprAff(dst, src)
+            instr_ir[i] = ExprAssign(dst, src)
 
         for idx, irblock in enumerate(extra_ir):
             extra_ir[idx] = irblock.modify_exprs(lambda expr: expr.replace_expr(pc_fixed) \