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