Mercurial > lcfOS
comparison python/ppci/target/arm/instructions.py @ 364:c49459768aaa
Work on globals
author | Windel Bouwman |
---|---|
date | Wed, 19 Mar 2014 20:24:03 +0100 |
parents | c05ab629976a |
children | 98ff43cfdd36 |
comparison
equal
deleted
inserted
replaced
363:396e5cefba13 | 364:c49459768aaa |
---|---|
1 | 1 |
2 from ..basetarget import Instruction | 2 from ..basetarget import Instruction, LabelAddress |
3 from ...bitfun import rotate_left | 3 from ...bitfun import rotate_left |
4 | 4 |
5 from .token import ArmToken | 5 from .token import ArmToken |
6 from .registers import R0, SP, ArmRegister | 6 from .registers import R0, SP, ArmRegister |
7 | 7 |
29 def __init__(self, v): | 29 def __init__(self, v): |
30 super().__init__() | 30 super().__init__() |
31 assert isinstance(v, int) | 31 assert isinstance(v, int) |
32 self.v = v | 32 self.v = v |
33 | 33 |
34 def __repr__(self): | 34 |
35 return 'DCD {}'.format(hex(self.v)) | 35 class Dcd(ArmInstruction): |
36 | 36 def __init__(self, v): |
37 | 37 super().__init__() |
38 class Dcd(ConstantData): | 38 assert isinstance(v, int) or isinstance(v, LabelAddress) |
39 def encode(self): | 39 self.v = v |
40 self.token[0:32] = self.v | 40 |
41 return self.token.encode() | 41 def encode(self): |
42 | 42 if type(self.v) is int: |
43 def __repr__(self): | 43 self.token[0:32] = self.v |
44 return 'DCD {}'.format(hex(self.v)) | 44 else: |
45 self.token[0:32] = 0 | |
46 return self.token.encode() | |
47 | |
48 def relocations(self): | |
49 if type(self.v) is LabelAddress: | |
50 return [(self.v.name, 'absaddr32')] | |
51 return [] | |
52 | |
53 def __repr__(self): | |
54 if type(self.v) is int: | |
55 return 'DCD {}'.format(hex(self.v)) | |
56 else: | |
57 return 'DCD ={}'.format(self.v.name) | |
45 | 58 |
46 | 59 |
47 class Db(ConstantData): | 60 class Db(ConstantData): |
48 def encode(self): | 61 def encode(self): |
49 assert self.v < 256 | 62 assert self.v < 256 |