138aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju//==- SparcJITInfo.h - Sparc Implementation of the JIT Interface -*- C++ -*-==// 238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// 338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// The LLVM Compiler Infrastructure 438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// 538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// This file is distributed under the University of Illinois Open Source 638aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// License. See LICENSE.TXT for details. 738aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// 838aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju//===----------------------------------------------------------------------===// 938aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// 1038aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// This file contains the declaration of the SparcJITInfo class. 1138aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju// 1238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju//===----------------------------------------------------------------------===// 1338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 1438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju#ifndef SPARCJITINFO_H 1538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju#define SPARCJITINFO_H 1638aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 1738aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju#include "llvm/CodeGen/MachineConstantPool.h" 1838aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju#include "llvm/CodeGen/MachineFunction.h" 1938aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju#include "llvm/Target/TargetJITInfo.h" 2038aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 2138aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindarajunamespace llvm { 2238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindarajuclass SparcTargetMachine; 2338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 2438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindarajuclass SparcJITInfo : public TargetJITInfo { 2538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 2638aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju bool IsPIC; 2738aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 2838aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju public: 2938aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju explicit SparcJITInfo() 3038aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju : IsPIC(false) {} 3138aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 3238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// replaceMachineCodeForFunction - Make it so that calling the function 3338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// whose machine code is at OLD turns into a call to NEW, perhaps by 3438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// overwriting OLD with a branch to NEW. This is used for self-modifying 3538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// code. 3638aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// 37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void replaceMachineCodeForFunction(void *Old, void *New) override; 3838aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 3938aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju // getStubLayout - Returns the size and alignment of the largest call stub 4038aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju // on Sparc. 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines StubLayout getStubLayout() override; 4238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 4338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 4438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// emitFunctionStub - Use the specified JITCodeEmitter object to emit a 4538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// small native function that simply calls the function at the specified 4638aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// address. 47dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void *emitFunctionStub(const Function *F, void *Fn, 48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines JITCodeEmitter &JCE) override; 4938aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 5038aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// getLazyResolverFunction - Expose the lazy resolver to the JIT. 51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LazyResolverFn getLazyResolverFunction(JITCompilerFn) override; 5238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 5338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// relocate - Before the JIT can run a block of code that has been emitted, 5438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// it must rewrite the code to contain the actual addresses of any 5538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// referenced global symbols. 56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void relocate(void *Function, MachineRelocation *MR, 57dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines unsigned NumRelocs, unsigned char *GOTBase) override; 5838aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 5938aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju /// Initialize - Initialize internal stage for the function being JITted. 6038aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju void Initialize(const MachineFunction &MF, bool isPIC) { 6138aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju IsPIC = isPIC; 6238aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju } 6338aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 6438aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju}; 6538aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju} 6638aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju 6738aceb871478893bfa87f94c2cb3a344a4c8c2dfVenkatraman Govindaraju#endif 68