//===-- X86TargetMachine.cpp - Define TargetMachine for the X86 -----------===//
//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
// This file defines the X86 specific subclass of TargetMachine.
//
//===----------------------------------------------------------------------===//
/// X86TargetMachine ctor - Create an ILP32 architecture model
///
X86TargetMachine::X86TargetMachine(const Module &M)
- : TargetMachine("X86",
- M.getEndianness() != Module::BigEndian,
- M.getPointerSize() != Module::Pointer64 ? 4 : 8,
- M.getPointerSize() != Module::Pointer64 ? 4 : 8,
- M.getPointerSize() != Module::Pointer64 ? 4 : 8,
- 4, M.getPointerSize() != Module::Pointer64 ? 4 : 8),
+ : TargetMachine("X86", true, 4, 4, 4, 4, 4),
FrameInfo(TargetFrameInfo::StackGrowsDown, 8/*16 for SSE*/, 4) {
}
return false; // success!
}
+void X86TargetMachine::replaceMachineCodeForFunction (void *Old, void *New) {
+ // FIXME: This code could perhaps live in a more appropriate place.
+ char *OldByte = (char *) Old;
+ *OldByte++ = 0xE9; // Emit JMP opcode.
+ int32_t *OldWord = (int32_t *) OldByte;
+ int32_t NewAddr = (int32_t) New;
+ int32_t OldAddr = (int32_t) OldWord;
+ *OldWord = NewAddr - OldAddr - 4; // Emit PC-relative addr of New code.
+}