about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/arch/arm/sem.py2
-rw-r--r--miasm2/ir/translators/C.py14
-rw-r--r--miasm2/jitter/arch/JitCore_aarch64.c19
-rw-r--r--miasm2/jitter/arch/JitCore_aarch64.h15
-rw-r--r--miasm2/jitter/arch/JitCore_arm.c26
-rw-r--r--miasm2/jitter/arch/JitCore_arm.h9
-rw-r--r--miasm2/jitter/arch/JitCore_mips32.c19
-rw-r--r--miasm2/jitter/arch/JitCore_mips32.h15
-rw-r--r--miasm2/jitter/arch/JitCore_msp430.h12
-rw-r--r--miasm2/jitter/arch/JitCore_ppc32.c32
-rw-r--r--miasm2/jitter/arch/JitCore_ppc32.h5
-rw-r--r--miasm2/jitter/arch/JitCore_x86.c18
-rw-r--r--miasm2/jitter/arch/JitCore_x86.h19
-rw-r--r--miasm2/jitter/op_semantics.c16
-rw-r--r--miasm2/jitter/op_semantics.h23
15 files changed, 40 insertions, 204 deletions
diff --git a/miasm2/arch/arm/sem.py b/miasm2/arch/arm/sem.py
index 9e4da3f6..2cf2e5a4 100644
--- a/miasm2/arch/arm/sem.py
+++ b/miasm2/arch/arm/sem.py
@@ -1038,7 +1038,7 @@ def pldw(ir, instr, a):
 
 def clz(ir, instr, a, b):
     e = []
-    e.append(ExprAff(a, ExprOp('clz', b)))
+    e.append(ExprAff(a, ExprOp('cntleadzeros', b)))
     return e, []
 
 def uxtab(ir, instr, a, b, c):
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py
index bcffc364..26443b09 100644
--- a/miasm2/ir/translators/C.py
+++ b/miasm2/ir/translators/C.py
@@ -47,15 +47,9 @@ class TranslatorC(Translator):
                 return "%s(0x%x, %s)" % (expr.op,
                                              expr.args[0].size,
                                              self.from_expr(expr.args[0]))
-            elif expr.op in ['clz']:
-                return "%s(%s)" % (expr.op,
-                                   self.from_expr(expr.args[0]))
             elif expr.op == '!':
                 return "(~ %s)&0x%x" % (self.from_expr(expr.args[0]),
                                         size2mask(expr.args[0].size))
-            elif expr.op in ["hex2bcd", "bcd2hex"]:
-                return "%s_%d(%s)" % (expr.op, expr.args[0].size,
-                                      self.from_expr(expr.args[0]))
             elif (expr.op.startswith("double_to_") or
                   expr.op.endswith("_to_double")   or
                   expr.op.startswith("access_")    or
@@ -108,10 +102,10 @@ class TranslatorC(Translator):
                 return "segm2addr(jitcpu, %s, %s)" % (
                     self.from_expr(expr.args[0]), self.from_expr(expr.args[1]))
             elif expr.op in ['udiv', 'umod', 'idiv', 'imod']:
-                return '%s%d((vm_cpu_t*)jitcpu->cpu, %s, %s)' % (expr.op,
-                                                                 expr.args[0].size,
-                                                                 self.from_expr(expr.args[0]),
-                                                                 self.from_expr(expr.args[1]))
+                return '%s%d(%s, %s)' % (expr.op,
+                                         expr.args[0].size,
+                                         self.from_expr(expr.args[0]),
+                                         self.from_expr(expr.args[1]))
             elif expr.op in ["bcdadd", "bcdadd_cf"]:
                 return "%s_%d(%s, %s)" % (expr.op, expr.args[0].size,
                                           self.from_expr(expr.args[0]),
diff --git a/miasm2/jitter/arch/JitCore_aarch64.c b/miasm2/jitter/arch/JitCore_aarch64.c
index 0224bfe2..a8502ef9 100644
--- a/miasm2/jitter/arch/JitCore_aarch64.c
+++ b/miasm2/jitter/arch/JitCore_aarch64.c
@@ -284,25 +284,6 @@ PyObject* vm_set_mem(JitCpu *self, PyObject* args)
        return Py_None;
 }
 
-
-UDIV(16)
-UDIV(32)
-UDIV(64)
-
-UMOD(16)
-UMOD(32)
-UMOD(64)
-
-
-IDIV(16)
-IDIV(32)
-IDIV(64)
-
-IMOD(16)
-IMOD(32)
-IMOD(64)
-
-
 static PyMemberDef JitCpu_members[] = {
     {NULL}  /* Sentinel */
 };
diff --git a/miasm2/jitter/arch/JitCore_aarch64.h b/miasm2/jitter/arch/JitCore_aarch64.h
index c7fc3cea..fa50513f 100644
--- a/miasm2/jitter/arch/JitCore_aarch64.h
+++ b/miasm2/jitter/arch/JitCore_aarch64.h
@@ -49,19 +49,4 @@ typedef struct {
 
 void dump_gpregs(vm_cpu_t* vmcpu);
 
-uint64_t udiv64(vm_cpu_t* vmcpu, uint64_t a, uint64_t b);
-uint64_t umod64(vm_cpu_t* vmcpu, uint64_t a, uint64_t b);
-int64_t idiv64(vm_cpu_t* vmcpu, int64_t a, int64_t b);
-int64_t imod64(vm_cpu_t* vmcpu, int64_t a, int64_t b);
-
-uint32_t udiv32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-uint32_t umod32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-int32_t idiv32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-int32_t imod32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-
-uint16_t udiv16(vm_cpu_t* vmcpu, uint16_t a, uint16_t b);
-uint16_t umod16(vm_cpu_t* vmcpu, uint16_t a, uint16_t b);
-int16_t idiv16(vm_cpu_t* vmcpu, int16_t a, int16_t b);
-int16_t imod16(vm_cpu_t* vmcpu, int16_t a, int16_t b);
-
 #define RETURN_PC return BlockDst;
diff --git a/miasm2/jitter/arch/JitCore_arm.c b/miasm2/jitter/arch/JitCore_arm.c
index 60b8f95b..8a09ba6c 100644
--- a/miasm2/jitter/arch/JitCore_arm.c
+++ b/miasm2/jitter/arch/JitCore_arm.c
@@ -187,16 +187,6 @@ void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size)
 
 }
 
-
-UDIV(32)
-
-UMOD(32)
-
-IDIV(32)
-
-IMOD(32)
-
-
 void MEM_WRITE_08(JitCpu* jitcpu, uint64_t addr, uint8_t src)
 {
 	vm_MEM_WRITE_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
@@ -221,22 +211,6 @@ void MEM_WRITE_64(JitCpu* jitcpu, uint64_t addr, uint64_t src)
 	check_automod(jitcpu, addr, 64);
 }
 
-
-uint32_t clz(uint32_t arg)
-{
-
-	int i;
-
-	for (i=0; i<32; i++) {
-		if (arg & (1ull << (31-i)))
-			break;
-	}
-	return i;
-}
-
-
-
-
 PyObject* vm_set_mem(JitCpu *self, PyObject* args)
 {
        PyObject *py_addr;
diff --git a/miasm2/jitter/arch/JitCore_arm.h b/miasm2/jitter/arch/JitCore_arm.h
index 445ac44a..1f3ccaf2 100644
--- a/miasm2/jitter/arch/JitCore_arm.h
+++ b/miasm2/jitter/arch/JitCore_arm.h
@@ -38,13 +38,4 @@ typedef struct {
 
 void dump_gpregs(vm_cpu_t* vmcpu);
 
-
-uint32_t udiv32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-uint32_t umod32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-int32_t idiv32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-int32_t imod32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-
-
 #define RETURN_PC return BlockDst;
-
-uint32_t clz(uint32_t arg);
diff --git a/miasm2/jitter/arch/JitCore_mips32.c b/miasm2/jitter/arch/JitCore_mips32.c
index 2142e8cc..4ebfbec8 100644
--- a/miasm2/jitter/arch/JitCore_mips32.c
+++ b/miasm2/jitter/arch/JitCore_mips32.c
@@ -222,25 +222,6 @@ void check_automod(JitCpu* jitcpu, uint64_t addr, uint64_t size)
 }
 
 
-UDIV(16)
-UDIV(32)
-UDIV(64)
-
-UMOD(16)
-UMOD(32)
-UMOD(64)
-
-
-IDIV(16)
-IDIV(32)
-IDIV(64)
-
-IMOD(16)
-IMOD(32)
-IMOD(64)
-
-
-
 void MEM_WRITE_08(JitCpu* jitcpu, uint64_t addr, uint8_t src)
 {
 	vm_MEM_WRITE_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
diff --git a/miasm2/jitter/arch/JitCore_mips32.h b/miasm2/jitter/arch/JitCore_mips32.h
index b45cac2b..ff2045d7 100644
--- a/miasm2/jitter/arch/JitCore_mips32.h
+++ b/miasm2/jitter/arch/JitCore_mips32.h
@@ -335,19 +335,4 @@ typedef struct {
 
 void dump_gpregs(vm_cpu_t* vmcpu);
 
-uint64_t udiv64(vm_cpu_t* vmcpu, uint64_t a, uint64_t b);
-uint64_t umod64(vm_cpu_t* vmcpu, uint64_t a, uint64_t b);
-int64_t idiv64(vm_cpu_t* vmcpu, int64_t a, int64_t b);
-int64_t imod64(vm_cpu_t* vmcpu, int64_t a, int64_t b);
-
-uint32_t udiv32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-uint32_t umod32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-int32_t idiv32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-int32_t imod32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-
-uint16_t udiv16(vm_cpu_t* vmcpu, uint16_t a, uint16_t b);
-uint16_t umod16(vm_cpu_t* vmcpu, uint16_t a, uint16_t b);
-int16_t idiv16(vm_cpu_t* vmcpu, int16_t a, int16_t b);
-int16_t imod16(vm_cpu_t* vmcpu, int16_t a, int16_t b);
-
 #define RETURN_PC return BlockDst;
diff --git a/miasm2/jitter/arch/JitCore_msp430.h b/miasm2/jitter/arch/JitCore_msp430.h
index cad028a9..3934d37a 100644
--- a/miasm2/jitter/arch/JitCore_msp430.h
+++ b/miasm2/jitter/arch/JitCore_msp430.h
@@ -36,16 +36,4 @@ typedef struct {
 
 #define RETURN_PC return BlockDst;
 
-uint16_t bcdadd_16(uint16_t a, uint16_t b);
-
-uint16_t bcdadd_cf_16(uint16_t a, uint16_t b);
-
-uint16_t hex2bcd_16(uint16_t a);
-
-uint8_t hex2bcd_8(uint8_t a);
-
-uint8_t bcd2hex_8(uint8_t a);
-
-uint16_t bcd2hex_16(uint16_t a);
-
 void dump_gpregs(vm_cpu_t* vmcpu);
diff --git a/miasm2/jitter/arch/JitCore_ppc32.c b/miasm2/jitter/arch/JitCore_ppc32.c
index 7ea5e88f..616e7cfd 100644
--- a/miasm2/jitter/arch/JitCore_ppc32.c
+++ b/miasm2/jitter/arch/JitCore_ppc32.c
@@ -246,38 +246,6 @@ get_gpreg_offset_all(void) {
     return dict;
 }
 
-int32_t
-idiv32(struct vm_cpu *cpu, int32_t a, int32_t b) {
-    if (b == 0)
-	return 0;
-
-    return a / b;
-}
-
-uint32_t
-udiv32(struct vm_cpu *cpu, uint32_t a, uint32_t b) {
-    if (b == 0)
-	return 0;
-
-    return a / b;
-}
-
-int32_t
-imod32(struct vm_cpu *cpu, int32_t a, int32_t b) {
-    if (b == 0)
-	return 0;
-
-    return a % b;
-}
-
-uint32_t
-umod32(struct vm_cpu *cpu, uint32_t a, uint32_t b) {
-    if (b == 0)
-	return 0;
-
-    return a % b;
-}
-
 static PyGetSetDef JitCpu_getseters[] = {
     {"vmmngr",
      (getter)JitCpu_get_vmmngr, (setter)JitCpu_set_vmmngr,
diff --git a/miasm2/jitter/arch/JitCore_ppc32.h b/miasm2/jitter/arch/JitCore_ppc32.h
index 18cee358..5a048190 100644
--- a/miasm2/jitter/arch/JitCore_ppc32.h
+++ b/miasm2/jitter/arch/JitCore_ppc32.h
@@ -14,11 +14,6 @@ struct vm_cpu {
     uint32_t reserve_address;
 };
 
-int32_t idiv32(struct vm_cpu *, int32_t, int32_t);
-uint32_t udiv32(struct vm_cpu *, uint32_t, uint32_t);
-int32_t imod32(struct vm_cpu *, int32_t, int32_t);
-uint32_t umod32(struct vm_cpu *, uint32_t, uint32_t);
-
 void dump_gpregs(struct vm_cpu *);
 
 typedef struct vm_cpu vm_cpu_t;
diff --git a/miasm2/jitter/arch/JitCore_x86.c b/miasm2/jitter/arch/JitCore_x86.c
index e1e36989..648716a0 100644
--- a/miasm2/jitter/arch/JitCore_x86.c
+++ b/miasm2/jitter/arch/JitCore_x86.c
@@ -330,24 +330,6 @@ uint64_t segm2addr(JitCpu* jitcpu, uint64_t segm, uint64_t addr)
 	return addr + ((vm_cpu_t*)jitcpu->cpu)->segm_base[segm];
 }
 
-
-UDIV(16)
-UDIV(32)
-UDIV(64)
-
-UMOD(16)
-UMOD(32)
-UMOD(64)
-
-
-IDIV(16)
-IDIV(32)
-IDIV(64)
-
-IMOD(16)
-IMOD(32)
-IMOD(64)
-
 void MEM_WRITE_08(JitCpu* jitcpu, uint64_t addr, uint8_t src)
 {
 	vm_MEM_WRITE_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
diff --git a/miasm2/jitter/arch/JitCore_x86.h b/miasm2/jitter/arch/JitCore_x86.h
index e55948e6..bb1e005a 100644
--- a/miasm2/jitter/arch/JitCore_x86.h
+++ b/miasm2/jitter/arch/JitCore_x86.h
@@ -100,27 +100,8 @@ typedef struct {
 
 }vm_cpu_t;
 
-
-
-
 void dump_gpregs_32(vm_cpu_t* vmcpu);
 void dump_gpregs_64(vm_cpu_t* vmcpu);
 uint64_t segm2addr(JitCpu* jitcpu, uint64_t segm, uint64_t addr);
 
-
-uint64_t udiv64(vm_cpu_t* vmcpu, uint64_t a, uint64_t b);
-uint64_t umod64(vm_cpu_t* vmcpu, uint64_t a, uint64_t b);
-int64_t idiv64(vm_cpu_t* vmcpu, int64_t a, int64_t b);
-int64_t imod64(vm_cpu_t* vmcpu, int64_t a, int64_t b);
-
-uint32_t udiv32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-uint32_t umod32(vm_cpu_t* vmcpu, uint32_t a, uint32_t b);
-int32_t idiv32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-int32_t imod32(vm_cpu_t* vmcpu, int32_t a, int32_t b);
-
-uint16_t udiv16(vm_cpu_t* vmcpu, uint16_t a, uint16_t b);
-uint16_t umod16(vm_cpu_t* vmcpu, uint16_t a, uint16_t b);
-int16_t idiv16(vm_cpu_t* vmcpu, int16_t a, int16_t b);
-int16_t imod16(vm_cpu_t* vmcpu, int16_t a, int16_t b);
-
 #define RETURN_PC return BlockDst;
diff --git a/miasm2/jitter/op_semantics.c b/miasm2/jitter/op_semantics.c
index 82f56422..5a8becc4 100644
--- a/miasm2/jitter/op_semantics.c
+++ b/miasm2/jitter/op_semantics.c
@@ -774,3 +774,19 @@ uint64_t double_to_mem_64(double d)
 #endif
 	return m;
 }
+
+UDIV(16)
+UDIV(32)
+UDIV(64)
+
+UMOD(16)
+UMOD(32)
+UMOD(64)
+
+IDIV(16)
+IDIV(32)
+IDIV(64)
+
+IMOD(16)
+IMOD(32)
+IMOD(64)
diff --git a/miasm2/jitter/op_semantics.h b/miasm2/jitter/op_semantics.h
index a52afd42..fec140e7 100644
--- a/miasm2/jitter/op_semantics.h
+++ b/miasm2/jitter/op_semantics.h
@@ -27,7 +27,7 @@ unsigned int cntleadzeros(uint64_t size, uint64_t src);
 unsigned int cnttrailzeros(uint64_t size, uint64_t src);
 
 #define UDIV(sizeA)						\
-	uint ## sizeA ## _t udiv ## sizeA (vm_cpu_t* vmcpu, uint ## sizeA ## _t a, uint ## sizeA ## _t b) \
+	uint ## sizeA ## _t udiv ## sizeA (uint ## sizeA ## _t a, uint ## sizeA ## _t b) \
 	{								\
 		uint ## sizeA ## _t r;					\
 		if (b == 0) {						\
@@ -40,7 +40,7 @@ unsigned int cnttrailzeros(uint64_t size, uint64_t src);
 
 
 #define UMOD(sizeA)						\
-	uint ## sizeA ## _t umod ## sizeA (vm_cpu_t* vmcpu, uint ## sizeA ## _t a, uint ## sizeA ## _t b) \
+	uint ## sizeA ## _t umod ## sizeA (uint ## sizeA ## _t a, uint ## sizeA ## _t b) \
 	{								\
 		uint ## sizeA ## _t r;					\
 		if (b == 0) {						\
@@ -53,7 +53,7 @@ unsigned int cnttrailzeros(uint64_t size, uint64_t src);
 
 
 #define IDIV(sizeA)						\
-	int ## sizeA ## _t idiv ## sizeA (vm_cpu_t* vmcpu, int ## sizeA ## _t a, int ## sizeA ## _t b) \
+	int ## sizeA ## _t idiv ## sizeA (int ## sizeA ## _t a, int ## sizeA ## _t b) \
 	{								\
 		int ## sizeA ## _t r;					\
 		if (b == 0) {						\
@@ -66,7 +66,7 @@ unsigned int cnttrailzeros(uint64_t size, uint64_t src);
 
 
 #define IMOD(sizeA)						\
-	int ## sizeA ## _t imod ## sizeA (vm_cpu_t* vmcpu, int ## sizeA ## _t a, int ## sizeA ## _t b) \
+	int ## sizeA ## _t imod ## sizeA (int ## sizeA ## _t a, int ## sizeA ## _t b) \
 	{								\
 		int ## sizeA ## _t r;					\
 		if (b == 0) {						\
@@ -77,6 +77,21 @@ unsigned int cnttrailzeros(uint64_t size, uint64_t src);
 		return r;						\
 	}
 
+uint64_t udiv64(uint64_t a, uint64_t b);
+uint64_t umod64(uint64_t a, uint64_t b);
+int64_t idiv64(int64_t a, int64_t b);
+int64_t imod64(int64_t a, int64_t b);
+
+uint32_t udiv32(uint32_t a, uint32_t b);
+uint32_t umod32(uint32_t a, uint32_t b);
+int32_t idiv32(int32_t a, int32_t b);
+int32_t imod32(int32_t a, int32_t b);
+
+uint16_t udiv16(uint16_t a, uint16_t b);
+uint16_t umod16(uint16_t a, uint16_t b);
+int16_t idiv16(int16_t a, int16_t b);
+int16_t imod16(int16_t a, int16_t b);
+
 unsigned int x86_cpuid(unsigned int a, unsigned int reg_num);
 double int2double(unsigned int m);