diff --git a/lib/Target/ARM/ARMAsmBackend.cpp b/lib/Target/ARM/ARMAsmBackend.cpp
index 0672899..c07a816 100644
--- a/lib/Target/ARM/ARMAsmBackend.cpp
+++ b/lib/Target/ARM/ARMAsmBackend.cpp
@@ -38,48 +38,6 @@
   unsigned getPointerSize() const {
     return 4;
   }
-
-protected:
-  static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
-    switch (Kind) {
-    default:
-      llvm_unreachable("Unknown fixup kind!");
-    case FK_Data_4:
-    case ARM::fixup_arm_movt_hi16:
-    case ARM::fixup_arm_movw_lo16:
-      return Value;
-    case ARM::fixup_arm_pcrel_12: {
-      bool isAdd = true;
-      // ARM PC-relative values are offset by 8.
-      Value -= 8;
-      if ((int64_t)Value < 0) {
-        Value = -Value;
-        isAdd = false;
-      }
-      assert ((Value < 4096) && "Out of range pc-relative fixup value!");
-      Value |= isAdd << 23;
-      return Value;
-    }
-    case ARM::fixup_arm_branch:
-      // These values don't encode the low two bits since they're always zero.
-      // Offset by 8 just as above.
-      return (Value - 8) >> 2;
-    case ARM::fixup_arm_pcrel_10: {
-      // Offset by 8 just as above.
-      Value = Value - 8;
-      bool isAdd = true;
-      if ((int64_t)Value < 0) {
-        Value = -Value;
-        isAdd = false;
-      }
-      // These values don't encode the low two bits since they're always zero.
-      Value >>= 2;
-      assert ((Value < 256) && "Out of range pc-relative fixup value!");
-      Value |= isAdd << 23;
-      return Value;
-    }
-    }
-  }
 };
 } // end anonymous namespace
 
@@ -101,6 +59,47 @@
   return true;
 }
 
+static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
+  switch (Kind) {
+  default:
+    llvm_unreachable("Unknown fixup kind!");
+  case FK_Data_4:
+  case ARM::fixup_arm_movt_hi16:
+  case ARM::fixup_arm_movw_lo16:
+    return Value;
+  case ARM::fixup_arm_pcrel_12: {
+    bool isAdd = true;
+    // ARM PC-relative values are offset by 8.
+    Value -= 8;
+    if ((int64_t)Value < 0) {
+      Value = -Value;
+      isAdd = false;
+    }
+    assert ((Value < 4096) && "Out of range pc-relative fixup value!");
+    Value |= isAdd << 23;
+    return Value;
+  }
+  case ARM::fixup_arm_branch:
+    // These values don't encode the low two bits since they're always zero.
+    // Offset by 8 just as above.
+    return (Value - 8) >> 2;
+  case ARM::fixup_arm_pcrel_10: {
+    // Offset by 8 just as above.
+    Value = Value - 8;
+    bool isAdd = true;
+    if ((int64_t)Value < 0) {
+      Value = -Value;
+      isAdd = false;
+    }
+    // These values don't encode the low two bits since they're always zero.
+    Value >>= 2;
+    assert ((Value < 256) && "Out of range pc-relative fixup value!");
+    Value |= isAdd << 23;
+    return Value;
+  }
+  }
+}
+
 namespace {
 // FIXME: This should be in a separate file.
 // ELF is an ELF of course...
