blob: 84becd6d9beba0177d089692683484f04edb1967 [file] [log] [blame]
Brian Gaekebb25f2f2002-12-03 00:51:09 +00001//===-- X86Implicit.cpp - All the implicit uses and defs for X86 ops ------===//
2//
3// This defines a class which maps X86 opcodes to the registers that they
4// implicitly modify or use.
5//
6//===----------------------------------------------------------------------===//
7
8#include "X86Implicit.h"
9#include <map>
10#include <vector>
11
12X86Implicit::X86Implicit ()
13{
14 implicitUses[X86::CBW].push_back (X86::AL);
15 implicitDefs[X86::CBW].push_back (X86::AX);
16
17 implicitUses[X86::CDQ].push_back (X86::EAX);
18 implicitDefs[X86::CDQ].push_back (X86::EDX);
19
20 implicitUses[X86::CWD].push_back (X86::AX);
21 implicitDefs[X86::CWD].push_back (X86::DX);
22
23 implicitUses[X86::DIVrr16].push_back (X86::DX);
24 implicitUses[X86::DIVrr16].push_back (X86::AX);
25 implicitDefs[X86::DIVrr16].push_back (X86::DX);
26 implicitDefs[X86::DIVrr16].push_back (X86::AX);
27
28 implicitUses[X86::DIVrr32].push_back (X86::EDX);
29 implicitUses[X86::DIVrr32].push_back (X86::EAX);
30 implicitDefs[X86::DIVrr32].push_back (X86::EDX);
31 implicitDefs[X86::DIVrr32].push_back (X86::EAX);
32
33 implicitUses[X86::DIVrr8].push_back (X86::AX);
34 implicitDefs[X86::DIVrr8].push_back (X86::AL);
35 implicitDefs[X86::DIVrr8].push_back (X86::AH);
36
37 implicitDefs[X86::FNSTSWr8].push_back (X86::AX);
38
39 implicitUses[X86::IDIVrr16].push_back (X86::DX);
40 implicitUses[X86::IDIVrr16].push_back (X86::AX);
41 implicitDefs[X86::IDIVrr16].push_back (X86::DX);
42 implicitDefs[X86::IDIVrr16].push_back (X86::AX);
43
44 implicitUses[X86::IDIVrr32].push_back (X86::EDX);
45 implicitUses[X86::IDIVrr32].push_back (X86::EAX);
46 implicitDefs[X86::IDIVrr32].push_back (X86::EDX);
47 implicitDefs[X86::IDIVrr32].push_back (X86::EAX);
48
49 implicitUses[X86::IDIVrr8].push_back (X86::AX);
50 implicitDefs[X86::IDIVrr8].push_back (X86::AL);
51 implicitDefs[X86::IDIVrr8].push_back (X86::AH);
52
53 implicitUses[X86::LEAVE].push_back (X86::EBP);
54 implicitDefs[X86::LEAVE].push_back (X86::EBP);
55
56 implicitUses[X86::MULrr16].push_back (X86::AX);
57 implicitDefs[X86::MULrr16].push_back (X86::DX);
58 implicitDefs[X86::MULrr16].push_back (X86::AX);
59
60 implicitUses[X86::MULrr32].push_back (X86::EAX);
61 implicitDefs[X86::MULrr32].push_back (X86::EDX);
62 implicitDefs[X86::MULrr32].push_back (X86::EAX);
63
64 implicitUses[X86::MULrr8].push_back (X86::AL);
65 implicitDefs[X86::MULrr8].push_back (X86::AX);
66
67 implicitUses[X86::SAHF].push_back (X86::AH);
68
69 implicitUses[X86::SARrr16].push_back (X86::CL);
70
71 implicitUses[X86::SARrr32].push_back (X86::CL);
72
73 implicitUses[X86::SARrr8].push_back (X86::CL);
74
75 implicitUses[X86::SHLrr16].push_back (X86::CL);
76
77 implicitUses[X86::SHLrr32].push_back (X86::CL);
78
79 implicitUses[X86::SHLrr8].push_back (X86::CL);
80
81 implicitUses[X86::SHRrr16].push_back (X86::CL);
82
83 implicitUses[X86::SHRrr32].push_back (X86::CL);
84
85 implicitUses[X86::SHRrr8].push_back (X86::CL);
86}
87