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