annotate python/ppci/target/x86/registers.py @ 398:c0d9837acde8

x86 target refactor
author Windel Bouwman
date Thu, 29 May 2014 12:13:37 +0200
parents
children
rev   line source
398
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
1 """
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
2 Contains register definitions for x86 target.
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
3 """
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
4 from ..basetarget import Register
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
5
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
6
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
7 class X86Register(Register):
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
8 def __init__(self, num, name):
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
9 super().__init__(name)
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
10 self.num = num
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
11
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
12 def __repr__(self):
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
13 return 'x86reg {}'.format(self.name)
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
14
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
15 @property
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
16 def rexbit(self):
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
17 return (self.num >> 3) & 0x1
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
18
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
19 @property
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
20 def regbits(self):
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
21 return self.num & 0x7
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
22
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
23 # Calculation of the rexb bit:
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
24 # rexbit = {'rax': 0, 'rcx':0, 'rdx':0, 'rbx': 0, 'rsp': 0, 'rbp': 0, 'rsi':0,
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
25 # 'rdi':0,'r8':1,'r9':1,'r10':1,'r11':1,'r12':1,'r13':1,'r14':1,'r15':1}
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
26
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
27 # regs64 = {'rax': 0,'rcx':1,'rdx':2,'rbx':3,'rsp':4,'rbp':5,'rsi':6,'rdi':7,
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
28 # 'r8':0,'r9':1,'r10':2,'r11':3,'r12':4,'r13':5,'r14':6,'r15':7}
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
29 # regs32 = {'eax': 0, 'ecx':1, 'edx':2, 'ebx': 3, 'esp': 4, 'ebp': 5, 'esi':6,
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
30 # 'edi':7}
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
31 # regs8 = {'al':0,'cl':1,'dl':2,'bl':3,'ah':4,'ch':5,'dh':6,'bh':7}
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
32 rax = X86Register(0, 'rax')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
33 rcx = X86Register(1, 'rcx')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
34 rdx = X86Register(2, 'rdx')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
35 rbx = X86Register(3, 'rbx')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
36 rsp = X86Register(4, 'rsp')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
37 rbp = X86Register(5, 'rbp')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
38 rsi = X86Register(6, 'rsi')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
39 rdi = X86Register(7, 'rdi')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
40
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
41 r8 = X86Register(8, 'r8')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
42 r9 = X86Register(9, 'r9')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
43 r10 = X86Register(10, 'r10')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
44 r11 = X86Register(11, 'r11')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
45 r12 = X86Register(12, 'r12')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
46 r13 = X86Register(13, 'r13')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
47 r14 = X86Register(14, 'r14')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
48 r15 = X86Register(15, 'r15')
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
49
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
50 low_regs = {rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi}
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
51
c0d9837acde8 x86 target refactor
Windel Bouwman
parents:
diff changeset
52 regs64 = {r8, r9, r10, r11, r12, r13, r14, r15} | low_regs