diff --git a/.gitignore b/.gitignore
index 378eac2..6f97ca1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 build
+*.pyc
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5ba1680..5f2c4bb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,8 +30,6 @@
 include(vec_cc_binary)
 include(vec_cc_test)
 include(vec_cc_generated_test)
-include(softrvv_vec_cc_generated_test)
-
 
 add_subdirectory(springbok)
 add_subdirectory(hello_vec)
diff --git a/cmake/softrvv_vec_cc_generated_test.cmake b/cmake/softrvv_vec_cc_generated_test.cmake
deleted file mode 100644
index 38893b7..0000000
--- a/cmake/softrvv_vec_cc_generated_test.cmake
+++ /dev/null
@@ -1,42 +0,0 @@
-function(softrvv_vec_cc_generated_test)
-  cmake_parse_arguments(
-    _RULE
-    ""
-    "NAME"
-    "TEMPLATE;LINKOPTS;TIMEOUT"
-    ${ARGN}
-  )
-
-set(_TEST_NAME "softrvv_${_RULE_NAME}_test")
-set(_OP_CODE ${_RULE_NAME})
-string(REPLACE ".tpl" "" _TEST_SRC_FILENAME ${_RULE_TEMPLATE})
-
-set(_TEST_SRC ${CMAKE_CURRENT_BINARY_DIR}/generated/${_TEST_SRC_FILENAME})
-find_file(_SOFTRVV_GEN_VEC_SCRIPT generate_softrvv_vector_tests.py ${CMAKE_SOURCE_DIR}/scripts)
-add_custom_command(
-    OUTPUT
-      ${_TEST_SRC}
-    DEPENDS
-     ${CMAKE_CURRENT_SOURCE_DIR}/templates/${_RULE_TEMPLATE}
-     ${CMAKE_CURRENT_SOURCE_DIR}/templates/base.tpl.cpp
-     ${CMAKE_CURRENT_SOURCE_DIR}/templates/opivv_opivx_test.tpl.cpp
-    COMMAND python3 ${_SOFTRVV_GEN_VEC_SCRIPT}
-      --template-path=${CMAKE_CURRENT_SOURCE_DIR}/templates/
-      --template=${_RULE_TEMPLATE}
-      --out-path=${CMAKE_CURRENT_BINARY_DIR}/generated/
-      --op=${_OP_CODE}
-)
-
-vec_cc_test(
-  NAME
-    ${_TEST_NAME}
-  SRCS
-    ${_TEST_SRC}
-  DEPS
-    softrvv
-  LINKOPTS
-    ${_RULE_LINKOPTS}
-  TIMEOUT
-    ${_RULE_TIMEOUT}
-)
-endfunction()
diff --git a/cmake/vec_cc_generated_test.cmake b/cmake/vec_cc_generated_test.cmake
index b51f974..5e21a70 100644
--- a/cmake/vec_cc_generated_test.cmake
+++ b/cmake/vec_cc_generated_test.cmake
@@ -1,40 +1,81 @@
+# vec_cc_generated_test()
+#
+# CMake function to generate vector test from a given template.
+#
+# Parameters:
+# NAME: Name of the op_code the test will verify
+# TEMPLATE: mako template to use in generating the CPP file
+# PREFIX: prefix to add to the target
+# LINKOPTS: additional link options
+# TIMEOUT: test specific timeout
+#
+# Note:
+#  This will generate an elf file that can be executed on target
+#  It also adds a test that can be run via CTest
+
 function(vec_cc_generated_test)
   cmake_parse_arguments(
     _RULE
     ""
     "NAME"
-    "OPFMT;LINKOPTS;TIMEOUT"
+    "TEMPLATE;PREFIX;LINKOPTS;TIMEOUT"
     ${ARGN}
   )
 
-set(_OPCODE "${_RULE_NAME}")
+set(_TEST_NAME "${_RULE_PREFIX}${_RULE_NAME}_test")
+set(_OP_CODE ${_RULE_NAME})
+string(REPLACE ".tpl" "" _TEST_SRC_FILENAME ${_RULE_TEMPLATE})
 
-foreach(_OPFMT ${_RULE_OPFMT})
-string(TOLOWER ${_OPFMT} _LOWER_OPFMT)
-set(_TEST_SRC ${CMAKE_CURRENT_BINARY_DIR}/generated/${_OPCODE}/${_OPCODE}_${_LOWER_OPFMT}_test.cpp)
+set(_TEST_SRC ${CMAKE_CURRENT_BINARY_DIR}/generated/${_OP_CODE}/${_TEST_SRC_FILENAME})
 find_file(_GEN_VEC_SCRIPT generate_vector_tests.py ${CMAKE_SOURCE_DIR}/scripts)
+file(GLOB_RECURSE TEMPLATES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.tpl")
 add_custom_command(
     OUTPUT
       ${_TEST_SRC}
     DEPENDS
-     ${CMAKE_CURRENT_SOURCE_DIR}/templates/${_LOWER_OPFMT}_test.tpl.cpp
+     ${CMAKE_CURRENT_SOURCE_DIR}/templates/${_RULE_TEMPLATE}
+     ${TEMPLATES}
     COMMAND python3 ${_GEN_VEC_SCRIPT}
       --template-path=${CMAKE_CURRENT_SOURCE_DIR}/templates/
-      --instruction-format ${_OPFMT}
-      --op-code ${_OPCODE}
-      --out-path=${CMAKE_CURRENT_BINARY_DIR}/generated/${_OPCODE}
+      --template=${_RULE_TEMPLATE}
+      --out-path=${CMAKE_CURRENT_BINARY_DIR}/generated/${_OP_CODE}
+      --op=${_OP_CODE}
 )
-list (APPEND _TEST_SRCS "${_TEST_SRC}")
-endforeach()
 
 vec_cc_test(
   NAME
-    ${_OPCODE}_test
+    ${_TEST_NAME}
   SRCS
-    ${_TEST_SRCS}
+    ${_TEST_SRC}
+  DEPS
+    softrvv
   LINKOPTS
     ${_RULE_LINKOPTS}
   TIMEOUT
     ${_RULE_TIMEOUT}
 )
 endfunction()
+
+function(softrvv_vec_cc_generated_test)
+  cmake_parse_arguments(
+    _RULE
+    ""
+    "NAME"
+    "TEMPLATE;LINKOPTS;TIMEOUT"
+    ${ARGN}
+  )
+
+vec_cc_generated_test(
+  NAME
+    ${_RULE_NAME}
+  PREFIX
+    softrvv_
+  TEMPLATE
+    ${_RULE_TEMPLATE}
+  LINKOPTS
+    ${_RULE_LINKOPTS}
+  TIMEOUT
+    ${_RULE_TIMEOUT}
+)
+
+endfunction()
diff --git a/scripts/generate_softrvv_vector_tests.py b/scripts/generate_softrvv_vector_tests.py
deleted file mode 100644
index 9e337bd..0000000
--- a/scripts/generate_softrvv_vector_tests.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python3
-"""
-Generate tests for softrvv
-TODO(henryherman) Look into combining the different template workflows
-"""
-import os
-import logging
-import argparse
-from collections import namedtuple
-from pathlib import Path
-
-from mako.lookup import TemplateLookup
-import mako.exceptions
-
-parser = argparse.ArgumentParser(
-    description='Generate tests for vector instructions.')
-
-parser.add_argument('--template-path', dest='template_path',
-                    help='path to templates', required=True)
-parser.add_argument('--template', dest='template_name',
-                    help='template name', required=True)
-parser.add_argument('-v', '--verbose', help='increase output verbosity',
-                    action='store_true')
-parser.add_argument('--out-path', dest='out_path',
-                    help='Path to output files', default='.')
-parser.add_argument('--op', dest='op',
-                    help='op instruction', default='')
-
-args = parser.parse_args()
-
-if args.verbose:
-    logging.basicConfig(level=logging.DEBUG)
-
-def main():
-    """ Main routine for generating softrvv tests from templates."""
-    mylookup = TemplateLookup(directories=[args.template_path, "."])
-    try:
-        template = mylookup.get_template(args.template_name)
-    except mako.exceptions.TopLevelLookupException:
-        parser.error("Template does not exist %s" % args.template_name)
-    logging.debug("Template %s found", args.template_name)
-    Path(args.out_path).mkdir(parents=True, exist_ok=True)
-    outfile_name = args.template_name.replace(".tpl", "")
-    full_outfile_path = os.path.join(args.out_path, outfile_name)
-    logging.debug("Generating file %s", full_outfile_path)
-    with open(full_outfile_path, "w+") as outfile:
-        outfile.write(template.render(op=args.op))
-
-if __name__ == "__main__":
-    main()
diff --git a/scripts/generate_vector_tests.py b/scripts/generate_vector_tests.py
index 47f39fd..f6fcf07 100644
--- a/scripts/generate_vector_tests.py
+++ b/scripts/generate_vector_tests.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 """
-Generate tests for Vector Instructions
+Generate tests for softrvv
+TODO(henryherman) Look into combining the different template workflows
 """
 import os
 import logging
@@ -16,49 +17,36 @@
 
 parser.add_argument('--template-path', dest='template_path',
                     help='path to templates', required=True)
+parser.add_argument('--template', dest='template_name',
+                    help='template name', required=True)
 parser.add_argument('-v', '--verbose', help='increase output verbosity',
                     action='store_true')
-parser.add_argument('--op-code', dest='op_code',
-                    help='Op-code', required=True)
 parser.add_argument('--out-path', dest='out_path',
                     help='Path to output files', default='.')
+parser.add_argument('--op', dest='op',
+                    help='op instruction', default='')
 
-template_name_lookup = {
-    'OPIVV':'opivv_test.tpl.cpp',
-    'OPIVI':'opivi_test.tpl.cpp',
-    'OPIVX':'opivx_test.tpl.cpp',
-    'VXUNARY0':'vxunary0_test.tpl.cpp'
-}
-
-parser.add_argument('--instruction-format',
-    action='append', choices=template_name_lookup.keys(), required=True)
 args = parser.parse_args()
 
 if args.verbose:
     logging.basicConfig(level=logging.DEBUG)
 
 def main():
-    """ Main routine for generating tests from templates."""
+    """ Main routine for generating softrvv tests from templates."""
     mylookup = TemplateLookup(directories=[args.template_path, "."])
-    template_names = [template_name_lookup.get(fmt, None) for fmt in args.instruction_format]
-    template_names = [template for template in template_names if template is not None]
-    template_jobs = []
-    TemplateJob = namedtuple("TemplateJob", "template outfile")
+    try:
+        template = mylookup.get_template(args.template_name)
+    except mako.exceptions.TopLevelLookupException:
+        parser.error("Template does not exist %s" % args.template_name)
+    logging.debug("Template %s found", args.template_name)
     Path(args.out_path).mkdir(parents=True, exist_ok=True)
-    for opfmt, template_name in template_name_lookup.items():
-        if not opfmt in args.instruction_format:
-            continue
-        try:
-            template = mylookup.get_template(template_name)
-        except mako.exceptions.TopLevelLookupException:
-            parser.error("Template does not exist %s" % template_name)
-        outfile_name = "%s_%s" % (args.op_code, template_name.replace(".tpl", ""))
-        template_jobs.append(TemplateJob(template, outfile_name))
-
-    for template_job in template_jobs:
-        full_outfile_path = os.path.join(args.out_path, template_job.outfile)
-        with open(full_outfile_path, "w+") as outfile:
-            outfile.write(template_job.template.render(op_code=args.op_code))
+    outfile_name = args.template_name.replace(".tpl", "")
+    full_outfile_path = os.path.join(args.out_path, outfile_name)
+    logging.debug("Generating file %s", full_outfile_path)
+    with open(full_outfile_path, "w+") as outfile:
+        outfile.write(template.render(op=args.op))
 
 if __name__ == "__main__":
     main()
+
+
diff --git a/scripts/vec_test_helpers/__init__.py b/scripts/vec_test_helpers/__init__.py
new file mode 100644
index 0000000..77cb7ff
--- /dev/null
+++ b/scripts/vec_test_helpers/__init__.py
@@ -0,0 +1,37 @@
+""" vec_test_helpers
+
+This module is for reusable helper functions used by the templates.
+"""
+
+def is_widening(op_code):
+    """Check if a particular op_code is a widening type."""
+    return op_code[1] == 'w'
+
+def is_unsigned(op_code):
+    """Check if a particular op_code is a unsigned type."""
+    return op_code[-1] == 'u'
+
+def get_sews(op_code):
+    """Given an op_code return a list of valid element widths."""
+    return [8, 16] if is_widening(op_code) else [8, 16, 32]
+
+def get_lmuls(op_code):
+    """Given an op_code return an iterable if valid lmuls."""
+    return [1, 2, 4] if is_widening(op_code) else [1, 2, 4, 8]
+
+def get_dest_type(op_code, sew):
+    """Return a destination type for a op_code and element width."""
+    type_fmt = "%sint%d_t"
+    sign_type  = "u" if is_unsigned(op_code) else ""
+    dest_sew = sew * 2 if is_widening(op_code) else sew
+    return type_fmt % (sign_type, dest_sew)
+
+def get_src_type(op_code, sew):
+    """Return a source type for an op_code and element width."""
+    type_fmt = "%sint%d_t"
+    sign_type = "u" if is_unsigned(op_code) else ""
+    return type_fmt % (sign_type, sew)
+
+def get_ref_opcode(op_code):
+    """Return the name of the reference code in the softrvv library."""
+    return op_code[:-1] if is_unsigned(op_code) else op_code
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 710743b..646c272 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -14,9 +14,8 @@
 vec_cc_generated_test(
   NAME
     vsub
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -24,9 +23,8 @@
 vec_cc_generated_test(
   NAME
     vrsub
-  OPFMT
-    OPIVI
-    OPIVX
+  TEMPLATE
+    opivx_opivi_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=256K
 )
@@ -34,10 +32,8 @@
 vec_cc_generated_test(
   NAME
     vadd
-  OPFMT
-    OPIVV
-    OPIVX
-    OPIVI
+  TEMPLATE
+    opivv_opivx_opivi_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=256K
 )
@@ -45,10 +41,8 @@
 vec_cc_generated_test(
   NAME
     vor
-  OPFMT
-    OPIVV
-    OPIVX
-    OPIVI
+  TEMPLATE
+    opivv_opivx_opivi_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=256K
 )
@@ -56,10 +50,8 @@
 vec_cc_generated_test(
   NAME
     vxor
-  OPFMT
-    OPIVV
-    OPIVX
-    OPIVI
+  TEMPLATE
+    opivv_opivx_opivi_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=256K
 )
@@ -67,9 +59,8 @@
 vec_cc_generated_test(
   NAME
     vmin
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -77,9 +68,8 @@
 vec_cc_generated_test(
   NAME
     vminu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -87,9 +77,8 @@
 vec_cc_generated_test(
   NAME
     vmul
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -97,9 +86,8 @@
 vec_cc_generated_test(
   NAME
     vmulh
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -107,9 +95,8 @@
 vec_cc_generated_test(
   NAME
     vmulhu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -117,9 +104,8 @@
 vec_cc_generated_test(
   NAME
     vdiv
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -127,9 +113,8 @@
 vec_cc_generated_test(
   NAME
     vdivu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -137,9 +122,8 @@
 vec_cc_generated_test(
   NAME
     vrem
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -147,9 +131,8 @@
 vec_cc_generated_test(
   NAME
     vremu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -157,9 +140,8 @@
 vec_cc_generated_test(
   NAME
     vwadd
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -167,9 +149,8 @@
 vec_cc_generated_test(
   NAME
     vwaddu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -177,9 +158,8 @@
 vec_cc_generated_test(
   NAME
     vwsub
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -187,9 +167,8 @@
 vec_cc_generated_test(
   NAME
     vwsubu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -197,9 +176,8 @@
 vec_cc_generated_test(
   NAME
     vmax
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -208,10 +186,8 @@
 vec_cc_generated_test(
   NAME
     vand
-  OPFMT
-    OPIVV
-    OPIVX
-    OPIVI
+  TEMPLATE
+    opivv_opivx_opivi_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=200K
 )
@@ -219,9 +195,8 @@
 vec_cc_generated_test(
   NAME
     vmaxu
-  OPFMT
-    OPIVV
-    OPIVX
+  TEMPLATE
+    opivv_opivx_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -229,8 +204,8 @@
 vec_cc_generated_test(
   NAME
     vsext
-  OPFMT
-    VXUNARY0
+  TEMPLATE
+    vxunary0_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
@@ -238,8 +213,8 @@
 vec_cc_generated_test(
   NAME
     vzext
-  OPFMT
-    VXUNARY0
+  TEMPLATE
+    vxunary0_test.tpl.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
 )
diff --git a/tests/templates/base.tpl.cpp b/tests/templates/base.tpl.cpp
index f6047a1..df861ff 100644
--- a/tests/templates/base.tpl.cpp
+++ b/tests/templates/base.tpl.cpp
@@ -1,32 +1,3 @@
-<%!
-
-def is_widening(op_code):
-    return op_code[1] == 'w'
-
-def is_unsigned(op_code):
-    return op_code[-1] == 'u'
-
-def get_sews(op_code):
-    return [8, 16] if is_widening(op_code) else [8, 16, 32]
-
-def get_lmuls(op_code):
-    return [1, 2, 4] if is_widening(op_code) else [1, 2, 4, 8]
-
-def get_dest_type(op_code, sew):
-    type_fmt = "%sint%d_t"
-    sign_type  = "u" if is_unsigned(op_code) else ""
-    dest_sew = sew * 2 if is_widening(op_code) else sew
-    return type_fmt % (sign_type, dest_sew)
-
-def get_src_type(op_code, sew):
-    type_fmt = "%sint%d_t"
-    sign_type = "u" if is_unsigned(op_code) else ""
-    return type_fmt % (sign_type, sew)
-
-def get_ref_opcode(op_code):
-    return op_code[:-1] if is_unsigned(op_code) else op_code
-
-%>
 /* Automatically generated file */
 #include <limits.h>
 #include <riscv_vector.h>
diff --git a/tests/templates/opivi_test.tpl.cpp b/tests/templates/base_opivi_test.tpl.cpp
similarity index 97%
rename from tests/templates/opivi_test.tpl.cpp
rename to tests/templates/base_opivi_test.tpl.cpp
index a831c1e..39343cb 100644
--- a/tests/templates/opivi_test.tpl.cpp
+++ b/tests/templates/base_opivi_test.tpl.cpp
@@ -1,5 +1,4 @@
-<%inherit file="base.tpl.cpp"/>\
-
+<%def name="test_opivi(op_code)">
 namespace ${op_code}_vi_test {
 namespace {
 
@@ -64,3 +63,5 @@
 
 }  // namespace
 }  // namespace ${op_code}_vi_test
+</%def>
+
diff --git a/tests/templates/opivv_test.tpl.cpp b/tests/templates/base_opivv_test.tpl.cpp
similarity index 86%
rename from tests/templates/opivv_test.tpl.cpp
rename to tests/templates/base_opivv_test.tpl.cpp
index 2075de2..35b92b8 100644
--- a/tests/templates/opivv_test.tpl.cpp
+++ b/tests/templates/base_opivv_test.tpl.cpp
@@ -1,5 +1,4 @@
-<%inherit file="base.tpl.cpp"/>\
-
+<%def name="test_opivv(op_code)">
 namespace ${op_code}_vv_test {
 namespace {
 
@@ -16,18 +15,18 @@
   void TearDown() override { zero_vector_registers(); }
 };
 <%
-widening = parent.module.is_widening(op_code)
-sews = parent.module.get_sews(op_code)
-lmuls = parent.module.get_lmuls(op_code)
-ref_opcode = parent.module.get_ref_opcode(op_code)
+import vec_test_helpers
+sews = vec_test_helpers.get_sews(op_code)
+lmuls = vec_test_helpers.get_lmuls(op_code)
 %>\
 % for sew in sews:
 % for lmul in lmuls:
 <%
-dest_type = parent.module.get_dest_type(op_code, sew)
-src_type = parent.module.get_src_type(op_code, sew)
+dest_type = vec_test_helpers.get_dest_type(op_code, sew)
+src_type = vec_test_helpers.get_src_type(op_code, sew)
+ref_opcode = vec_test_helpers.get_ref_opcode(op_code)
+widening = vec_test_helpers.is_widening(op_code)
 %>\
-
 TEST_F(${op_code.capitalize()}Test, ${op_code.lower()}_vv${sew}m${lmul}) {
   for (int i = 0; i < AVL_COUNT; i++) {
     int32_t avl = AVLS[i];
@@ -78,3 +77,5 @@
 
 }  // namespace
 }  // namespace ${op_code}_vv_test
+</%def>
+
diff --git a/tests/templates/opivx_test.tpl.cpp b/tests/templates/base_opivx_test.tpl.cpp
similarity index 85%
rename from tests/templates/opivx_test.tpl.cpp
rename to tests/templates/base_opivx_test.tpl.cpp
index c10f9c7..8feaeb4 100644
--- a/tests/templates/opivx_test.tpl.cpp
+++ b/tests/templates/base_opivx_test.tpl.cpp
@@ -1,5 +1,4 @@
-<%inherit file="base.tpl.cpp"/>\
-
+<%def name="test_opivx(op_code)">
 namespace ${op_code}_vx_test {
 namespace {
 
@@ -15,18 +14,18 @@
   void TearDown() override { zero_vector_registers(); }
 };
 <%
-widening = parent.module.is_widening(op_code)
-sews = parent.module.get_sews(op_code)
-lmuls = parent.module.get_lmuls(op_code)
+import vec_test_helpers
+sews = vec_test_helpers.get_sews(op_code)
+lmuls = vec_test_helpers.get_lmuls(op_code)
 %>\
 % for sew in sews:
 % for lmul in lmuls:
 <%
-dest_type = parent.module.get_dest_type(op_code, sew)
-src_type = parent.module.get_src_type(op_code, sew)
-ref_opcode = parent.module.get_ref_opcode(op_code)
+dest_type = vec_test_helpers.get_dest_type(op_code, sew)
+src_type = vec_test_helpers.get_src_type(op_code, sew)
+ref_opcode = vec_test_helpers.get_ref_opcode(op_code)
+widening = vec_test_helpers.is_widening(op_code)
 %>\
-
 TEST_F(${op_code.capitalize()}Test, ${op_code.lower()}_vx${sew}m${lmul}) {
   for (int i = 0; i < AVL_COUNT; i++) {
     int32_t avl = AVLS[i];
@@ -74,3 +73,5 @@
 
 }  // namespace
 }  // namespace ${op_code}_vx_test
+</%def>
+
diff --git a/tests/templates/base_vxunary0_test.tpl.cpp b/tests/templates/base_vxunary0_test.tpl.cpp
new file mode 100644
index 0000000..438571b
--- /dev/null
+++ b/tests/templates/base_vxunary0_test.tpl.cpp
@@ -0,0 +1,59 @@
+<%def name="test_vxunary0(op_code)">
+namespace ${op_code}_test {
+namespace {
+
+using namespace test_v_helpers;
+
+uint8_t src_vector_1[MAXVL_BYTES];
+uint8_t dest_vector[MAXVL_BYTES];
+uint8_t ref_dest_vector[MAXVL_BYTES];
+
+class ${op_code.capitalize()}Test : public ::testing::Test {
+ protected:
+  void SetUp() override { zero_vector_registers(); }
+  void TearDown() override { zero_vector_registers(); }
+};
+% for fraction, sew in [(4, 32), (2, 16)]:
+% for lmul in [1, 2, 4, 8]:
+<%
+sign_type = "u" if "z" in op_code else ""
+src_type = "%sint%d_t" % (sign_type, sew/fraction)
+dest_type = "%sint%d_t" % (sign_type, sew)
+%>\
+TEST_F(${op_code.capitalize()}Test, VF${fraction}e${sew}m${lmul}) {
+  for (int i = 0; i < AVL_COUNT; i++) {
+    int32_t avl = AVLS[i];
+    int vlmax;
+    int vl;
+    std::tie(vlmax, vl) = vector_test_setup<${dest_type}>(
+        VLMUL::LMUL_M${lmul}, avl,
+        {src_vector_1, dest_vector, ref_dest_vector});
+    if (avl > vlmax) {
+      continue;
+    }
+    ${src_type} *ptr_vec_1 = reinterpret_cast<${src_type} *>(src_vector_1);
+    ${dest_type} *ptr_dest_vec = reinterpret_cast<${dest_type} *>(dest_vector);
+    ${dest_type} *ptr_ref_dest_vec = reinterpret_cast<${dest_type} *>(ref_dest_vector);
+    fill_random_vector<${src_type}>(ptr_vec_1, avl);
+    memset(dest_vector, 0, sizeof(dest_vector));
+    memset(ref_dest_vector, 0, sizeof(ref_dest_vector));
+    softrvv::${op_code}_v<${dest_type}, ${src_type}>(ptr_ref_dest_vec, ptr_vec_1, avl);
+    // Load vector registers
+    __asm__ volatile("vle${sew//fraction}.v v8, (%0)" : : "r"(ptr_vec_1));
+
+    // Run target instruction
+    __asm__ volatile("${op_code}.vf${fraction} v24, v8" ::);
+
+    // Store result vector register
+    __asm__ volatile("vse${sew}.v v24, (%0)" : : "r"(ptr_dest_vec));
+    // Check vector elements
+    assert_vec_elem_eq<${dest_type}>(vlmax, dest_vector, ref_dest_vector);
+  }
+}
+%endfor
+%endfor
+}  // namespace
+}  // namespace ${op_code}_test
+</%def>
+
+
diff --git a/tests/templates/opivv_opivx_opivi_test.tpl.cpp b/tests/templates/opivv_opivx_opivi_test.tpl.cpp
new file mode 100644
index 0000000..c6509c4
--- /dev/null
+++ b/tests/templates/opivv_opivx_opivi_test.tpl.cpp
@@ -0,0 +1,7 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vi" file="base_opivi_test.tpl.cpp"/>\
+<%namespace name="tests_vx" file="base_opivx_test.tpl.cpp"/>\
+<%namespace name="tests_vv" file="base_opivv_test.tpl.cpp"/>\
+${tests_vi.test_opivi(op)}
+${tests_vx.test_opivx(op)}
+${tests_vv.test_opivv(op)}
diff --git a/tests/templates/opivv_opivx_test.tpl.cpp b/tests/templates/opivv_opivx_test.tpl.cpp
new file mode 100644
index 0000000..7567e3b
--- /dev/null
+++ b/tests/templates/opivv_opivx_test.tpl.cpp
@@ -0,0 +1,5 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vx" file="base_opivx_test.tpl.cpp"/>\
+<%namespace name="tests_vv" file="base_opivv_test.tpl.cpp"/>\
+${tests_vx.test_opivx(op)}
+${tests_vv.test_opivv(op)}
diff --git a/tests/templates/opivx_opivi_test.tpl.cpp b/tests/templates/opivx_opivi_test.tpl.cpp
new file mode 100644
index 0000000..1b25072
--- /dev/null
+++ b/tests/templates/opivx_opivi_test.tpl.cpp
@@ -0,0 +1,5 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vx" file="base_opivx_test.tpl.cpp"/>\
+<%namespace name="tests_vi" file="base_opivi_test.tpl.cpp"/>\
+${tests_vx.test_opivx(op)}
+${tests_vi.test_opivi(op)}
diff --git a/tests/templates/vxunary0_test.tpl.cpp b/tests/templates/vxunary0_test.tpl.cpp
index b43e968..b840e21 100644
--- a/tests/templates/vxunary0_test.tpl.cpp
+++ b/tests/templates/vxunary0_test.tpl.cpp
@@ -1,57 +1,4 @@
 <%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests_vxunary0" file="base_vxunary0_test.tpl.cpp"/>\
+${tests_vxunary0.test_vxunary0(op)}
 
-namespace ${op_code}_test {
-namespace {
-
-using namespace test_v_helpers;
-
-uint8_t src_vector_1[MAXVL_BYTES];
-uint8_t dest_vector[MAXVL_BYTES];
-uint8_t ref_dest_vector[MAXVL_BYTES];
-
-class ${op_code.capitalize()}Test : public ::testing::Test {
- protected:
-  void SetUp() override { zero_vector_registers(); }
-  void TearDown() override { zero_vector_registers(); }
-};
-% for fraction, sew in [(4, 32), (2, 16)]:
-% for lmul in [1, 2, 4, 8]:
-<%
-sign_type = "u" if "z" in op_code else ""
-src_type = "%sint%d_t" % (sign_type, sew/fraction)
-dest_type = "%sint%d_t" % (sign_type, sew)
-%>\
-TEST_F(${op_code.capitalize()}Test, VF${fraction}e${sew}m${lmul}) {
-  for (int i = 0; i < AVL_COUNT; i++) {
-    int32_t avl = AVLS[i];
-    int vlmax;
-    int vl;
-    std::tie(vlmax, vl) = vector_test_setup<${dest_type}>(
-        VLMUL::LMUL_M${lmul}, avl,
-        {src_vector_1, dest_vector, ref_dest_vector});
-    if (avl > vlmax) {
-      continue;
-    }
-    ${src_type} *ptr_vec_1 = reinterpret_cast<${src_type} *>(src_vector_1);
-    ${dest_type} *ptr_dest_vec = reinterpret_cast<${dest_type} *>(dest_vector);
-    ${dest_type} *ptr_ref_dest_vec = reinterpret_cast<${dest_type} *>(ref_dest_vector);
-    fill_random_vector<${src_type}>(ptr_vec_1, avl);
-    memset(dest_vector, 0, sizeof(dest_vector));
-    memset(ref_dest_vector, 0, sizeof(ref_dest_vector));
-    softrvv::${op_code}_v<${dest_type}, ${src_type}>(ptr_ref_dest_vec, ptr_vec_1, avl);
-    // Load vector registers
-    __asm__ volatile("vle${sew//fraction}.v v8, (%0)" : : "r"(ptr_vec_1));
-
-    // Run target instruction
-    __asm__ volatile("${op_code}.vf${fraction} v24, v8" ::);
-
-    // Store result vector register
-    __asm__ volatile("vse${sew}.v v24, (%0)" : : "r"(ptr_dest_vec));
-    // Check vector elements
-    assert_vec_elem_eq<${dest_type}>(vlmax, dest_vector, ref_dest_vector);
-  }
-}
-%endfor
-%endfor
-}  // namespace
-}  // namespace ${op_code}_test
