diff --git a/springbok/include/springbok.h b/springbok/include/springbok.h
index ebe4564..80905a7 100644
--- a/springbok/include/springbok.h
+++ b/springbok/include/springbok.h
@@ -4,25 +4,32 @@
 #include <stdio.h>
 
 #define ERROR_TAG "ERROR"
+#define WARN_TAG "WARN"
 #define INFO_TAG "INFO"
 #define DEBUG_TAG "DEBUG"
+#define NOISY_TAG "NOISY"
 
 #define LOG_FMT "%s |"
 #define LOG_ARGS(LOG_TAG) LOG_TAG
 
-#define LOG_MAX_SZ  256
+#define LOG_MAX_SZ 256
 
-#define SIMLOG(sim_log_level,fmt, ...) \
-    do { \
-        char tmp_log_msg[LOG_MAX_SZ]; \
-        snprintf(tmp_log_msg, LOG_MAX_SZ, fmt, __VA_ARGS__); \
-        springbok_simprint_##sim_log_level(tmp_log_msg, 0); \
-    } while (0)
+#define SIMLOG(sim_log_level, fmt, ...)                  \
+  do {                                                   \
+    char tmp_log_msg[LOG_MAX_SZ];                        \
+    snprintf(tmp_log_msg, LOG_MAX_SZ, fmt, __VA_ARGS__); \
+    springbok_simprint_##sim_log_level(tmp_log_msg, 0);  \
+  } while (0)
 
-#define LOG_ERROR(msg, args...) SIMLOG(error, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ## args)
-#define LOG_WARN(msg, args...) SIMLOG(warning, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ## args)
-#define LOG_INFO(msg, args...) SIMLOG(info, LOG_FMT msg, LOG_ARGS(INFO_TAG), ## args)
-#define LOG_DEBUG(msg, args...) SIMLOG(debug, LOG_FMT msg, LOG_ARGS(DEBUG_TAG), ## args)
-#define LOG_NOISY(msg, args...) SIMLOG(noisy, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ## args)
+#define LOG_ERROR(msg, args...) \
+  SIMLOG(error, LOG_FMT msg, LOG_ARGS(ERROR_TAG), ##args)
+#define LOG_WARN(msg, args...) \
+  SIMLOG(warning, LOG_FMT msg, LOG_ARGS(WARN_TAG), ##args)
+#define LOG_INFO(msg, args...) \
+  SIMLOG(info, LOG_FMT msg, LOG_ARGS(INFO_TAG), ##args)
+#define LOG_DEBUG(msg, args...) \
+  SIMLOG(debug, LOG_FMT msg, LOG_ARGS(DEBUG_TAG), ##args)
+#define LOG_NOISY(msg, args...) \
+  SIMLOG(noisy, LOG_FMT msg, LOG_ARGS(NOISY_TAG), ##args)
 
 #endif
diff --git a/tests/vmv_test.cpp b/tests/vmv_test.cpp
index bebd9bd..ff58a2f 100644
--- a/tests/vmv_test.cpp
+++ b/tests/vmv_test.cpp
@@ -234,13 +234,13 @@
     int32_t avl = AVLS[i];
     int vlmax;
     int vl;
-    std::tie(vlmax, vl) = vmv_test_setup<uint8_t>(VLMUL::LMUL_M1, avl);
+    std::tie(vlmax, vl) = vmv_test_setup<int8_t>(VLMUL::LMUL_M1, avl);
     if (avl > vlmax) {
       continue;
     }
-    uint8_t *ptr_vec_1 = reinterpret_cast<uint8_t *>(test_vector_1);
-    uint8_t *ptr_vec_2 = reinterpret_cast<uint8_t *>(test_vector_2);
-    uint8_t test_val = -12;
+    int8_t *ptr_vec_1 = reinterpret_cast<int8_t *>(test_vector_1);
+    int8_t *ptr_vec_2 = reinterpret_cast<int8_t *>(test_vector_2);
+    int8_t test_val = -12;
     __asm__ volatile("vmv.v.i v8, -12" ::);
     for (int i = 0; i < vl; i++) {
       ptr_vec_1[i] = test_val;
@@ -250,6 +250,7 @@
   }
 }
 
+// TODO(gkielian): Allow mechanism for multiple tests for same sew,lmul pair
 #define DEFINE_TEST_VMV_V_I_I(_SEW_, _LMUL_, TEST_VAL)                 \
   TEST_F(VmvTest, vmv_v_i_e##_SEW_##m##_LMUL_) {                       \
     for (int i = 0; i < AVL_COUNT; i++) {                              \
@@ -257,21 +258,21 @@
       int vlmax;                                                       \
       int vl;                                                          \
       std::tie(vlmax, vl) =                                            \
-          vmv_test_setup<uint##_SEW_##_t>(VLMUL::LMUL_M##_LMUL_, avl); \
+          vmv_test_setup<int##_SEW_##_t>(VLMUL::LMUL_M##_LMUL_, avl);  \
       if (avl > vlmax) {                                               \
         continue;                                                      \
       }                                                                \
-      uint##_SEW_##_t *ptr_vec_1 =                                     \
-          reinterpret_cast<uint##_SEW_##_t *>(test_vector_1);          \
-      uint##_SEW_##_t *ptr_vec_2 =                                     \
-          reinterpret_cast<uint##_SEW_##_t *>(test_vector_2);          \
-      uint##_SEW_##_t test_val = -12;                                  \
-      __asm__ volatile("vmv.v.i v8, -12" ::);                          \
+      int##_SEW_##_t *ptr_vec_1 =                                      \
+          reinterpret_cast<int##_SEW_##_t *>(test_vector_1);           \
+      int##_SEW_##_t *ptr_vec_2 =                                      \
+          reinterpret_cast<int##_SEW_##_t *>(test_vector_2);           \
+      int##_SEW_##_t test_val = TEST_VAL;                              \
+      __asm__ volatile("vmv.v.i v8, " #TEST_VAL);                      \
       for (int i = 0; i < vl; i++) {                                   \
         ptr_vec_1[i] = test_val;                                       \
       }                                                                \
       __asm__ volatile("vse" #_SEW_ ".v v8, (%0)" : : "r"(ptr_vec_2)); \
-      vmv_check<uint##_SEW_##_t>(vlmax);                               \
+      vmv_check<int##_SEW_##_t>(vlmax);                                \
     }                                                                  \
   }
 
