add gps_venus
[protos/imu.git] / translate_code.py
1 #! /usr/bin/env python
2 import os
3
4
5
6 filename = os.environ.get('PYTHONSTARTUP')
7 if filename and os.path.isfile(filename):
8     execfile(filename)
9
10 from miasm2.core.cpu  import parse_ast
11 from miasm2.arch.x86_arch  import mn_x86, base_expr, variable
12 from miasm2.core.bin_stream import bin_stream
13 from miasm2.core import parse_asm
14 from elfesteem import *
15 from pdb import pm
16 from miasm2.core import asmbloc
17 import struct
18 from miasm2.expression.expression import *
19
20
21 def my__sub__(self, a):
22     return ExprOp('-', self, a)
23 Expr.__sub__ = my__sub__
24
25
26 def my_parse_op(t):
27     print "OP", t
28     v = t[0]
29     return (ExprOp, v)
30
31
32
33 reg_and_id = {}
34
35 def my_ast_int2expr(a):
36     return ExprInt32(a)
37 def my_ast_id2expr(t):
38     #print "XXX", t
39     t = 'f_'+t
40     if not t in reg_and_id:
41         i = ExprId(t)
42         reg_and_id[t] = i
43     return reg_and_id.get(t, ExprId(t, size=32))
44
45 my_var_parser = parse_ast(my_ast_id2expr, my_ast_int2expr)
46 base_expr.setParseAction(my_var_parser)
47
48 all_bloc, symbol_pool = parse_asm.parse_txt(mn_x86, 32, '''
49 main:
50     PUSH q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3
51 ''')
52
53
54
55 a = all_bloc[0][0].lines[0].args[0]
56
57
58
59
60 def ExprOp_to_Math(self):
61     print self.op, self.args
62     ops2 = {'+':'f32_add',
63            '*':'f32_mul',
64             '-':'f32_sub',
65            }
66     out = [x.Expr_to_Math() for x in self.args]
67     if len(self.args) == 1:
68         return "f32_neg(%s)"%(out[0])
69     elif self.op in ops2:
70         last = out.pop()
71         print out
72         while out:
73             o = out.pop()
74             last = '%s(%s, %s)'%(ops2[self.op],
75                                  o, last)
76         return last
77     fds
78 def ExprId_to_Math(self):
79     return self.name
80
81
82 def ExprInt_to_Math(self):
83     return "f32_from_double(%s)"%int(self.arg)
84 ExprOp.Expr_to_Math = ExprOp_to_Math
85 ExprId.Expr_to_Math = ExprId_to_Math
86 ExprInt.Expr_to_Math = ExprInt_to_Math
87
88 xx = a.Expr_to_Math()
89 print xx
90