diff --git a/Makefile.common b/Makefile.common
index 12fe3bd..2a077bf 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -136,6 +136,7 @@
 	android/utils/eintr_wrapper.c \
 	android/utils/filelock.c \
 	android/utils/file_data.c \
+	android/utils/host_bitness.c \
 	android/utils/ini.c \
 	android/utils/intmap.c \
 	android/utils/lineinput.c \
diff --git a/Makefile.tests b/Makefile.tests
index a122684..5ff4c56 100644
--- a/Makefile.tests
+++ b/Makefile.tests
@@ -6,6 +6,7 @@
   android/utils/bufprint_unittest.cpp \
   android/utils/eintr_wrapper_unittest.cpp \
   android/utils/file_data_unittest.cpp \
+  android/utils/host_bitness_unittest.cpp \
   android/utils/property_file_unittest.cpp \
   android/utils/win32_cmdline_quote_unittest.cpp \
   android/base/containers/PodVector_unittest.cpp \
diff --git a/android/main-emulator.c b/android/main-emulator.c
index 26d8ae6..ef2b4b0 100644
--- a/android/main-emulator.c
+++ b/android/main-emulator.c
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <android/utils/compiler.h>
+#include <android/utils/host_bitness.h>
 #include <android/utils/panic.h>
 #include <android/utils/path.h>
 #include <android/utils/bufprint.h>
@@ -200,32 +201,6 @@
     return errno;
 }
 
-#ifndef _WIN32
-static int
-getHostOSBitness()
-{
-  /*
-     This function returns 64 if host is running 64-bit OS, or 32 otherwise.
-
-     It uses the same technique in ndk/build/core/ndk-common.sh.
-     Here are comments from there:
-
-  ## On Linux or Darwin, a 64-bit kernel (*) doesn't mean that the user-land
-  ## is always 32-bit, so use "file" to determine the bitness of the shell
-  ## that invoked us. The -L option is used to de-reference symlinks.
-  ##
-  ## Note that on Darwin, a single executable can contain both x86 and
-  ## x86_64 machine code, so just look for x86_64 (darwin) or x86-64 (Linux)
-  ## in the output.
-
-    (*) ie. The following code doesn't always work:
-        struct utsname u;
-        int host_runs_64bit_OS = (uname(&u) == 0 && strcmp(u.machine, "x86_64") == 0);
-  */
-    return system("file -L \"$SHELL\" | grep -q \"x86[_-]64\"") == 0 ? 64 : 32;
-}
-#endif  // !_WIN32
-
 /* Find the target-specific emulator binary. This will be something
  * like  <programDir>/emulator-<targetArch>, where <programDir> is
  * the directory of the current program.
@@ -244,7 +219,8 @@
     int search_for_64bit_emulator = 0;
 #else
     const char* exeExt = "";
-    int search_for_64bit_emulator = !force_32bit && getHostOSBitness() == 64;
+    int search_for_64bit_emulator =
+            !force_32bit && android_getHostBitness() == 64;
 #endif
 
     const char* emulatorSuffix = emulator_getBackendSuffix(avdArch);
diff --git a/android/utils/host_bitness.c b/android/utils/host_bitness.c
new file mode 100644
index 0000000..b48848f
--- /dev/null
+++ b/android/utils/host_bitness.c
@@ -0,0 +1,53 @@
+// Copyright 2014 The Android Open Source Project
+//
+// This software is licensed under the terms of the GNU General Public
+// License version 2, as published by the Free Software Foundation, and
+// may be copied, distributed, and modified under those terms.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+#include "android/utils/host_bitness.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <stdlib.h>
+#endif
+
+int android_getHostBitness(void) {
+#ifdef _WIN32
+    char directory[900];
+
+    // Retrieves the path of the WOW64 system directory, which doesn't
+    // exist on 32-bit systems.
+    unsigned len = GetSystemWow64Directory(directory, sizeof(directory));
+    if (len == 0) {
+        return 32;
+    } else {
+        return 64;
+    }
+#else // !_WIN32
+  /*
+     This function returns 64 if host is running 64-bit OS, or 32 otherwise.
+
+     It uses the same technique in ndk/build/core/ndk-common.sh.
+     Here are comments from there:
+
+  ## On Linux or Darwin, a 64-bit kernel (*) doesn't mean that the user-land
+  ## is always 32-bit, so use "file" to determine the bitness of the shell
+  ## that invoked us. The -L option is used to de-reference symlinks.
+  ##
+  ## Note that on Darwin, a single executable can contain both x86 and
+  ## x86_64 machine code, so just look for x86_64 (darwin) or x86-64 (Linux)
+  ## in the output.
+
+    (*) ie. The following code doesn't always work:
+        struct utsname u;
+        int host_runs_64bit_OS = (uname(&u) == 0 && strcmp(u.machine, "x86_64") == 0);
+  */
+    return system("file -L \"$SHELL\" | grep -q \"x86[_-]64\"") == 0 ? 64 : 32;
+#endif // !_WIN32
+}
diff --git a/android/utils/host_bitness.h b/android/utils/host_bitness.h
new file mode 100644
index 0000000..f239109
--- /dev/null
+++ b/android/utils/host_bitness.h
@@ -0,0 +1,26 @@
+// Copyright 2014 The Android Open Source Project
+//
+// This software is licensed under the terms of the GNU General Public
+// License version 2, as published by the Free Software Foundation, and
+// may be copied, distributed, and modified under those terms.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+#ifndef ANDROID_UTILS_HOST_BITNESS_H
+#define ANDROID_UTILS_HOST_BITNESS_H
+
+#include "android/utils/compiler.h"
+
+ANDROID_BEGIN_HEADER
+
+// Return the bitness of the host machine this program is running on.
+// This is independent of whether the current executable is a 32 or 64
+// bit binary. Returns 32 or 64.
+int android_getHostBitness(void);
+
+ANDROID_END_HEADER
+
+#endif  // ANDROID_UTILS_HOST_BITNESS_H
\ No newline at end of file
diff --git a/android/utils/host_bitness_unittest.cpp b/android/utils/host_bitness_unittest.cpp
new file mode 100644
index 0000000..32f4715
--- /dev/null
+++ b/android/utils/host_bitness_unittest.cpp
@@ -0,0 +1,23 @@
+// Copyright 2014 The Android Open Source Project
+//
+// This software is licensed under the terms of the GNU General Public
+// License version 2, as published by the Free Software Foundation, and
+// may be copied, distributed, and modified under those terms.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+#include "android/utils/host_bitness.h"
+
+#include <gtest/gtest.h>
+
+#include <stdio.h>
+
+TEST(HostBitness, android_getHostBitness) {
+    int host_bitness = android_getHostBitness();
+    printf("Found host bitness: %d\n", host_bitness);
+    EXPECT_TRUE(host_bitness == 32 || host_bitness == 64) <<
+        "Invalid host bitness: " << host_bitness;
+}
