131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- PPCJITInfo.h - PowerPC impl. of the JIT interface -------*- C++ -*-===//
2b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman//
35dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman//                     The LLVM Compiler Infrastructure
45dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman//
85dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman//===----------------------------------------------------------------------===//
95dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman//
105dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman// This file contains the PowerPC implementation of the TargetJITInfo class.
115dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman//
125dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman//===----------------------------------------------------------------------===//
135dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman
140145881cb985b2165bbd1aded733e0183c50e63aMisha Brukman#ifndef POWERPC_JITINFO_H
150145881cb985b2165bbd1aded733e0183c50e63aMisha Brukman#define POWERPC_JITINFO_H
165dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman
17a3f99f90338d89354384ca25f53ca4450a1a9d18Bruno Cardoso Lopes#include "llvm/CodeGen/JITCodeEmitter.h"
18a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "llvm/Target/TargetJITInfo.h"
195dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman
205dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukmannamespace llvm {
21cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass PPCSubtarget;
22cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass PPCJITInfo : public TargetJITInfo {
23cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesprotected:
24cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  PPCSubtarget &Subtarget;
25cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  bool is64Bit;
265dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman
27cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinespublic:
28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  PPCJITInfo(PPCSubtarget &STI);
295dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman
30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  StubLayout getStubLayout() override;
31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  void *emitFunctionStub(const Function *F, void *Fn,
32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                         JITCodeEmitter &JCE) override;
33cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  LazyResolverFn getLazyResolverFunction(JITCompilerFn) override;
34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  void relocate(void *Function, MachineRelocation *MR, unsigned NumRelocs,
35cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines                unsigned char *GOTBase) override;
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  /// replaceMachineCodeForFunction - Make it so that calling the function
38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  /// whose machine code is at OLD turns into a call to NEW, perhaps by
39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  /// overwriting OLD with a branch to NEW.  This is used for self-modifying
40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  /// code.
41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  ///
42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines  void replaceMachineCodeForFunction(void *Old, void *New) override;
43cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines};
445dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman}
455dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman
465dfe3a9c3bd9091f9adecc909665d52bdd4edd8cMisha Brukman#endif
47