122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- BranchIslandFactory.h ----------------------------------------------===//
222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//                     The MCLinker Project
422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source
622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details.
722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef MCLD_LD_BRANCH_ISLAND_FACTORY_H
1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#define MCLD_LD_BRANCH_ISLAND_FACTORY_H
1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifdef ENABLE_UNITTEST
1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <gtest.h>
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/DataTypes.h>
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/GCFactory.h>
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/BranchIsland.h>
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Fragment;
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class BranchIslandFactory
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *  \brief
2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass BranchIslandFactory : public GCFactory<BranchIsland, 0>
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic:
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// ctor
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// @param pMaxBranchRange - the max branch range of the target backend
3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// @param pMaxIslandSize - a predifned value (64KB here) to decide the max
3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ///                         size of the island
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  BranchIslandFactory(uint64_t pMaxBranchRange,
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                      uint64_t pMaxIslandSize = 65536U);
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ~BranchIslandFactory();
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// produce - produce a island for the given fragment
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// @param pFragment - the fragment needs a branch island
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  BranchIsland* produce(Fragment& pFragment);
4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// find - find a island for the given fragment
4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// @param pFragment - the fragment needs a branch isladn
4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  BranchIsland* find(const Fragment& pFragment);
4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate:
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  uint64_t m_MaxBranchRange;
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  uint64_t m_MaxIslandSize;
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao};
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of mcld
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
57