Pass func_config to individual operator API

Updates the generate_api.py script and associated
templates to allow func_config and debug_config
to be passed when running individual operators
on the API.

This will allow us, for example, to set precise_mode
and abs_mode when running individual operators.

Signed-off-by: Grant Watson <grant.watson@arm.com>
Change-Id: Ia3e7ffc146f876daa307558433177c68285843b7
diff --git a/reference_model/include/operators.h b/reference_model/include/operators.h
index b0a3227..25477d7 100644
--- a/reference_model/include/operators.h
+++ b/reference_model/include/operators.h
@@ -19,6 +19,9 @@
 #ifndef OPERATORS_H_
 #define OPERATORS_H_
 
+#include "func_config.h"
+#include "func_debug.h"
+
 #include <stddef.h>
 #include <stdint.h>
 
@@ -69,7 +72,11 @@
         size_t size;
     };
 
-    tosa_status_t tosa_run_argmax(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_argmax(tosa_tensor_t client_input,
+                                  const int32_t client_axis,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_avg_pool2d(tosa_tensor_t client_input,
                                       const int32_t client_kernel[2],
@@ -77,7 +84,9 @@
                                       const int32_t client_pad[4],
                                       const int32_t client_input_zp,
                                       const int32_t client_output_zp,
-                                      tosa_tensor_t client_output);
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_conv2d(tosa_tensor_t client_input,
                                   tosa_tensor_t client_weight,
@@ -87,7 +96,9 @@
                                   const int32_t client_dilation[2],
                                   const int32_t client_input_zp,
                                   const int32_t client_weight_zp,
-                                  tosa_tensor_t client_output);
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_conv3d(tosa_tensor_t client_input,
                                   tosa_tensor_t client_weight,
@@ -97,7 +108,9 @@
                                   const int32_t client_dilation[3],
                                   const int32_t client_input_zp,
                                   const int32_t client_weight_zp,
-                                  tosa_tensor_t client_output);
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_depthwise_conv2d(tosa_tensor_t client_input,
                                             tosa_tensor_t client_weight,
@@ -107,20 +120,26 @@
                                             const int32_t client_dilation[2],
                                             const int32_t client_input_zp,
                                             const int32_t client_weight_zp,
-                                            tosa_tensor_t client_output);
+                                            tosa_tensor_t client_output,
+                                            const func_config_t& func_config = func_config_t{},
+                                            const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_fully_connected(tosa_tensor_t client_input,
                                            tosa_tensor_t client_weight,
                                            tosa_tensor_t client_bias,
                                            const int32_t client_input_zp,
                                            const int32_t client_weight_zp,
-                                           tosa_tensor_t client_output);
+                                           tosa_tensor_t client_output,
+                                           const func_config_t& func_config = func_config_t{},
+                                           const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_matmul(tosa_tensor_t client_a,
                                   tosa_tensor_t client_b,
                                   const int32_t client_a_zp,
                                   const int32_t client_b_zp,
-                                  tosa_tensor_t client_output);
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_max_pool2d(tosa_tensor_t client_input,
                                       const int32_t client_kernel[2],
@@ -128,7 +147,9 @@
                                       const int32_t client_pad[4],
                                       const int32_t client_input_zp,
                                       const int32_t client_output_zp,
-                                      tosa_tensor_t client_output);
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_transpose_conv2d(tosa_tensor_t client_input,
                                             tosa_tensor_t client_weight,
@@ -140,184 +161,340 @@
                                             const int32_t client_pad[],
                                             const int32_t client_dilation_len,
                                             const int32_t client_dilation[],
-                                            tosa_tensor_t client_output);
+                                            tosa_tensor_t client_output,
+                                            const func_config_t& func_config = func_config_t{},
+                                            const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_clamp(tosa_tensor_t client_input,
                                  const int32_t client_min_int,
                                  const int32_t client_max_int,
                                  const float client_min_fp,
                                  const float client_max_fp,
-                                 tosa_tensor_t client_output);
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config = func_config_t{},
+                                 const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_erf(tosa_tensor_t client_input,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_tanh(tosa_tensor_t client_input, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_erf(tosa_tensor_t client_input, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_tanh(tosa_tensor_t client_input,
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config = func_config_t{},
+                                const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_add(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_add(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_input2,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_arithmetic_right_shift(tosa_tensor_t client_input1,
                                                   tosa_tensor_t client_input2,
                                                   const bool client_round,
-                                                  tosa_tensor_t client_output);
+                                                  tosa_tensor_t client_output,
+                                                  const func_config_t& func_config = func_config_t{},
+                                                  const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_bitwise_and(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_bitwise_and(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config = func_config_t{},
+                                       const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_bitwise_or(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_bitwise_or(tosa_tensor_t client_input1,
+                                      tosa_tensor_t client_input2,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_bitwise_xor(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_bitwise_xor(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config = func_config_t{},
+                                       const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_intdiv(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_intdiv(tosa_tensor_t client_input1,
+                                  tosa_tensor_t client_input2,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_logical_and(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_logical_and(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config = func_config_t{},
+                                       const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_logical_left_shift(tosa_tensor_t client_input1,
                                               tosa_tensor_t client_input2,
-                                              tosa_tensor_t client_output);
+                                              tosa_tensor_t client_output,
+                                              const func_config_t& func_config = func_config_t{},
+                                              const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_logical_right_shift(tosa_tensor_t client_input1,
                                                tosa_tensor_t client_input2,
-                                               tosa_tensor_t client_output);
+                                               tosa_tensor_t client_output,
+                                               const func_config_t& func_config = func_config_t{},
+                                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_logical_or(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_logical_or(tosa_tensor_t client_input1,
+                                      tosa_tensor_t client_input2,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_logical_xor(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_logical_xor(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config = func_config_t{},
+                                       const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_maximum(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_maximum(tosa_tensor_t client_input1,
+                                   tosa_tensor_t client_input2,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_minimum(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_minimum(tosa_tensor_t client_input1,
+                                   tosa_tensor_t client_input2,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_mul(tosa_tensor_t client_input1,
                                tosa_tensor_t client_input2,
                                const int32_t client_shift,
-                               tosa_tensor_t client_output);
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_pow(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_pow(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_input2,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_sub(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_sub(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_input2,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_table(tosa_tensor_t client_input,
                                  const int32_t client_table_len,
                                  const int16_t client_table[],
-                                 tosa_tensor_t client_output);
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config = func_config_t{},
+                                 const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_abs(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_abs(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_bitwise_not(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_bitwise_not(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config = func_config_t{},
+                                       const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_ceil(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_ceil(tosa_tensor_t client_input1,
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config = func_config_t{},
+                                const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_clz(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_clz(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_exp(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_exp(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_floor(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_floor(tosa_tensor_t client_input1,
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config = func_config_t{},
+                                 const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_log(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_log(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_logical_not(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_logical_not(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config = func_config_t{},
+                                       const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_negate(tosa_tensor_t client_input1,
                                   const int32_t client_input1_zp,
                                   const int32_t client_output_zp,
-                                  tosa_tensor_t client_output);
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_rsqrt(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_rsqrt(tosa_tensor_t client_input1,
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config = func_config_t{},
+                                 const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_select(tosa_tensor_t client_input1,
                                   tosa_tensor_t client_input2,
                                   tosa_tensor_t client_input3,
-                                  tosa_tensor_t client_output);
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_equal(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_equal(tosa_tensor_t client_input1,
+                                 tosa_tensor_t client_input2,
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config = func_config_t{},
+                                 const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_greater(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_greater(tosa_tensor_t client_input1,
+                                   tosa_tensor_t client_input2,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_greater_equal(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_greater_equal(tosa_tensor_t client_input1,
+                                         tosa_tensor_t client_input2,
+                                         tosa_tensor_t client_output,
+                                         const func_config_t& func_config = func_config_t{},
+                                         const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_reduce_all(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reduce_all(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_reduce_any(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reduce_any(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_reduce_max(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reduce_max(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_reduce_min(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reduce_min(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_reduce_product(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reduce_product(tosa_tensor_t client_input,
+                                          const int32_t client_axis,
+                                          tosa_tensor_t client_output,
+                                          const func_config_t& func_config = func_config_t{},
+                                          const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_reduce_sum(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reduce_sum(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config = func_config_t{},
+                                      const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_concat(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_concat(tosa_tensor_t client_input1,
+                                  const int32_t client_axis,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_pad(tosa_tensor_t client_input1,
                                const int32_t client_padding_len,
                                const int32_t client_padding[],
                                const int32_t client_pad_const_int,
                                const float client_pad_const_fp,
-                               tosa_tensor_t client_output);
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_dim(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_dim(tosa_tensor_t client_input1,
+                               const int32_t client_axis,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config = func_config_t{},
+                               const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_reshape(tosa_tensor_t client_input1,
                                    const int32_t client_new_shape_len,
                                    const int32_t client_new_shape[],
-                                   tosa_tensor_t client_output);
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_reverse(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_reverse(tosa_tensor_t client_input,
+                                   const int32_t client_axis,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_slice(tosa_tensor_t client_input1,
                                  const int32_t client_start_len,
                                  const int32_t client_start[],
                                  const int32_t client_size_len,
                                  const int32_t client_size[],
-                                 tosa_tensor_t client_output);
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config = func_config_t{},
+                                 const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_tile(tosa_tensor_t client_input1,
                                 const int32_t client_multiples_len,
                                 const int32_t client_multiples[],
-                                tosa_tensor_t client_output);
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config = func_config_t{},
+                                const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_transpose(tosa_tensor_t client_input1,
                                      const int32_t client_perms_len,
                                      const int32_t client_perms[],
-                                     tosa_tensor_t client_output);
+                                     tosa_tensor_t client_output,
+                                     const func_config_t& func_config = func_config_t{},
+                                     const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t
-        tosa_run_gather(tosa_tensor_t client_values, tosa_tensor_t client_indices, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_gather(tosa_tensor_t client_values,
+                                  tosa_tensor_t client_indices,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_scatter(tosa_tensor_t client_values_in,
                                    tosa_tensor_t client_indices,
                                    tosa_tensor_t client_input,
-                                   tosa_tensor_t client_values_out);
+                                   tosa_tensor_t client_values_out,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_resize(tosa_tensor_t client_input,
                                   const int16_t client_scale[4],
                                   const int16_t client_offset[2],
                                   const int16_t client_border[2],
                                   const tosa_mode_t client_mode,
-                                  tosa_tensor_t client_output);
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config = func_config_t{},
+                                  const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_cast(tosa_tensor_t client_input, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_cast(tosa_tensor_t client_input,
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config = func_config_t{},
+                                const func_debug_t& func_debug   = func_debug_t{});
 
     tosa_status_t tosa_run_rescale(tosa_tensor_t client_input,
                                    tosa_tensor_t client_output,
@@ -329,9 +506,14 @@
                                    const int32_t client_shift[],
                                    const bool client_scale32,
                                    const bool client_double_round,
-                                   const bool client_per_channel);
+                                   const bool client_per_channel,
+                                   const func_config_t& func_config = func_config_t{},
+                                   const func_debug_t& func_debug   = func_debug_t{});
 
-    tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, tosa_tensor_t client_output);
+    tosa_status_t tosa_run_identity(tosa_tensor_t client_input1,
+                                    tosa_tensor_t client_output,
+                                    const func_config_t& func_config = func_config_t{},
+                                    const func_debug_t& func_debug   = func_debug_t{});
 
 #ifdef __cplusplus
 }
diff --git a/reference_model/src/operators.cc b/reference_model/src/operators.cc
index ae5963d..68314c9 100644
--- a/reference_model/src/operators.cc
+++ b/reference_model/src/operators.cc
@@ -100,7 +100,11 @@
 extern "C"
 {
 
-    tosa_status_t tosa_run_argmax(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_argmax(tosa_tensor_t client_input,
+                                  const int32_t client_axis,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -119,7 +123,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -138,7 +142,9 @@
                                       const int32_t client_pad[4],
                                       const int32_t client_input_zp,
                                       const int32_t client_output_zp,
-                                      tosa_tensor_t client_output)
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> pad(&client_pad[0], &client_pad[4]);
@@ -162,7 +168,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -183,7 +189,9 @@
                                   const int32_t client_dilation[2],
                                   const int32_t client_input_zp,
                                   const int32_t client_weight_zp,
-                                  tosa_tensor_t client_output)
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> pad(&client_pad[0], &client_pad[4]);
@@ -210,7 +218,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size));
@@ -233,7 +241,9 @@
                                   const int32_t client_dilation[3],
                                   const int32_t client_input_zp,
                                   const int32_t client_weight_zp,
-                                  tosa_tensor_t client_output)
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> pad(&client_pad[0], &client_pad[6]);
@@ -260,7 +270,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size));
@@ -283,7 +293,9 @@
                                             const int32_t client_dilation[2],
                                             const int32_t client_input_zp,
                                             const int32_t client_weight_zp,
-                                            tosa_tensor_t client_output)
+                                            tosa_tensor_t client_output,
+                                            const func_config_t& func_config,
+                                            const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> pad(&client_pad[0], &client_pad[4]);
@@ -310,7 +322,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size));
@@ -330,7 +342,9 @@
                                            tosa_tensor_t client_bias,
                                            const int32_t client_input_zp,
                                            const int32_t client_weight_zp,
-                                           tosa_tensor_t client_output)
+                                           tosa_tensor_t client_output,
+                                           const func_config_t& func_config,
+                                           const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t input_zp  = client_input_zp;
@@ -354,7 +368,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size));
@@ -373,7 +387,9 @@
                                   tosa_tensor_t client_b,
                                   const int32_t client_a_zp,
                                   const int32_t client_b_zp,
-                                  tosa_tensor_t client_output)
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t a_zp = client_a_zp;
@@ -394,7 +410,7 @@
                                                 { a->GetName(), b->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(a->GetName(), client_a.data, client_a.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(b->GetName(), client_b.data, client_b.size));
@@ -414,7 +430,9 @@
                                       const int32_t client_pad[4],
                                       const int32_t client_input_zp,
                                       const int32_t client_output_zp,
-                                      tosa_tensor_t client_output)
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> pad(&client_pad[0], &client_pad[4]);
@@ -438,7 +456,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -461,7 +479,9 @@
                                             const int32_t client_pad[],
                                             const int32_t client_dilation_len,
                                             const int32_t client_dilation[],
-                                            tosa_tensor_t client_output)
+                                            tosa_tensor_t client_output,
+                                            const func_config_t& func_config,
+                                            const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> pad(&client_pad[0], &client_pad[0] + client_pad_len);
@@ -488,7 +508,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size));
@@ -508,7 +528,9 @@
                                  const int32_t client_max_int,
                                  const float client_min_fp,
                                  const float client_max_fp,
-                                 tosa_tensor_t client_output)
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config,
+                                 const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t min_int = client_min_int;
@@ -530,7 +552,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -543,69 +565,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, tosa_tensor_t client_output)
-    {
-        // Create operator attributes
-        TosaNoneAttribute attr;
-
-        // Create tensors
-        tosa::TosaSerializationTensor* input  = translate_client_tensor(client_input, "input");
-        tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output");
-
-        // Create operator
-        auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_SIGMOID, tosa::Attribute::Attribute_NONE, &attr,
-                                                      { input->GetName() }, { output->GetName() });
-
-        // Create a tosa single-op basic block
-        tosa::TosaSerializationBasicBlock block("sigmoid", "main", { op }, { input, output }, { input->GetName() },
-                                                { output->GetName() });
-
-        // Setup model
-        TosaReference::ModelRunnerImpl runner;
-        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
-        TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
-
-        // Execute
-        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.run());
-
-        // Extract outputs
-        TOSA_RETURN_ON_ERROR(runner.getOutput(output->GetName(), client_output.data, client_output.size));
-
-        return tosa_status_valid;
-    }
-
-    tosa_status_t tosa_run_tanh(tosa_tensor_t client_input, tosa_tensor_t client_output)
-    {
-        // Create operator attributes
-        TosaNoneAttribute attr;
-
-        // Create tensors
-        tosa::TosaSerializationTensor* input  = translate_client_tensor(client_input, "input");
-        tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output");
-
-        // Create operator
-        auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_TANH, tosa::Attribute::Attribute_NONE, &attr,
-                                                      { input->GetName() }, { output->GetName() });
-
-        // Create a tosa single-op basic block
-        tosa::TosaSerializationBasicBlock block("tanh", "main", { op }, { input, output }, { input->GetName() },
-                                                { output->GetName() });
-
-        // Setup model
-        TosaReference::ModelRunnerImpl runner;
-        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
-        TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
-
-        // Execute
-        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.run());
-
-        // Extract outputs
-        TOSA_RETURN_ON_ERROR(runner.getOutput(output->GetName(), client_output.data, client_output.size));
-
-        return tosa_status_valid;
-    }
-
-    tosa_status_t tosa_run_erf(tosa_tensor_t client_input, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_erf(tosa_tensor_t client_input,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -623,7 +586,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -636,7 +599,79 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_add(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
+    {
+        // Create operator attributes
+        TosaNoneAttribute attr;
+
+        // Create tensors
+        tosa::TosaSerializationTensor* input  = translate_client_tensor(client_input, "input");
+        tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output");
+
+        // Create operator
+        auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_SIGMOID, tosa::Attribute::Attribute_NONE, &attr,
+                                                      { input->GetName() }, { output->GetName() });
+
+        // Create a tosa single-op basic block
+        tosa::TosaSerializationBasicBlock block("sigmoid", "main", { op }, { input, output }, { input->GetName() },
+                                                { output->GetName() });
+
+        // Setup model
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
+        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
+        TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
+
+        // Execute
+        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.run());
+
+        // Extract outputs
+        TOSA_RETURN_ON_ERROR(runner.getOutput(output->GetName(), client_output.data, client_output.size));
+
+        return tosa_status_valid;
+    }
+
+    tosa_status_t tosa_run_tanh(tosa_tensor_t client_input,
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config,
+                                const func_debug_t& func_debug)
+    {
+        // Create operator attributes
+        TosaNoneAttribute attr;
+
+        // Create tensors
+        tosa::TosaSerializationTensor* input  = translate_client_tensor(client_input, "input");
+        tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output");
+
+        // Create operator
+        auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_TANH, tosa::Attribute::Attribute_NONE, &attr,
+                                                      { input->GetName() }, { output->GetName() });
+
+        // Create a tosa single-op basic block
+        tosa::TosaSerializationBasicBlock block("tanh", "main", { op }, { input, output }, { input->GetName() },
+                                                { output->GetName() });
+
+        // Setup model
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
+        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
+        TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
+
+        // Execute
+        TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.run());
+
+        // Extract outputs
+        TOSA_RETURN_ON_ERROR(runner.getOutput(output->GetName(), client_output.data, client_output.size));
+
+        return tosa_status_valid;
+    }
+
+    tosa_status_t tosa_run_add(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_input2,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -655,7 +690,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -672,7 +707,9 @@
     tosa_status_t tosa_run_arithmetic_right_shift(tosa_tensor_t client_input1,
                                                   tosa_tensor_t client_input2,
                                                   const bool client_round,
-                                                  tosa_tensor_t client_output)
+                                                  tosa_tensor_t client_output,
+                                                  const func_config_t& func_config,
+                                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const bool round = client_round;
@@ -693,7 +730,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -707,8 +744,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_bitwise_and(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_bitwise_and(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config,
+                                       const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -727,7 +767,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -741,8 +781,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_bitwise_or(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_bitwise_or(tosa_tensor_t client_input1,
+                                      tosa_tensor_t client_input2,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -761,7 +804,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -775,8 +818,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_bitwise_xor(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_bitwise_xor(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config,
+                                       const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -795,7 +841,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -809,7 +855,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_intdiv(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_intdiv(tosa_tensor_t client_input1,
+                                  tosa_tensor_t client_input2,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -828,7 +878,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -842,8 +892,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_logical_and(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_logical_and(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config,
+                                       const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -862,7 +915,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -878,7 +931,9 @@
 
     tosa_status_t tosa_run_logical_left_shift(tosa_tensor_t client_input1,
                                               tosa_tensor_t client_input2,
-                                              tosa_tensor_t client_output)
+                                              tosa_tensor_t client_output,
+                                              const func_config_t& func_config,
+                                              const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -898,7 +953,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -914,7 +969,9 @@
 
     tosa_status_t tosa_run_logical_right_shift(tosa_tensor_t client_input1,
                                                tosa_tensor_t client_input2,
-                                               tosa_tensor_t client_output)
+                                               tosa_tensor_t client_output,
+                                               const func_config_t& func_config,
+                                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -934,7 +991,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -948,8 +1005,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_logical_or(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_logical_or(tosa_tensor_t client_input1,
+                                      tosa_tensor_t client_input2,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -968,7 +1028,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -982,8 +1042,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_logical_xor(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_logical_xor(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_input2,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config,
+                                       const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1002,7 +1065,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1016,8 +1079,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_maximum(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_maximum(tosa_tensor_t client_input1,
+                                   tosa_tensor_t client_input2,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1036,7 +1102,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1050,8 +1116,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_minimum(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_minimum(tosa_tensor_t client_input1,
+                                   tosa_tensor_t client_input2,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1070,7 +1139,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1087,7 +1156,9 @@
     tosa_status_t tosa_run_mul(tosa_tensor_t client_input1,
                                tosa_tensor_t client_input2,
                                const int32_t client_shift,
-                               tosa_tensor_t client_output)
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t shift = client_shift;
@@ -1107,7 +1178,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1121,7 +1192,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_pow(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_pow(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_input2,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1140,7 +1215,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1154,7 +1229,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_sub(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_sub(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_input2,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1173,7 +1252,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1190,7 +1269,9 @@
     tosa_status_t tosa_run_table(tosa_tensor_t client_input,
                                  const int32_t client_table_len,
                                  const int16_t client_table[],
-                                 tosa_tensor_t client_output)
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config,
+                                 const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int16_t> table(&client_table[0], &client_table[0] + client_table_len);
@@ -1209,7 +1290,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1222,7 +1303,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_abs(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_abs(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1240,7 +1324,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1253,7 +1337,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_bitwise_not(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_bitwise_not(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config,
+                                       const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1271,7 +1358,7 @@
                                                 { input1->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1284,7 +1371,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_ceil(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_ceil(tosa_tensor_t client_input1,
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config,
+                                const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1302,7 +1392,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1315,7 +1405,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_clz(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_clz(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1333,7 +1426,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1346,7 +1439,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_exp(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_exp(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1364,7 +1460,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1377,7 +1473,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_floor(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_floor(tosa_tensor_t client_input1,
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config,
+                                 const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1395,7 +1494,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1408,7 +1507,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_log(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_log(tosa_tensor_t client_input1,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1426,7 +1528,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1439,7 +1541,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_logical_not(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_logical_not(tosa_tensor_t client_input1,
+                                       tosa_tensor_t client_output,
+                                       const func_config_t& func_config,
+                                       const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1457,7 +1562,7 @@
                                                 { input1->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1473,7 +1578,9 @@
     tosa_status_t tosa_run_negate(tosa_tensor_t client_input1,
                                   const int32_t client_input1_zp,
                                   const int32_t client_output_zp,
-                                  tosa_tensor_t client_output)
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t input1_zp = client_input1_zp;
@@ -1493,7 +1600,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1506,7 +1613,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1524,7 +1634,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1537,7 +1647,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_rsqrt(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_rsqrt(tosa_tensor_t client_input1,
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config,
+                                 const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1555,7 +1668,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1571,7 +1684,9 @@
     tosa_status_t tosa_run_select(tosa_tensor_t client_input1,
                                   tosa_tensor_t client_input2,
                                   tosa_tensor_t client_input3,
-                                  tosa_tensor_t client_output)
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1593,7 +1708,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1608,7 +1723,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_equal(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_equal(tosa_tensor_t client_input1,
+                                 tosa_tensor_t client_input2,
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config,
+                                 const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1627,7 +1746,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1641,8 +1760,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_greater(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_greater(tosa_tensor_t client_input1,
+                                   tosa_tensor_t client_input2,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1661,7 +1783,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1675,8 +1797,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_greater_equal(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_greater_equal(tosa_tensor_t client_input1,
+                                         tosa_tensor_t client_input2,
+                                         tosa_tensor_t client_output,
+                                         const func_config_t& func_config,
+                                         const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -1696,7 +1821,7 @@
                                                 { input1->GetName(), input2->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size));
@@ -1710,8 +1835,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_reduce_all(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reduce_all(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1730,7 +1858,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1743,8 +1871,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_reduce_any(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reduce_any(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1763,7 +1894,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1776,8 +1907,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_reduce_max(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reduce_max(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1796,7 +1930,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1809,8 +1943,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_reduce_min(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reduce_min(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1829,7 +1966,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1842,8 +1979,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_reduce_product(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reduce_product(tosa_tensor_t client_input,
+                                          const int32_t client_axis,
+                                          tosa_tensor_t client_output,
+                                          const func_config_t& func_config,
+                                          const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1863,7 +2003,7 @@
                                                 { input->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1876,8 +2016,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_reduce_sum(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reduce_sum(tosa_tensor_t client_input,
+                                      const int32_t client_axis,
+                                      tosa_tensor_t client_output,
+                                      const func_config_t& func_config,
+                                      const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1896,7 +2039,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -1909,7 +2052,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_concat(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_concat(tosa_tensor_t client_input1,
+                                  const int32_t client_axis,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -1928,7 +2075,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1946,7 +2093,9 @@
                                const int32_t client_padding[],
                                const int32_t client_pad_const_int,
                                const float client_pad_const_fp,
-                               tosa_tensor_t client_output)
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> padding(&client_padding[0], &client_padding[0] + client_padding_len);
@@ -1967,7 +2116,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -1980,7 +2129,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_dim(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_dim(tosa_tensor_t client_input1,
+                               const int32_t client_axis,
+                               tosa_tensor_t client_output,
+                               const func_config_t& func_config,
+                               const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaAxisAttribute attr(client_axis);
@@ -1998,7 +2151,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -2011,7 +2164,9 @@
     tosa_status_t tosa_run_reshape(tosa_tensor_t client_input1,
                                    const int32_t client_new_shape_len,
                                    const int32_t client_new_shape[],
-                                   tosa_tensor_t client_output)
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> new_shape(&client_new_shape[0], &client_new_shape[0] + client_new_shape_len);
@@ -2030,7 +2185,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -2043,7 +2198,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_reverse(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_reverse(tosa_tensor_t client_input,
+                                   const int32_t client_axis,
+                                   tosa_tensor_t client_output,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t axis = client_axis;
@@ -2062,7 +2221,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -2080,7 +2239,9 @@
                                  const int32_t client_start[],
                                  const int32_t client_size_len,
                                  const int32_t client_size[],
-                                 tosa_tensor_t client_output)
+                                 tosa_tensor_t client_output,
+                                 const func_config_t& func_config,
+                                 const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> start(&client_start[0], &client_start[0] + client_start_len);
@@ -2100,7 +2261,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -2116,7 +2277,9 @@
     tosa_status_t tosa_run_tile(tosa_tensor_t client_input1,
                                 const int32_t client_multiples_len,
                                 const int32_t client_multiples[],
-                                tosa_tensor_t client_output)
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config,
+                                const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> multiples(&client_multiples[0], &client_multiples[0] + client_multiples_len);
@@ -2135,7 +2298,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -2151,7 +2314,9 @@
     tosa_status_t tosa_run_transpose(tosa_tensor_t client_input1,
                                      const int32_t client_perms_len,
                                      const int32_t client_perms[],
-                                     tosa_tensor_t client_output)
+                                     tosa_tensor_t client_output,
+                                     const func_config_t& func_config,
+                                     const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int32_t> perms(&client_perms[0], &client_perms[0] + client_perms_len);
@@ -2171,7 +2336,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -2184,8 +2349,11 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t
-        tosa_run_gather(tosa_tensor_t client_values, tosa_tensor_t client_indices, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_gather(tosa_tensor_t client_values,
+                                  tosa_tensor_t client_indices,
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -2204,7 +2372,7 @@
                                                 { values->GetName(), indices->GetName() }, { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(values->GetName(), client_values.data, client_values.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(indices->GetName(), client_indices.data, client_indices.size));
@@ -2221,7 +2389,9 @@
     tosa_status_t tosa_run_scatter(tosa_tensor_t client_values_in,
                                    tosa_tensor_t client_indices,
                                    tosa_tensor_t client_input,
-                                   tosa_tensor_t client_values_out)
+                                   tosa_tensor_t client_values_out,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -2243,7 +2413,7 @@
                                                 { values_out->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(values_in->GetName(), client_values_in.data, client_values_in.size));
         TOSA_RETURN_ON_ERROR(runner.setInput(indices->GetName(), client_indices.data, client_indices.size));
@@ -2263,7 +2433,9 @@
                                   const int16_t client_offset[2],
                                   const int16_t client_border[2],
                                   const tosa_mode_t client_mode,
-                                  tosa_tensor_t client_output)
+                                  tosa_tensor_t client_output,
+                                  const func_config_t& func_config,
+                                  const func_debug_t& func_debug)
     {
         // Create operator attributes
         const std::vector<int16_t> scale(&client_scale[0], &client_scale[4]);
@@ -2285,7 +2457,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -2298,7 +2470,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_cast(tosa_tensor_t client_input, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_cast(tosa_tensor_t client_input,
+                                tosa_tensor_t client_output,
+                                const func_config_t& func_config,
+                                const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -2316,7 +2491,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -2339,7 +2514,9 @@
                                    const int32_t client_shift[],
                                    const bool client_scale32,
                                    const bool client_double_round,
-                                   const bool client_per_channel)
+                                   const bool client_per_channel,
+                                   const func_config_t& func_config,
+                                   const func_debug_t& func_debug)
     {
         // Create operator attributes
         const int32_t input_zp  = client_input_zp;
@@ -2364,7 +2541,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size));
 
@@ -2377,7 +2554,10 @@
         return tosa_status_valid;
     }
 
-    tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, tosa_tensor_t client_output)
+    tosa_status_t tosa_run_identity(tosa_tensor_t client_input1,
+                                    tosa_tensor_t client_output,
+                                    const func_config_t& func_config,
+                                    const func_debug_t& func_debug)
     {
         // Create operator attributes
         TosaNoneAttribute attr;
@@ -2395,7 +2575,7 @@
                                                 { output->GetName() });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size));
 
@@ -2408,4 +2588,4 @@
         return tosa_status_valid;
     }
 
-}    // extern "C"
+}    // extern "C"
\ No newline at end of file
diff --git a/reference_model/test/model_runner_tests.cpp b/reference_model/test/model_runner_tests.cpp
index bb57657..0b73494 100644
--- a/reference_model/test/model_runner_tests.cpp
+++ b/reference_model/test/model_runner_tests.cpp
@@ -178,6 +178,67 @@
         compareOutput(dstData, expectedData, expectedData.size());
     }
 
+    TEST_CASE("op_entry_conv2d_abs_mode")
+    {
+        // Conv parameters
+        const int32_t stride[2]   = { 1, 1 };
+        const int32_t pad[4]      = { 0, 0, 0, 0 };
+        const int32_t dilation[2] = { 1, 1 };
+
+        // Inputs/Outputs
+        tosa_datatype_t dt                = tosa_datatype_fp32_t;
+        std::vector<int32_t> input_shape  = { 1, 32, 32, 8 };
+        std::vector<int32_t> output_shape = { 1, 32, 32, 16 };
+        std::vector<int32_t> weight_shape = { 16, 1, 1, 8 };
+        std::vector<int32_t> bias_shape   = { 16 };
+        std::vector<float> srcData(32 * 32 * 8, -1.0f);
+        std::vector<float> dstData(32 * 32 * 16, 0.f);
+        std::vector<float> biasData(16, 0.f);
+        std::vector<float> weightData(16 * 8, 1.0f);
+
+        tosa_tensor_t input;
+        input.shape     = input_shape.data();
+        input.num_dims  = input_shape.size();
+        input.data_type = dt;
+        input.data      = reinterpret_cast<uint8_t*>(srcData.data());
+        input.size      = srcData.size() * sizeof(float);
+
+        tosa_tensor_t weight;
+        weight.shape     = weight_shape.data();
+        weight.num_dims  = weight_shape.size();
+        weight.data_type = dt;
+        weight.data      = reinterpret_cast<uint8_t*>(weightData.data());
+        weight.size      = weightData.size() * sizeof(float);
+
+        tosa_tensor_t bias;
+        bias.shape     = bias_shape.data();
+        bias.num_dims  = bias_shape.size();
+        bias.data_type = dt;
+        bias.data      = reinterpret_cast<uint8_t*>(biasData.data());
+        bias.size      = biasData.size() * sizeof(float);
+
+        tosa_tensor_t output;
+        output.shape     = output_shape.data();
+        output.num_dims  = output_shape.size();
+        output.data_type = dt;
+        output.data      = reinterpret_cast<uint8_t*>(dstData.data());
+        output.size      = dstData.size() * sizeof(float);
+
+        const int32_t input_zp  = 0;
+        const int32_t weight_zp = 0;
+
+        // Execution
+        func_config_t func_config;
+        func_config.abs_mode = true;
+        auto status =
+            tosa_run_conv2d(input, weight, bias, pad, stride, dilation, input_zp, weight_zp, output, func_config);
+        CHECK((status == tosa_status_valid));
+
+        // Compare results
+        std::vector<float> expectedData(32 * 32 * 16, 8.0f);
+        compareOutput(dstData, expectedData, expectedData.size());
+    }
+
     TEST_CASE("op_entry_max_pool2d")
     {
         // Pool parameters
diff --git a/scripts/operator_api/generate_api.py b/scripts/operator_api/generate_api.py
index 499eadb..f1cb6e0 100644
--- a/scripts/operator_api/generate_api.py
+++ b/scripts/operator_api/generate_api.py
@@ -1,5 +1,5 @@
 """Generate extended reference model API with eager operator execution entrypoints"""
-# Copyright (c) 2021-2022, ARM Limited.
+# Copyright (c) 2021-2023, ARM Limited.
 # SPDX-License-Identifier: Apache-2.0
 import copy
 import os
@@ -190,7 +190,7 @@
     Return a list of TOSA operators as defined by tosa.xml.
     """
     operators = []
-    ignoreOps = ["while_loop", "cond_if", "const", "custom", "fft2d", "rfft2d", "erf"]
+    ignoreOps = ["while_loop", "cond_if", "const", "custom", "fft2d", "rfft2d"]
     opsXml = tosaXml.getElementsByTagName("operator")
     allSerializeArgs = getSerializeArgs()
     for opXml in opsXml:
@@ -241,6 +241,9 @@
             argType = xmlArg.getAttribute("type")
         argShape = xmlArg.getAttribute("shape")
         argCategory = xmlArg.getAttribute("category")
+        # FullyConnected workaround
+        if (argName == "weight" or argName == "bias") and (argCategory == "attribute"):
+            argCategory = "input"
         # Update argument type
         if argType[-1:] == "*":
             argType = argType[:-1]
diff --git a/scripts/operator_api/templates/operators_cc.j2 b/scripts/operator_api/templates/operators_cc.j2
index 37a0af6..a8f1c24 100644
--- a/scripts/operator_api/templates/operators_cc.j2
+++ b/scripts/operator_api/templates/operators_cc.j2
@@ -45,12 +45,28 @@
 {
     switch (type)
     {
+        case tosa_datatype_bf16_t:
+            return tosa::DType::DType_BF16;
+        case tosa_datatype_bool_t:
+            return tosa::DType::DType_BOOL;
         case tosa_datatype_fp16_t:
             return tosa::DType::DType_FP16;
         case tosa_datatype_fp32_t:
             return tosa::DType::DType_FP32;
-        case tosa_datatype_bool_t:
-            return tosa::DType::DType_BOOL;
+        case tosa_datatype_int16_t:
+            return tosa::DType::DType_INT16;
+        case tosa_datatype_int32_t:
+            return tosa::DType::DType_INT32;
+        case tosa_datatype_int48_t:
+            return tosa::DType::DType_INT48;
+        case tosa_datatype_int4_t:
+            return tosa::DType::DType_INT4;
+        case tosa_datatype_int8_t:
+            return tosa::DType::DType_INT8;
+        case tosa_datatype_uint16_t:
+            return tosa::DType::DType_UINT16;
+        case tosa_datatype_uint8_t:
+            return tosa::DType::DType_UINT8;
         default:
             return tosa::DType::DType_UNKNOWN;
     }
@@ -83,7 +99,8 @@
         {%- for arg in operator.arguments: -%}
             {% if arg.type != "tosa_tensor_t" -%}const {% endif -%}{{arg.type}} client_{{arg.name}}{{arg.shape}}
             {% if loop.index < operator.arguments|length %},{% endif %}
-        {%- endfor -%}
+        {%- endfor -%}, const func_config_t &func_config,
+                        const func_debug_t &func_debug
     )
     {
         // Create operator attributes
@@ -157,7 +174,7 @@
                                                  });
 
         // Setup model
-        TosaReference::ModelRunnerImpl runner;
+        TosaReference::ModelRunnerImpl runner(func_config, func_debug);
         TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block));
         {% for input in operator.inputs: -%}
             TOSA_RETURN_ON_ERROR(runner.setInput({{input}}->GetName(), client_{{input}}.data, client_{{input}}.size));
diff --git a/scripts/operator_api/templates/operators_h.j2 b/scripts/operator_api/templates/operators_h.j2
index 803b76a..042d7a5 100644
--- a/scripts/operator_api/templates/operators_h.j2
+++ b/scripts/operator_api/templates/operators_h.j2
@@ -1,5 +1,5 @@
 
-// Copyright (c) 2022, ARM Limited.
+// Copyright (c) 2022-2023, ARM Limited.
 //
 //    Licensed under the Apache License, Version 2.0 (the "License");
 //    you may not use this file except in compliance with the License.
@@ -19,6 +19,9 @@
 #ifndef OPERATORS_H_
 #define OPERATORS_H_
 
+#include "func_config.h"
+#include "func_debug.h"
+
 #include <stddef.h>
 #include <stdint.h>
 
@@ -64,7 +67,8 @@
             {%- for arg in operator.arguments: -%}
                 {% if arg.type != "tosa_tensor_t" -%}const {% endif -%}{{arg.type}} client_{{arg.name}}{{arg.shape}}
                 {% if loop.index < operator.arguments|length %},{% endif %}
-            {%- endfor -%});
+            {%- endfor -%}, const func_config_t &func_config = func_config_t{},
+                            const func_debug_t &func_debug = func_debug_t{});
     {% endfor %}
 
 #ifdef __cplusplus