comparison python/ppci/target/x86/target_x86.py @ 342:86b02c98a717 devel

Moved target directory
author Windel Bouwman
date Sat, 01 Mar 2014 15:40:31 +0100
parents python/target/target_x86.py@b07d28a5ca56
children c0d9837acde8
comparison
equal deleted inserted replaced
341:4d204f6f7d4e 342:86b02c98a717
1 from target import Register, Instruction, Target
2
3 class x86Register(Register):
4 def __init__(self, name):
5 self.name = name
6
7 class REG16(x86Register):
8 pass
9
10 def addRegs(cls, names):
11 for name in names:
12 r = cls(name)
13 globals()[name] = r
14
15 addRegs(REG16, ['ax', 'bx', 'cx'])
16
17 regs = """
18 ax; reg16
19 """
20
21 class MO:
22 def __init__(self):
23 pass
24
25 instrs = """
26 add; 0x0; mem8/reg8; reg8
27 """
28
29 # machine op table:
30 mot = []
31
32 for i in instrs.split('\n'):
33 i = i.strip()
34 if i:
35 print('INS:', i)
36 mnemonic, opcode, op1, op2 = [a.strip() for a in i.split(';')]
37 print(op1.split('/'), op2.split('/'))
38
39
40 print(mot)
41
42 # Test first with these 3 instructions:
43 """
44 mov reg64, reg64 : opcode=0x89
45 xor reg64, reg64 : opcode=0x31
46 inc reg64 : opcode=0xff
47 """
48
49 class x86Machine:
50 def __init__(self):
51 self.table = []
52 self.table.append((0x0, 'add', 'reg8/mem8, reg8'))
53 self.table.append((0x1, 'add', 'reg16/mem16/reg32/mem32, reg16/reg32'))
54 self.table.append((0x2, 'add', 'reg8, reg8/mem8'))
55 def forMnemonic(self, m):
56 return [i for i in self.table if i[1] == m]
57 def emit(self, m, ops):
58 print(m, ops)
59 ops = self.forMnemonic(m)
60 print(ops)
61
62
63 if __name__ == '__main__':
64 m = x86Machine()
65 m.emit('add', [ax, cx])
66 m.emit('mov', [bx, 1337])