diff --git a/scripts/vec_test_helpers/__init__.py b/scripts/vec_test_helpers/__init__.py
index 8f000eb..4aa284e 100644
--- a/scripts/vec_test_helpers/__init__.py
+++ b/scripts/vec_test_helpers/__init__.py
@@ -129,9 +129,8 @@
         return [8, 16, 32]
 
     def get_sew_sizes(self):
-        """Return size of types.
-        imm is not used for floating point op codes.
-        """
+        """Return size of types."""
+        """imm is not used for floating point op codes."""
         dest_sew = self.sew
         src2_sew = self.sew
         src1_sew = self.sew
@@ -143,44 +142,37 @@
         return dest_sew, src2_sew, src1_sew, imm_sew
 
     def get_var_types(self):
-        """Return types for an op_code and element width.
-        imm_type won't be used for floating point values.
-        """
+        """Return types for an op_code and element width."""
+        """imm_type won't be used for floating point values."""
         VarTypes = collections.namedtuple(
             "VarTypes",
             ('dest_type', 'src2_type', 'src1_type', 'imm_type'))
-        if self.is_floating():
-            var_types = VarTypes("float", "float", "float", "float")
-        else:
-            type_fmt = "%sint%d_t"
-            sign_type  = "u" if self.is_unsigned() or self.force_unsigned else ""
-            dest_sew, src2_sew, src1_sew, imm_sew = self.get_sew_sizes()
-            dest_type = type_fmt % (sign_type, dest_sew)
-            src1_type = type_fmt % (sign_type, src1_sew)
-            src2_type = type_fmt % (sign_type, src2_sew)
-            imm_type = type_fmt % (sign_type, imm_sew)
-            var_types = VarTypes(dest_type, src2_type, src1_type, imm_type)
+        type_fmt = "%sfloat%d_t" if self.is_floating() else "%sint%d_t"
+        sign_type  = "u" if (not self.is_floating()) and (self.is_unsigned() or self.force_unsigned) else ""
+        dest_sew, src2_sew, src1_sew, imm_sew = self.get_sew_sizes()
+        dest_type = type_fmt % (sign_type, dest_sew)
+        src1_type = type_fmt % (sign_type, src1_sew)
+        src2_type = type_fmt % (sign_type, src2_sew)
+        imm_type = type_fmt % (sign_type, imm_sew)
+        var_types = VarTypes(dest_type, src2_type, src1_type, imm_type)
         return var_types
 
     def get_mnemonic(self, operand_type):
         """Generate the correct mnemonic given a opcode and operand type."""
         operand_width = self.OperandWidth.STANDARD
-        if self.is_floating():
-            if operand_type == self.OperandType.SCALAR:
-                operand_type = self.OperandType.FLOATSCALAR
-        else:
-            if self.is_narrowing():
-                operand_width = self.OperandWidth.NARROWING
-            elif self.is_widening():
-                operand_width = self.OperandWidth.WIDENING
+        if (not self.is_floating()) and self.is_narrowing():
+            operand_width = self.OperandWidth.NARROWING
+        elif (not self.is_floating()) and self.is_widening():
+            operand_width = self.OperandWidth.WIDENING
+        if self.is_floating() and operand_type == self.OperandType.SCALAR:
+            operand_type = self.OperandType.FLOATSCALAR
         op_suffix = self.mnemonic_suffix[operand_type][operand_width]
         return "%s.%s" % (self.op_code, op_suffix)
 
     def get_lmuls(self):
         """Given an op_code return an iterable of valid lmuls."""
-        if not self.is_floating():
-            if self.is_widening() or self.is_narrowing():
-                return [1, 2, 4]
+        if (not self.is_floating()) and (self.is_widening() or self.is_narrowing()):
+            return [1, 2, 4]
         return [1, 2, 4, 8]
 
     @staticmethod
@@ -192,9 +184,8 @@
     def get_softrvv_template_data_type(self):
         """Return types """
         var_types = self.get_var_types()
-        if not self.is_floating():
-            if self.is_narrowing() or self.is_widening():
-                return "%s, %s" % (var_types.dest_type, var_types.src2_type)
+        if (not self.is_floating()) and (self.is_narrowing() or self.is_widening()):
+            return "%s, %s" % (var_types.dest_type, var_types.src2_type)
         return var_types.src1_type
 
     def get_ref_opcode(self):
@@ -252,7 +243,7 @@
         src1_np_type = self.get_np_src1_type()
         src2_np_type = self.get_np_src2_type()
         src2_np_type = self.get_np_src2_type()
-        # Return test inputs for floating points.
+        """Return test inputs for floating points."""
         if self.is_floating():
           type_info = np.finfo(src1_np_type)
           src1_data = np.random.uniform(
@@ -267,7 +258,7 @@
               rs1 = 1.0 if rs1 == 0.0 else rs1
           return src2_data, src1_data, rs1
 
-        # Return test inputs for integers.
+        """Return test inputs for integers."""
         type_info = np.iinfo(src1_np_type)
         src1_data =  np.random.randint(
             type_info.min, type_info.max, n).astype(src1_np_type)
@@ -287,9 +278,8 @@
         return np.packbits(dest_type(values), bitorder='little')
 
 def cast_to_unsigned(arr):
-    """Cast a signed array to an unsigned array.
-    This should not be called with floating point values.
-    """
+    """Cast a signed array to an unsigned array."""
+    """This should not be called with floating point values."""
     udtypes = {np.int8:np.uint8,
                np.int16:np.uint16,
                np.int32:np.uint32,
diff --git a/softrvv/include/softrvv.h b/softrvv/include/softrvv.h
index 76f1313..1046aba 100644
--- a/softrvv/include/softrvv.h
+++ b/softrvv/include/softrvv.h
@@ -2,7 +2,6 @@
 #define SOFTRVV_H
 
 #include <stddef.h>
-#include <stdint.h>
 
 #include "encoding.h"
 #include "softrvv_internal.h"
@@ -32,8 +31,8 @@
 #include "softrvv_vwsub.h"
 #include "softrvv_vxor.h"
 
-#include "softrvv_vfsub.h"
 #include "softrvv_vfadd.h"
+#include "softrvv_vfsub.h"
 
 namespace softrvv {
 
diff --git a/softrvv/include/softrvv_vfadd.h b/softrvv/include/softrvv_vfadd.h
index 0a6633d..86009c8 100644
--- a/softrvv/include/softrvv_vfadd.h
+++ b/softrvv/include/softrvv_vfadd.h
@@ -5,13 +5,15 @@
 
 namespace softrvv {
 
-void vfadd_vf(float *dest, float *src1, const float *src2, int32_t avl) {
+template <typename T>
+void vfadd_vf(T *dest, T *src1, const T *src2, int32_t avl) {
   for (int32_t idx = 0; idx < avl; idx++) {
     dest[idx] = src1[idx] + *src2;
   }
 }
 
-void vfadd_vv(float *dest, float *src1, float *src2, int32_t avl) {
+template <typename T>
+void vfadd_vv(T *dest, T *src1, T *src2, int32_t avl) {
   for (int32_t idx = 0; idx < avl; idx++) {
     dest[idx] = src1[idx] + src2[idx];
   }
diff --git a/softrvv/include/softrvv_vfsub.h b/softrvv/include/softrvv_vfsub.h
index aff1f52..eea2f26 100644
--- a/softrvv/include/softrvv_vfsub.h
+++ b/softrvv/include/softrvv_vfsub.h
@@ -5,19 +5,22 @@
 
 namespace softrvv {
 
-void vfsub_vf(float *dest, float *src1, const float *src2, int32_t avl) {
+template <typename T>
+void vfsub_vf(T *dest, T *src1, const T *src2, int32_t avl) {
   for (int idx = 0; idx < avl; idx++) {
     dest[idx] = src1[idx] - *src2;
   }
 }
 
-void vfsub_vv(float *dest, float *src1, float *src2, int32_t avl) {
+template <typename T>
+void vfsub_vv(T *dest, T *src1, T *src2, int32_t avl) {
   for (int32_t idx = 0; idx < avl; idx++) {
     dest[idx] = src1[idx] - src2[idx];
   }
 }
 
-void vfrsub_vx(float *dest, float *src1, const float *src2, int32_t avl) {
+template <typename T>
+void vfrsub_vx(T *dest, T *src1, const T *src2, int32_t avl) {
   for (int32_t idx = 0; idx < avl; idx++) {
     dest[idx] = *src2 - src1[idx];
   }
diff --git a/softrvv/tests/templates/opivf_test.tpl.cpp b/softrvv/tests/templates/opivf_test.tpl.cpp
index a32bc0d..87c04c1 100644
--- a/softrvv/tests/templates/opivf_test.tpl.cpp
+++ b/softrvv/tests/templates/opivf_test.tpl.cpp
@@ -38,7 +38,7 @@
 %>\
 
 TEST_F(SoftRvv${template_helper.op_code.capitalize()}Test, VF) {
-  softrvv::${template_helper.op_code}_vf(dest, src2, &rs1, kAVL);\
+  softrvv::${template_helper.op_code}_vf<${datatypes}>(dest, src2, &rs1, kAVL);\
 ${insert_check(template_helper, var_types.dest_type, "ref_vf")}\
 }
 </%def>\
diff --git a/softrvv/tests/templates/opivv_test.tpl.cpp b/softrvv/tests/templates/opivv_test.tpl.cpp
index ab54161..08bd2e7 100644
--- a/softrvv/tests/templates/opivv_test.tpl.cpp
+++ b/softrvv/tests/templates/opivv_test.tpl.cpp
@@ -38,11 +38,7 @@
 datatypes = template_helper.get_softrvv_template_data_type()
 %>\
 TEST_F(SoftRvv${template_helper.op_code.capitalize()}Test, VV) {
-  % if template_helper.is_floating():
-    softrvv::${template_helper.op_code}_vv(dest, src2, src1, kAVL);\
-  % else:
-    softrvv::${template_helper.op_code}_vv<${datatypes}>(dest, src2, src1, kAVL);\
-  % endif
+  softrvv::${template_helper.op_code}_vv<${datatypes}>(dest, src2, src1, kAVL);\
 ${insert_check(template_helper, var_types.dest_type, "ref_vv")}\
 }
 
diff --git a/test_v_helpers/include/test_v_helpers.h b/test_v_helpers/include/test_v_helpers.h
index ba28e43..66760c0 100644
--- a/test_v_helpers/include/test_v_helpers.h
+++ b/test_v_helpers/include/test_v_helpers.h
@@ -8,6 +8,20 @@
 
 #include "pw_unit_test/framework.h"
 
+#ifdef __cplusplus
+
+using float32_t = float;
+using float64_t = double;
+using float128_t = long double;
+
+#else
+
+typedef float  float32_t;
+typedef double float64_t;
+typedef long double float128_t;
+
+#endif // __cplusplus
+
 namespace test_v_helpers {
 
 const int LMUL_MAX = 8;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5acd28c..e2f55ff 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,3 +1,12 @@
+# vec_cc_generated_test(
+#   NAME
+#     vfadd
+#   TEMPLATE
+#     opivv_test.tpl.cpp
+#   LINKOPTS
+#    -Xlinker --defsym=__itcm_length__=128K
+# )
+
 vec_cc_generated_test(
   NAME
     vsub
@@ -399,5 +408,4 @@
     vector_vfadd_test.cpp
   LINKOPTS
    -Xlinker --defsym=__itcm_length__=128K
-)
-
+)
\ No newline at end of file
diff --git a/tests/vector_vfadd_test.cpp b/tests/vector_vfadd_test.cpp
index a6abfa1..9ec1eac 100644
--- a/tests/vector_vfadd_test.cpp
+++ b/tests/vector_vfadd_test.cpp
@@ -1,29 +1,48 @@
+#include <limits.h>
+#include <riscv_vector.h>
 #include <softrvv.h>
 #include <springbok.h>
 #include <stdio.h>
+#include <stdlib.h>
 
+#include <stdint.h> 
+#include <bit>
 #include <tuple>
 
 #include "pw_unit_test/framework.h"
 #include "test_v_helpers.h"
 
+#ifdef __cplusplus
+
+using float32_t = float;
+using float64_t = double;
+using float128_t = long double;
+
+#else
+
+typedef float  float32_t;
+typedef double float64_t;
+typedef long double float128_t;
+
+#endif // __cplusplus
+
 namespace vfadd_vv_test
 {
     namespace
     {
         using namespace test_v_helpers;
-
+        
         float src_vector_1[MAXVL_BYTES];
         float src_vector_2[MAXVL_BYTES];
         float dest_vector[MAXVL_BYTES];
         float ref_dest_vector[MAXVL_BYTES];
-
+        
         class VfaddTest : public ::testing::Test {
             protected:
                 void SetUp() override { zero_vector_registers(); }
                 void TearDown() override { zero_vector_registers(); }
         };
-
+        
         TEST_F(VfaddTest, vfadd_vv32m1) {
             for (int i = 0; i < AVL_COUNT; i++) {
                 int32_t avl = AVLS[i];
@@ -33,12 +52,12 @@
                 /* For non narrowing instructions all vectors have same type*/
                 std::tie(vlmax, vl) = vector_test_setup<int32_t>(
                     VLMUL::LMUL_M1, avl,
-                    {dest_vector, ref_dest_vector, src_vector_1, src_vector_2});
-
+                    {dest_vector, ref_dest_vector, src_vector_1});
+                    
                 if (avl > vlmax) {
                      continue;
                 }
-
+    
                 float *ptr_vec_1 = reinterpret_cast<float *>(src_vector_1);
                 float *ptr_vec_2 = reinterpret_cast<float *>(src_vector_2);
                 float *ptr_dest_vec = reinterpret_cast<float *>(dest_vector);
@@ -47,9 +66,11 @@
                 // set up values to test up to index of the AVL
                 fill_random_vector<float>(ptr_vec_1, avl);
                 fill_random_vector<float>(ptr_vec_2, avl);
+                memset(dest_vector, 0, MAXVL_BYTES);
+                memset(ref_dest_vector, 0, MAXVL_BYTES);
 
                 // Generate reference vector
-                softrvv::vfadd_vv(ptr_ref_dest_vec, ptr_vec_2, ptr_vec_1, avl);
+                softrvv::vfadd_vv<float>(ptr_ref_dest_vec, ptr_vec_2, ptr_vec_1, avl);
                 // Load vector registers
                 __asm__ volatile("vle32.v v8, (%0)" : : "r"(ptr_vec_1));
                 __asm__ volatile("vle32.v v16, (%0)" : : "r"(ptr_vec_2));
