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