diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp
index 45fb999..3a21b3a 100644
--- a/src/IceGlobalContext.cpp
+++ b/src/IceGlobalContext.cpp
@@ -372,6 +372,11 @@
   }
 }
 
+void GlobalContext::translateFunctionsWrapper(ThreadContext *MyTLS) {
+  ICE_TLS_SET_FIELD(TLS, MyTLS);
+  translateFunctions();
+}
+
 void GlobalContext::translateFunctions() {
   TimerMarker Timer(TimerStack::TT_translateFunctions, this);
   while (std::unique_ptr<OptWorkItem> OptItem = optQueueBlockingPop()) {
@@ -454,6 +459,9 @@
 
 } // end of anonymous namespace
 
+// static
+void GlobalContext::TlsInit() { ICE_TLS_INIT_FIELD(TLS); }
+
 void GlobalContext::emitFileHeader() {
   TimerMarker T1(Ice::TimerStack::TT_emitAsm, this);
   if (getFlags().getOutFileType() == FT_Elf) {
@@ -556,6 +564,11 @@
   lowerGlobals(ProfileDataSection);
 }
 
+void GlobalContext::emitterWrapper(ThreadContext *MyTLS) {
+  ICE_TLS_SET_FIELD(TLS, MyTLS);
+  emitItems();
+}
+
 void GlobalContext::emitItems() {
   const bool Threaded = !getFlags().isSequential();
   // Pending is a vector containing the reassembled, ordered list of
@@ -987,6 +1000,38 @@
   return EmitQ.blockingPop();
 }
 
+void GlobalContext::initParserThread() {
+  ThreadContext *Tls = new ThreadContext();
+  auto Timers = getTimers();
+  Timers->initInto(Tls->Timers);
+  AllThreadContexts.push_back(Tls);
+  ICE_TLS_SET_FIELD(TLS, Tls);
+}
+
+void GlobalContext::startWorkerThreads() {
+  size_t NumWorkers = getFlags().getNumTranslationThreads();
+  auto Timers = getTimers();
+  for (size_t i = 0; i < NumWorkers; ++i) {
+    ThreadContext *WorkerTLS = new ThreadContext();
+    Timers->initInto(WorkerTLS->Timers);
+    AllThreadContexts.push_back(WorkerTLS);
+    TranslationThreads.push_back(std::thread(
+        &GlobalContext::translateFunctionsWrapper, this, WorkerTLS));
+  }
+  if (NumWorkers) {
+    ThreadContext *WorkerTLS = new ThreadContext();
+    Timers->initInto(WorkerTLS->Timers);
+    AllThreadContexts.push_back(WorkerTLS);
+    EmitterThreads.push_back(
+        std::thread(&GlobalContext::emitterWrapper, this, WorkerTLS));
+  }
+}
+
+void GlobalContext::resetStats() {
+  if (BuildDefs::dump())
+    ICE_TLS_GET_FIELD(TLS)->StatsFunction.reset();
+}
+
 void GlobalContext::dumpStats(const Cfg *Func) {
   if (!getFlags().getDumpStats())
     return;
@@ -997,6 +1042,54 @@
   }
 }
 
+void GlobalContext::statsUpdateEmitted(uint32_t InstCount) {
+  if (!getFlags().getDumpStats())
+    return;
+  ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
+  Tls->StatsFunction.update(CodeStats::CS_InstCount, InstCount);
+  Tls->StatsCumulative.update(CodeStats::CS_InstCount, InstCount);
+}
+
+void GlobalContext::statsUpdateRegistersSaved(uint32_t Num) {
+  if (!getFlags().getDumpStats())
+    return;
+  ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
+  Tls->StatsFunction.update(CodeStats::CS_RegsSaved, Num);
+  Tls->StatsCumulative.update(CodeStats::CS_RegsSaved, Num);
+}
+
+void GlobalContext::statsUpdateFrameBytes(uint32_t Bytes) {
+  if (!getFlags().getDumpStats())
+    return;
+  ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
+  Tls->StatsFunction.update(CodeStats::CS_FrameByte, Bytes);
+  Tls->StatsCumulative.update(CodeStats::CS_FrameByte, Bytes);
+}
+
+void GlobalContext::statsUpdateSpills() {
+  if (!getFlags().getDumpStats())
+    return;
+  ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
+  Tls->StatsFunction.update(CodeStats::CS_NumSpills);
+  Tls->StatsCumulative.update(CodeStats::CS_NumSpills);
+}
+
+void GlobalContext::statsUpdateFills() {
+  if (!getFlags().getDumpStats())
+    return;
+  ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
+  Tls->StatsFunction.update(CodeStats::CS_NumFills);
+  Tls->StatsCumulative.update(CodeStats::CS_NumFills);
+}
+
+void GlobalContext::statsUpdateRPImms() {
+  if (!getFlags().getDumpStats())
+    return;
+  ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
+  Tls->StatsFunction.update(CodeStats::CS_NumRPImms);
+  Tls->StatsCumulative.update(CodeStats::CS_NumRPImms);
+}
+
 void GlobalContext::dumpTimers(TimerStackIdT StackID, bool DumpCumulative) {
   if (!BuildDefs::timers())
     return;
diff --git a/src/IceGlobalContext.h b/src/IceGlobalContext.h
index aed4341..55b37d8 100644
--- a/src/IceGlobalContext.h
+++ b/src/IceGlobalContext.h
@@ -297,55 +297,16 @@
   ELFObjectWriter *getObjectWriter() const { return ObjectWriter.get(); }
 
   /// Reset stats at the beginning of a function.
-  void resetStats() {
-    if (BuildDefs::dump())
-      ICE_TLS_GET_FIELD(TLS)->StatsFunction.reset();
-  }
+  void resetStats();
   void dumpStats(const Cfg *Func = nullptr);
-  void statsUpdateEmitted(uint32_t InstCount) {
-    if (!getFlags().getDumpStats())
-      return;
-    ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
-    Tls->StatsFunction.update(CodeStats::CS_InstCount, InstCount);
-    Tls->StatsCumulative.update(CodeStats::CS_InstCount, InstCount);
-  }
-  void statsUpdateRegistersSaved(uint32_t Num) {
-    if (!getFlags().getDumpStats())
-      return;
-    ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
-    Tls->StatsFunction.update(CodeStats::CS_RegsSaved, Num);
-    Tls->StatsCumulative.update(CodeStats::CS_RegsSaved, Num);
-  }
-  void statsUpdateFrameBytes(uint32_t Bytes) {
-    if (!getFlags().getDumpStats())
-      return;
-    ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
-    Tls->StatsFunction.update(CodeStats::CS_FrameByte, Bytes);
-    Tls->StatsCumulative.update(CodeStats::CS_FrameByte, Bytes);
-  }
-  void statsUpdateSpills() {
-    if (!getFlags().getDumpStats())
-      return;
-    ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
-    Tls->StatsFunction.update(CodeStats::CS_NumSpills);
-    Tls->StatsCumulative.update(CodeStats::CS_NumSpills);
-  }
-  void statsUpdateFills() {
-    if (!getFlags().getDumpStats())
-      return;
-    ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
-    Tls->StatsFunction.update(CodeStats::CS_NumFills);
-    Tls->StatsCumulative.update(CodeStats::CS_NumFills);
-  }
+  void statsUpdateEmitted(uint32_t InstCount);
+  void statsUpdateRegistersSaved(uint32_t Num);
+  void statsUpdateFrameBytes(uint32_t Bytes);
+  void statsUpdateSpills();
+  void statsUpdateFills();
 
   /// Number of Randomized or Pooled Immediates
-  void statsUpdateRPImms() {
-    if (!getFlags().getDumpStats())
-      return;
-    ThreadContext *Tls = ICE_TLS_GET_FIELD(TLS);
-    Tls->StatsFunction.update(CodeStats::CS_NumRPImms);
-    Tls->StatsCumulative.update(CodeStats::CS_NumRPImms);
-  }
+  void statsUpdateRPImms();
 
   /// These are predefined TimerStackIdT values.
   enum TimerStackKind { TSK_Default = 0, TSK_Funcs, TSK_Num };
@@ -403,32 +364,8 @@
   std::unique_ptr<EmitterWorkItem> emitQueueBlockingPop();
   void emitQueueNotifyEnd() { EmitQ.notifyEnd(); }
 
-  void initParserThread() {
-    ThreadContext *Tls = new ThreadContext();
-    auto Timers = getTimers();
-    Timers->initInto(Tls->Timers);
-    AllThreadContexts.push_back(Tls);
-    ICE_TLS_SET_FIELD(TLS, Tls);
-  }
-
-  void startWorkerThreads() {
-    size_t NumWorkers = getFlags().getNumTranslationThreads();
-    auto Timers = getTimers();
-    for (size_t i = 0; i < NumWorkers; ++i) {
-      ThreadContext *WorkerTLS = new ThreadContext();
-      Timers->initInto(WorkerTLS->Timers);
-      AllThreadContexts.push_back(WorkerTLS);
-      TranslationThreads.push_back(std::thread(
-          &GlobalContext::translateFunctionsWrapper, this, WorkerTLS));
-    }
-    if (NumWorkers) {
-      ThreadContext *WorkerTLS = new ThreadContext();
-      Timers->initInto(WorkerTLS->Timers);
-      AllThreadContexts.push_back(WorkerTLS);
-      EmitterThreads.push_back(
-          std::thread(&GlobalContext::emitterWrapper, this, WorkerTLS));
-    }
-  }
+  void initParserThread();
+  void startWorkerThreads();
 
   void waitForWorkerThreads();
 
@@ -444,18 +381,12 @@
   }
 
   /// Translation thread startup routine.
-  void translateFunctionsWrapper(ThreadContext *MyTLS) {
-    ICE_TLS_SET_FIELD(TLS, MyTLS);
-    translateFunctions();
-  }
+  void translateFunctionsWrapper(ThreadContext *MyTLS);
   /// Translate functions from the Cfg queue until the queue is empty.
   void translateFunctions();
 
   /// Emitter thread startup routine.
-  void emitterWrapper(ThreadContext *MyTLS) {
-    ICE_TLS_SET_FIELD(TLS, MyTLS);
-    emitItems();
-  }
+  void emitterWrapper(ThreadContext *MyTLS);
   /// Emit functions and global initializers from the emitter queue until the
   /// queue is empty.
   void emitItems();
@@ -643,7 +574,7 @@
   ICE_TLS_DECLARE_FIELD(ThreadContext *, TLS);
 
 public:
-  static void TlsInit() { ICE_TLS_INIT_FIELD(TLS); }
+  static void TlsInit();
 };
 
 /// Helper class to push and pop a timer marker. The constructor pushes a
