Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Unified Diff: lib/MC/MCAssembler.cpp

Issue 11428170: Remove bundling from the MCAssembler interface (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Eli's review changes Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/llvm/MC/MCAssembler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/MC/MCAssembler.cpp
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp
index b6c3bb20b56eda68153a3c4416628d859c676575..5f564afd6adeaed5f86fe5e6eb293475e8e5b77b 100644
--- a/lib/MC/MCAssembler.cpp
+++ b/lib/MC/MCAssembler.cpp
@@ -493,42 +493,13 @@ uint64_t MCAssembler::computeFragmentSize(const MCAsmLayout &Layout,
llvm_unreachable("invalid fragment kind");
}
-void MCAsmLayout::LayoutFragment(MCFragment *F) {
- MCFragment *Prev = F->getPrevNode();
-
- // We should never try to recompute something which is up-to-date.
- assert(!isFragmentUpToDate(F) && "Attempt to recompute up-to-date fragment!");
- // We should never try to compute the fragment layout if it's predecessor
- // isn't up-to-date.
- assert((!Prev || isFragmentUpToDate(Prev)) &&
- "Attempt to compute fragment before it's predecessor!");
-
- ++stats::FragmentLayouts;
-
- // Compute fragment offset and size.
- uint64_t Offset = 0;
- if (Prev)
- Offset += Prev->Offset + getAssembler().computeFragmentSize(*this, *Prev);
- // @LOCALMOD-BEGIN
- F->BundlePadding = getAssembler().ComputeBundlePadding(*this, F, Offset);
- Offset += F->BundlePadding;
- // @LOCALMOD-END
- F->Offset = Offset;
- LastValidFragment[F->getParent()] = F;
-}
-
// @LOCALMOD-BEGIN
// Returns number of bytes of padding needed to align to bundle start.
static uint64_t AddressToBundlePadding(uint64_t Address, uint64_t BundleMask) {
return (~Address + 1) & BundleMask;
}
-uint64_t MCAssembler::getBundleSize() const {
- return getBackend().getBundleSize();
-}
-
-uint64_t MCAssembler::getBundleMask() const {
- uint64_t BundleSize = getBundleSize();
+static uint64_t ComputeBundleMask(uint64_t BundleSize) {
uint64_t BundleMask = BundleSize - 1;
assert(BundleSize != 0);
assert((BundleSize & BundleMask) == 0 &&
@@ -570,14 +541,15 @@ static unsigned ComputeGroupSize(MCFragment *F) {
return GroupSize;
}
-uint8_t MCAssembler::ComputeBundlePadding(const MCAsmLayout &Layout,
- MCFragment *F,
- uint64_t FragmentOffset) const {
+static uint8_t ComputeBundlePadding(const MCAssembler &Asm,
+ const MCAsmLayout &Layout,
+ MCFragment *F,
+ uint64_t FragmentOffset) {
if (!F->getParent()->isBundlingEnabled())
return 0;
- uint64_t BundleSize = getBundleSize();
- uint64_t BundleMask = getBundleMask();
+ uint64_t BundleSize = Asm.getBackend().getBundleSize();
+ uint64_t BundleMask = ComputeBundleMask(BundleSize);
unsigned GroupSize = ComputeGroupSize(F);
if (GroupSize > BundleSize) {
@@ -603,20 +575,15 @@ uint8_t MCAssembler::ComputeBundlePadding(const MCAsmLayout &Layout,
}
return Padding;
}
-// @LOCALMOD-END
-
-
-
-// @LOCALMOD-BEGIN
// Write out BundlePadding bytes in NOPs, being careful not to cross a bundle
// boundary.
static void WriteBundlePadding(const MCAssembler &Asm,
const MCAsmLayout &Layout,
uint64_t Offset, uint64_t TotalPadding,
MCObjectWriter *OW) {
- uint64_t BundleSize = Asm.getBundleSize();
- uint64_t BundleMask = Asm.getBundleMask();
+ uint64_t BundleSize = Asm.getBackend().getBundleSize();
+ uint64_t BundleMask = ComputeBundleMask(BundleSize);
uint64_t PaddingLeft = TotalPadding;
uint64_t StartPos = Offset;
@@ -636,6 +603,31 @@ static void WriteBundlePadding(const MCAssembler &Asm,
}
// @LOCALMOD-END
+void MCAsmLayout::LayoutFragment(MCFragment *F) {
+ MCFragment *Prev = F->getPrevNode();
+
+ // We should never try to recompute something which is up-to-date.
+ assert(!isFragmentUpToDate(F) && "Attempt to recompute up-to-date fragment!");
+ // We should never try to compute the fragment layout if it's predecessor
+ // isn't up-to-date.
+ assert((!Prev || isFragmentUpToDate(Prev)) &&
+ "Attempt to compute fragment before it's predecessor!");
+
+ ++stats::FragmentLayouts;
+
+ // Compute fragment offset and size.
+ uint64_t Offset = 0;
+ if (Prev)
+ Offset += Prev->Offset + getAssembler().computeFragmentSize(*this, *Prev);
+ // @LOCALMOD-BEGIN
+ F->BundlePadding = ComputeBundlePadding(getAssembler(), *this, F, Offset);
+ Offset += F->BundlePadding;
+ // @LOCALMOD-END
+ F->Offset = Offset;
+ LastValidFragment[F->getParent()] = F;
+}
+
+
/// WriteFragmentData - Write the \p F data to the output file.
static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
const MCFragment &F) {
@@ -677,7 +669,7 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
// If we are aligning with nops, ask that target to emit the right data.
if (AF.hasEmitNops()) {
// @LOCALMOD-BEGIN
- if (Asm.getBundleSize()) {
+ if (Asm.getBackend().getBundleSize()) {
WriteBundlePadding(Asm, Layout,
Layout.getFragmentOffset(&F),
FragmentSize,
« no previous file with comments | « include/llvm/MC/MCAssembler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698