342
|
1
|
|
2 from ..basetarget import Target
|
|
3 from ..arm.registers import R0, R1, R2, R3, R4, R5, R6, R7, SP, LR, PC
|
|
4 from ..arm.registers import register_range
|
|
5
|
|
6 from .instructions import Mov
|
|
7
|
|
8 class ArmArmTarget(Target):
|
|
9 def __init__(self):
|
|
10 super().__init__('arm_arm')
|
|
11
|
|
12 # Assembly grammar:
|
|
13 self.add_keyword('mov')
|
|
14 self.add_keyword('r0')
|
|
15 self.add_keyword('r1')
|
|
16 self.add_keyword('r2')
|
|
17 self.add_keyword('r3')
|
|
18 self.add_keyword('r4')
|
|
19 self.add_keyword('r5')
|
|
20 self.add_keyword('r6')
|
|
21 self.add_keyword('r7')
|
|
22
|
|
23 self.add_rule('reg', ['r0'], lambda rhs: R0)
|
|
24 self.add_rule('reg', ['r1'], lambda rhs: R1)
|
|
25 self.add_rule('reg', ['r2'], lambda rhs: R2)
|
|
26 self.add_rule('reg', ['r3'], lambda rhs: R3)
|
|
27 self.add_rule('reg', ['r4'], lambda rhs: R4)
|
|
28 self.add_rule('reg', ['r5'], lambda rhs: R5)
|
|
29 self.add_rule('reg', ['r6'], lambda rhs: R6)
|
|
30 self.add_rule('reg', ['r7'], lambda rhs: R7)
|
|
31
|
|
32
|
|
33 self.add_instruction(['mov', 'reg', ',', 'imm8'],
|
|
34 lambda rhs: Mov(rhs[1], rhs[3]))
|
|
35
|
|
36 self.add_rule('imm32', ['val32'], lambda x: x[0].val)
|
|
37 self.add_rule('imm32', ['imm8'], lambda x: x[0])
|
|
38 self.add_rule('imm8', ['val8'], lambda x: x[0].val)
|
|
39 self.add_rule('imm8', ['imm5'], lambda x: x[0])
|
|
40 self.add_rule('imm5', ['val5'], lambda x: x[0].val)
|
|
41 self.add_rule('imm5', ['imm3'], lambda x: x[0])
|
|
42 self.add_rule('imm3', ['val3'], lambda x: x[0].val)
|