--- /dev/null
+//===-- X86Implicit.cpp - All the implicit uses and defs for X86 ops ------===//
+//
+// This defines a class which maps X86 opcodes to the registers that they
+// implicitly modify or use.
+//
+//===----------------------------------------------------------------------===//
+
+#include "X86Implicit.h"
+#include <map>
+#include <vector>
+
+X86Implicit::X86Implicit ()
+{
+ implicitUses[X86::CBW].push_back (X86::AL);
+ implicitDefs[X86::CBW].push_back (X86::AX);
+
+ implicitUses[X86::CDQ].push_back (X86::EAX);
+ implicitDefs[X86::CDQ].push_back (X86::EDX);
+
+ implicitUses[X86::CWD].push_back (X86::AX);
+ implicitDefs[X86::CWD].push_back (X86::DX);
+
+ implicitUses[X86::DIVrr16].push_back (X86::DX);
+ implicitUses[X86::DIVrr16].push_back (X86::AX);
+ implicitDefs[X86::DIVrr16].push_back (X86::DX);
+ implicitDefs[X86::DIVrr16].push_back (X86::AX);
+
+ implicitUses[X86::DIVrr32].push_back (X86::EDX);
+ implicitUses[X86::DIVrr32].push_back (X86::EAX);
+ implicitDefs[X86::DIVrr32].push_back (X86::EDX);
+ implicitDefs[X86::DIVrr32].push_back (X86::EAX);
+
+ implicitUses[X86::DIVrr8].push_back (X86::AX);
+ implicitDefs[X86::DIVrr8].push_back (X86::AL);
+ implicitDefs[X86::DIVrr8].push_back (X86::AH);
+
+ implicitDefs[X86::FNSTSWr8].push_back (X86::AX);
+
+ implicitUses[X86::IDIVrr16].push_back (X86::DX);
+ implicitUses[X86::IDIVrr16].push_back (X86::AX);
+ implicitDefs[X86::IDIVrr16].push_back (X86::DX);
+ implicitDefs[X86::IDIVrr16].push_back (X86::AX);
+
+ implicitUses[X86::IDIVrr32].push_back (X86::EDX);
+ implicitUses[X86::IDIVrr32].push_back (X86::EAX);
+ implicitDefs[X86::IDIVrr32].push_back (X86::EDX);
+ implicitDefs[X86::IDIVrr32].push_back (X86::EAX);
+
+ implicitUses[X86::IDIVrr8].push_back (X86::AX);
+ implicitDefs[X86::IDIVrr8].push_back (X86::AL);
+ implicitDefs[X86::IDIVrr8].push_back (X86::AH);
+
+ implicitUses[X86::LEAVE].push_back (X86::EBP);
+ implicitDefs[X86::LEAVE].push_back (X86::EBP);
+
+ implicitUses[X86::MULrr16].push_back (X86::AX);
+ implicitDefs[X86::MULrr16].push_back (X86::DX);
+ implicitDefs[X86::MULrr16].push_back (X86::AX);
+
+ implicitUses[X86::MULrr32].push_back (X86::EAX);
+ implicitDefs[X86::MULrr32].push_back (X86::EDX);
+ implicitDefs[X86::MULrr32].push_back (X86::EAX);
+
+ implicitUses[X86::MULrr8].push_back (X86::AL);
+ implicitDefs[X86::MULrr8].push_back (X86::AX);
+
+ implicitUses[X86::SAHF].push_back (X86::AH);
+
+ implicitUses[X86::SARrr16].push_back (X86::CL);
+
+ implicitUses[X86::SARrr32].push_back (X86::CL);
+
+ implicitUses[X86::SARrr8].push_back (X86::CL);
+
+ implicitUses[X86::SHLrr16].push_back (X86::CL);
+
+ implicitUses[X86::SHLrr32].push_back (X86::CL);
+
+ implicitUses[X86::SHLrr8].push_back (X86::CL);
+
+ implicitUses[X86::SHRrr16].push_back (X86::CL);
+
+ implicitUses[X86::SHRrr32].push_back (X86::CL);
+
+ implicitUses[X86::SHRrr8].push_back (X86::CL);
+}
+