Package envi :: Package archs :: Package arm :: Module regs
[hide private]
[frames] | no frames]

Source Code for Module envi.archs.arm.regs

 1  from envi.archs.arm.const import * 
 2  import envi.registers as e_reg 
 3   
 4  arm_regs = ( 
 5      ('r0', 32), 
 6      ('r1', 32), 
 7      ('r2', 32), 
 8      ('r3', 32), 
 9      ('r4', 32), 
10      ('r5', 32), 
11      ('r6', 32), 
12      ('r7', 32), 
13      ('r8', 32), 
14      ('r9', 32), 
15      ('sl', 32), 
16      ('fp', 32), 
17      ('ip', 32), 
18      ('sp', 32), 
19      ('lr', 32), 
20      ('pc', 32), 
21      ('cpsr', 32), 
22      # FIXME shadow regs go here (but are not encoded in 
23      # instructions... they are used by context only) 
24  ) 
25   
26  l = locals() 
27  e_reg.addLocalEnums(l, arm_regs) 
28   
29  PSR_N = 31  # negative 
30  PSR_Z = 30  # zero 
31  PSR_C = 29  # carry 
32  PSR_V = 28  # oVerflow 
33  PSR_Q = 27 
34  PSR_J = 24 
35  PSR_GE = 16 
36  PSR_E = 9 
37  PSR_A = 8 
38  PSR_I = 7 
39  PSR_F = 6 
40  PSR_T = 5 
41  PSR_M = 0 
42   
43  PSR_C_bit  = 1 << PSR_C 
44  PSR_C_mask = 0xffffffff ^ PSR_C_bit 
45   
46  psr_fields = [None for x in xrange(32)] 
47  psr_fields[PSR_M] = "M" 
48  psr_fields[PSR_T] = "T" 
49  psr_fields[PSR_F] = "F" 
50  psr_fields[PSR_I] = "I" 
51  psr_fields[PSR_A] = "A" 
52  psr_fields[PSR_E] = "E" 
53  psr_fields[PSR_GE] = "GE" 
54  psr_fields[PSR_GE+1] = "GE+1" 
55  psr_fields[PSR_GE+2] = "GE+2" 
56  psr_fields[PSR_GE+3] = "GE+3" 
57  psr_fields[PSR_J] = "J" 
58  psr_fields[PSR_Q] = "Q" 
59  psr_fields[PSR_V] = "V" 
60  psr_fields[PSR_C] = "C" 
61  psr_fields[PSR_Z] = "Z" 
62  psr_fields[PSR_N] = "N" 
63   
64  # FIXME this is....  hmm.... 
65  ArmMeta =tuple([("N", REG_FLAGS, PSR_N, 1), 
66                  ("Z", REG_FLAGS, PSR_Z, 1), 
67                  ("C", REG_FLAGS, PSR_C, 1), 
68                  ("V", REG_FLAGS, PSR_V, 1), 
69                  ("Q", REG_FLAGS, PSR_Q, 1), 
70                  ("J", REG_FLAGS, PSR_J, 1), 
71                  ("GE",REG_FLAGS, PSR_GE, 4), 
72                  ("E", REG_FLAGS, PSR_E, 1), 
73                  ("A", REG_FLAGS, PSR_A, 1), 
74                  ("I", REG_FLAGS, PSR_I, 1), 
75                  ("F", REG_FLAGS, PSR_F, 1), 
76                  ("T", REG_FLAGS, PSR_T, 1), 
77                  ("M", REG_FLAGS, PSR_M, 5), 
78                  ]) 
79   
80   
81 -class ArmRegisterContext(e_reg.RegisterContext):
82 - def __init__(self):
83 e_reg.RegisterContext.__init__(self) 84 self.loadRegDef(arm_regs) 85 #self.loadRegMetas(ArmMeta) 86 self.setRegisterIndexes(REG_PC, REG_SP)
87