diff --git a/test/dct32x32_test.cc b/test/dct32x32_test.cc
index 8f089c6839b02a36997c1cb3d69f6c5ea3f4288f..1ac6fb0a908793367b869ed21cfc9115078d1086 100644
--- a/test/dct32x32_test.cc
+++ b/test/dct32x32_test.cc
@@ -27,6 +27,14 @@ extern "C" {
 using libvpx_test::ACMRandom;
 
 namespace {
+#ifdef _MSC_VER
+static int round(double x) {
+  if (x < 0)
+    return (int)ceil(x - 0.5);
+  else
+    return (int)floor(x + 0.5);
+}
+#endif
 
 #if !CONFIG_DWT32X32HYBRID
 static const double kPi = 3.141592653589793238462643383279502884;
diff --git a/vp9/common/vp9_systemdependent.h b/vp9/common/vp9_systemdependent.h
index 91a50607ac9218eb792a69a8c38a3038860ffbd0..5bc6237e6ec47e4d8a88e84633a2370658dadf2e 100644
--- a/vp9/common/vp9_systemdependent.h
+++ b/vp9/common/vp9_systemdependent.h
@@ -10,6 +10,10 @@
 #ifndef VP9_COMMON_VP9_SYSTEMDEPENDENT_H_
 #define VP9_COMMON_VP9_SYSTEMDEPENDENT_H_
 
+#ifdef _MSC_VER
+#include <math.h>
+#endif
+
 #include "vpx_ports/config.h"
 #if ARCH_X86 || ARCH_X86_64
 void vpx_reset_mmx_state(void);
@@ -18,6 +22,16 @@ void vpx_reset_mmx_state(void);
 #define vp9_clear_system_state()
 #endif
 
+#ifdef _MSC_VER
+// round is not defined in MSVC
+static int round(double x) {
+  if (x < 0)
+    return (int)ceil(x - 0.5);
+  else
+    return (int)floor(x + 0.5);
+}
+#endif
+
 struct VP9Common;
 void vp9_machine_specific_config(struct VP9Common *);
 #endif