Refactor VUNARY microkernel parameters

- Move mask_table into AVX microkernel parameters to unblock amalgamation

PiperOrigin-RevId: 419115513
diff --git a/test/f32-vabs.cc b/test/f32-vabs.cc
index f5a7d4a..4c7b1d1 100644
--- a/test/f32-vabs.cc
+++ b/test/f32-vabs.cc
@@ -22,7 +22,7 @@
     TEST_REQUIRES_ARM_NEON;
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vabs_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__neon_x4);
   }
 
   TEST(F32_VABS__NEON_X4, batch_div_4) {
@@ -30,7 +30,7 @@
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x4);
     }
   }
 
@@ -39,7 +39,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x4);
     }
   }
 
@@ -48,7 +48,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x4);
     }
   }
 
@@ -58,7 +58,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x4);
     }
   }
 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
@@ -69,7 +69,7 @@
     TEST_REQUIRES_ARM_NEON;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vabs_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__neon_x8);
   }
 
   TEST(F32_VABS__NEON_X8, batch_div_8) {
@@ -77,7 +77,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x8);
     }
   }
 
@@ -86,7 +86,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x8);
     }
   }
 
@@ -95,7 +95,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x8);
     }
   }
 
@@ -105,7 +105,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__neon_x8);
     }
   }
 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
@@ -116,7 +116,7 @@
     TEST_REQUIRES_X86_SSE;
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vabs_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__sse_x4, xnn_init_f32_abs_sse_params);
   }
 
   TEST(F32_VABS__SSE_X4, batch_div_4) {
@@ -124,7 +124,7 @@
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x4, xnn_init_f32_abs_sse_params);
     }
   }
 
@@ -133,7 +133,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x4, xnn_init_f32_abs_sse_params);
     }
   }
 
@@ -142,7 +142,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x4, xnn_init_f32_abs_sse_params);
     }
   }
 
@@ -152,7 +152,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x4, xnn_init_f32_abs_sse_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -163,7 +163,7 @@
     TEST_REQUIRES_X86_SSE;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vabs_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__sse_x8, xnn_init_f32_abs_sse_params);
   }
 
   TEST(F32_VABS__SSE_X8, batch_div_8) {
@@ -171,7 +171,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x8, xnn_init_f32_abs_sse_params);
     }
   }
 
@@ -180,7 +180,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x8, xnn_init_f32_abs_sse_params);
     }
   }
 
@@ -189,7 +189,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x8, xnn_init_f32_abs_sse_params);
     }
   }
 
@@ -199,7 +199,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__sse_x8, xnn_init_f32_abs_sse_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -210,7 +210,7 @@
     TEST_REQUIRES_X86_AVX;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vabs_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__avx_x8, xnn_init_f32_abs_avx_params);
   }
 
   TEST(F32_VABS__AVX_X8, batch_div_8) {
@@ -218,7 +218,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x8, xnn_init_f32_abs_avx_params);
     }
   }
 
@@ -227,7 +227,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x8, xnn_init_f32_abs_avx_params);
     }
   }
 
@@ -236,7 +236,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x8, xnn_init_f32_abs_avx_params);
     }
   }
 
@@ -246,7 +246,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x8, xnn_init_f32_abs_avx_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -257,7 +257,7 @@
     TEST_REQUIRES_X86_AVX;
     VUnaryMicrokernelTester()
       .batch_size(16)
-      .Test(xnn_f32_vabs_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__avx_x16, xnn_init_f32_abs_avx_params);
   }
 
   TEST(F32_VABS__AVX_X16, batch_div_16) {
@@ -265,7 +265,7 @@
     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x16, xnn_init_f32_abs_avx_params);
     }
   }
 
@@ -274,7 +274,7 @@
     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x16, xnn_init_f32_abs_avx_params);
     }
   }
 
@@ -283,7 +283,7 @@
     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x16, xnn_init_f32_abs_avx_params);
     }
   }
 
@@ -293,7 +293,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx_x16, xnn_init_f32_abs_avx_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -304,7 +304,7 @@
     TEST_REQUIRES_X86_AVX512F;
     VUnaryMicrokernelTester()
       .batch_size(16)
-      .Test(xnn_f32_vabs_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__avx512f_x16, xnn_init_f32_abs_avx512_params);
   }
 
   TEST(F32_VABS__AVX512F_X16, batch_div_16) {
@@ -312,7 +312,7 @@
     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x16, xnn_init_f32_abs_avx512_params);
     }
   }
 
@@ -321,7 +321,7 @@
     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x16, xnn_init_f32_abs_avx512_params);
     }
   }
 
@@ -330,7 +330,7 @@
     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x16, xnn_init_f32_abs_avx512_params);
     }
   }
 
@@ -340,7 +340,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x16, xnn_init_f32_abs_avx512_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -351,7 +351,7 @@
     TEST_REQUIRES_X86_AVX512F;
     VUnaryMicrokernelTester()
       .batch_size(32)
-      .Test(xnn_f32_vabs_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__avx512f_x32, xnn_init_f32_abs_avx512_params);
   }
 
   TEST(F32_VABS__AVX512F_X32, batch_div_32) {
@@ -359,7 +359,7 @@
     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x32, xnn_init_f32_abs_avx512_params);
     }
   }
 
@@ -368,7 +368,7 @@
     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x32, xnn_init_f32_abs_avx512_params);
     }
   }
 
@@ -377,7 +377,7 @@
     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x32, xnn_init_f32_abs_avx512_params);
     }
   }
 
@@ -387,7 +387,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__avx512f_x32, xnn_init_f32_abs_avx512_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -397,14 +397,14 @@
   TEST(F32_VABS__WASMSIMD_X4, batch_eq_4) {
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, xnn_init_f32_abs_wasmsimd_params);
   }
 
   TEST(F32_VABS__WASMSIMD_X4, batch_div_4) {
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 
@@ -412,7 +412,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 
@@ -420,7 +420,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 
@@ -429,7 +429,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x4, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
@@ -439,14 +439,14 @@
   TEST(F32_VABS__WASMSIMD_X8, batch_eq_8) {
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Abs);
+      .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, xnn_init_f32_abs_wasmsimd_params);
   }
 
   TEST(F32_VABS__WASMSIMD_X8, batch_div_8) {
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 
@@ -454,7 +454,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 
@@ -462,7 +462,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 
@@ -471,7 +471,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Abs);
+        .Test(xnn_f32_vabs_ukernel__wasmsimd_x8, xnn_init_f32_abs_wasmsimd_params);
     }
   }
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
@@ -480,14 +480,14 @@
 TEST(F32_VABS__SCALAR_X1, batch_eq_1) {
   VUnaryMicrokernelTester()
     .batch_size(1)
-    .Test(xnn_f32_vabs_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vabs_ukernel__scalar_x1);
 }
 
 TEST(F32_VABS__SCALAR_X1, batch_gt_1) {
   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x1);
   }
 }
 
@@ -496,7 +496,7 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vabs_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x1);
   }
 }
 
@@ -504,14 +504,14 @@
 TEST(F32_VABS__SCALAR_X2, batch_eq_2) {
   VUnaryMicrokernelTester()
     .batch_size(2)
-    .Test(xnn_f32_vabs_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vabs_ukernel__scalar_x2);
 }
 
 TEST(F32_VABS__SCALAR_X2, batch_div_2) {
   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x2);
   }
 }
 
@@ -519,7 +519,7 @@
   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x2);
   }
 }
 
@@ -527,7 +527,7 @@
   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x2);
   }
 }
 
@@ -536,7 +536,7 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vabs_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x2);
   }
 }
 
@@ -544,14 +544,14 @@
 TEST(F32_VABS__SCALAR_X4, batch_eq_4) {
   VUnaryMicrokernelTester()
     .batch_size(4)
-    .Test(xnn_f32_vabs_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vabs_ukernel__scalar_x4);
 }
 
 TEST(F32_VABS__SCALAR_X4, batch_div_4) {
   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x4);
   }
 }
 
@@ -559,7 +559,7 @@
   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x4);
   }
 }
 
@@ -567,7 +567,7 @@
   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vabs_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x4);
   }
 }
 
@@ -576,6 +576,6 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vabs_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Abs, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vabs_ukernel__scalar_x4);
   }
 }
diff --git a/test/f32-vabs.yaml b/test/f32-vabs.yaml
index 6ca68fe..60ab238 100644
--- a/test/f32-vabs.yaml
+++ b/test/f32-vabs.yaml
@@ -5,13 +5,21 @@
 - name: xnn_f32_vabs_ukernel__neon_x4
 - name: xnn_f32_vabs_ukernel__neon_x8
 - name: xnn_f32_vabs_ukernel__sse_x4
+  init: xnn_init_f32_abs_sse_params
 - name: xnn_f32_vabs_ukernel__sse_x8
+  init: xnn_init_f32_abs_sse_params
 - name: xnn_f32_vabs_ukernel__avx_x8
+  init: xnn_init_f32_abs_avx_params
 - name: xnn_f32_vabs_ukernel__avx_x16
+  init: xnn_init_f32_abs_avx_params
 - name: xnn_f32_vabs_ukernel__avx512f_x16
+  init: xnn_init_f32_abs_avx512_params
 - name: xnn_f32_vabs_ukernel__avx512f_x32
+  init: xnn_init_f32_abs_avx512_params
 - name: xnn_f32_vabs_ukernel__wasmsimd_x4
+  init: xnn_init_f32_abs_wasmsimd_params
 - name: xnn_f32_vabs_ukernel__wasmsimd_x8
+  init: xnn_init_f32_abs_wasmsimd_params
 - name: xnn_f32_vabs_ukernel__scalar_x1
 - name: xnn_f32_vabs_ukernel__scalar_x2
 - name: xnn_f32_vabs_ukernel__scalar_x4
diff --git a/test/f32-vneg.cc b/test/f32-vneg.cc
index 729821b..dd27098 100644
--- a/test/f32-vneg.cc
+++ b/test/f32-vneg.cc
@@ -22,7 +22,7 @@
     TEST_REQUIRES_ARM_NEON;
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vneg_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__neon_x4);
   }
 
   TEST(F32_VNEG__NEON_X4, batch_div_4) {
@@ -30,7 +30,7 @@
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x4);
     }
   }
 
@@ -39,7 +39,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x4);
     }
   }
 
@@ -48,7 +48,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x4);
     }
   }
 
@@ -58,7 +58,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x4);
     }
   }
 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
@@ -69,7 +69,7 @@
     TEST_REQUIRES_ARM_NEON;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vneg_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__neon_x8);
   }
 
   TEST(F32_VNEG__NEON_X8, batch_div_8) {
@@ -77,7 +77,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x8);
     }
   }
 
@@ -86,7 +86,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x8);
     }
   }
 
@@ -95,7 +95,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x8);
     }
   }
 
@@ -105,7 +105,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__neon_x8);
     }
   }
 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
@@ -116,7 +116,7 @@
     TEST_REQUIRES_X86_SSE;
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vneg_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__sse_x4, xnn_init_f32_neg_sse_params);
   }
 
   TEST(F32_VNEG__SSE_X4, batch_div_4) {
@@ -124,7 +124,7 @@
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x4, xnn_init_f32_neg_sse_params);
     }
   }
 
@@ -133,7 +133,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x4, xnn_init_f32_neg_sse_params);
     }
   }
 
@@ -142,7 +142,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x4, xnn_init_f32_neg_sse_params);
     }
   }
 
@@ -152,7 +152,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x4, xnn_init_f32_neg_sse_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -163,7 +163,7 @@
     TEST_REQUIRES_X86_SSE;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vneg_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__sse_x8, xnn_init_f32_neg_sse_params);
   }
 
   TEST(F32_VNEG__SSE_X8, batch_div_8) {
@@ -171,7 +171,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x8, xnn_init_f32_neg_sse_params);
     }
   }
 
@@ -180,7 +180,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x8, xnn_init_f32_neg_sse_params);
     }
   }
 
@@ -189,7 +189,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x8, xnn_init_f32_neg_sse_params);
     }
   }
 
@@ -199,7 +199,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__sse_x8, xnn_init_f32_neg_sse_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -210,7 +210,7 @@
     TEST_REQUIRES_X86_AVX;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vneg_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__avx_x8, xnn_init_f32_neg_avx_params);
   }
 
   TEST(F32_VNEG__AVX_X8, batch_div_8) {
@@ -218,7 +218,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x8, xnn_init_f32_neg_avx_params);
     }
   }
 
@@ -227,7 +227,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x8, xnn_init_f32_neg_avx_params);
     }
   }
 
@@ -236,7 +236,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x8, xnn_init_f32_neg_avx_params);
     }
   }
 
@@ -246,7 +246,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x8, xnn_init_f32_neg_avx_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -257,7 +257,7 @@
     TEST_REQUIRES_X86_AVX;
     VUnaryMicrokernelTester()
       .batch_size(16)
-      .Test(xnn_f32_vneg_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__avx_x16, xnn_init_f32_neg_avx_params);
   }
 
   TEST(F32_VNEG__AVX_X16, batch_div_16) {
@@ -265,7 +265,7 @@
     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x16, xnn_init_f32_neg_avx_params);
     }
   }
 
@@ -274,7 +274,7 @@
     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x16, xnn_init_f32_neg_avx_params);
     }
   }
 
@@ -283,7 +283,7 @@
     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x16, xnn_init_f32_neg_avx_params);
     }
   }
 
@@ -293,7 +293,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx_x16, xnn_init_f32_neg_avx_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -304,7 +304,7 @@
     TEST_REQUIRES_X86_AVX512F;
     VUnaryMicrokernelTester()
       .batch_size(16)
-      .Test(xnn_f32_vneg_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__avx512f_x16, xnn_init_f32_neg_avx512_params);
   }
 
   TEST(F32_VNEG__AVX512F_X16, batch_div_16) {
@@ -312,7 +312,7 @@
     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x16, xnn_init_f32_neg_avx512_params);
     }
   }
 
@@ -321,7 +321,7 @@
     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x16, xnn_init_f32_neg_avx512_params);
     }
   }
 
@@ -330,7 +330,7 @@
     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x16, xnn_init_f32_neg_avx512_params);
     }
   }
 
@@ -340,7 +340,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x16, xnn_init_f32_neg_avx512_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -351,7 +351,7 @@
     TEST_REQUIRES_X86_AVX512F;
     VUnaryMicrokernelTester()
       .batch_size(32)
-      .Test(xnn_f32_vneg_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__avx512f_x32, xnn_init_f32_neg_avx512_params);
   }
 
   TEST(F32_VNEG__AVX512F_X32, batch_div_32) {
@@ -359,7 +359,7 @@
     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x32, xnn_init_f32_neg_avx512_params);
     }
   }
 
@@ -368,7 +368,7 @@
     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x32, xnn_init_f32_neg_avx512_params);
     }
   }
 
@@ -377,7 +377,7 @@
     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x32, xnn_init_f32_neg_avx512_params);
     }
   }
 
@@ -387,7 +387,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__avx512f_x32, xnn_init_f32_neg_avx512_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -397,14 +397,14 @@
   TEST(F32_VNEG__WASMSIMD_X4, batch_eq_4) {
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, xnn_init_f32_neg_wasmsimd_params);
   }
 
   TEST(F32_VNEG__WASMSIMD_X4, batch_div_4) {
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 
@@ -412,7 +412,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 
@@ -420,7 +420,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 
@@ -429,7 +429,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x4, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
@@ -439,14 +439,14 @@
   TEST(F32_VNEG__WASMSIMD_X8, batch_eq_8) {
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Negate);
+      .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, xnn_init_f32_neg_wasmsimd_params);
   }
 
   TEST(F32_VNEG__WASMSIMD_X8, batch_div_8) {
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 
@@ -454,7 +454,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 
@@ -462,7 +462,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 
@@ -471,7 +471,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Negate);
+        .Test(xnn_f32_vneg_ukernel__wasmsimd_x8, xnn_init_f32_neg_wasmsimd_params);
     }
   }
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
@@ -480,14 +480,14 @@
 TEST(F32_VNEG__SCALAR_X1, batch_eq_1) {
   VUnaryMicrokernelTester()
     .batch_size(1)
-    .Test(xnn_f32_vneg_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vneg_ukernel__scalar_x1);
 }
 
 TEST(F32_VNEG__SCALAR_X1, batch_gt_1) {
   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x1);
   }
 }
 
@@ -496,7 +496,7 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vneg_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x1);
   }
 }
 
@@ -504,14 +504,14 @@
 TEST(F32_VNEG__SCALAR_X2, batch_eq_2) {
   VUnaryMicrokernelTester()
     .batch_size(2)
-    .Test(xnn_f32_vneg_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vneg_ukernel__scalar_x2);
 }
 
 TEST(F32_VNEG__SCALAR_X2, batch_div_2) {
   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x2);
   }
 }
 
@@ -519,7 +519,7 @@
   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x2);
   }
 }
 
@@ -527,7 +527,7 @@
   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x2);
   }
 }
 
@@ -536,7 +536,7 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vneg_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x2);
   }
 }
 
@@ -544,14 +544,14 @@
 TEST(F32_VNEG__SCALAR_X4, batch_eq_4) {
   VUnaryMicrokernelTester()
     .batch_size(4)
-    .Test(xnn_f32_vneg_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vneg_ukernel__scalar_x4);
 }
 
 TEST(F32_VNEG__SCALAR_X4, batch_div_4) {
   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x4);
   }
 }
 
@@ -559,7 +559,7 @@
   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x4);
   }
 }
 
@@ -567,7 +567,7 @@
   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vneg_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x4);
   }
 }
 
@@ -576,6 +576,6 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vneg_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Negate, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vneg_ukernel__scalar_x4);
   }
 }
diff --git a/test/f32-vneg.yaml b/test/f32-vneg.yaml
index b05fbf5..07b26ba 100644
--- a/test/f32-vneg.yaml
+++ b/test/f32-vneg.yaml
@@ -5,13 +5,21 @@
 - name: xnn_f32_vneg_ukernel__neon_x4
 - name: xnn_f32_vneg_ukernel__neon_x8
 - name: xnn_f32_vneg_ukernel__sse_x4
+  init: xnn_init_f32_neg_sse_params
 - name: xnn_f32_vneg_ukernel__sse_x8
+  init: xnn_init_f32_neg_sse_params
 - name: xnn_f32_vneg_ukernel__avx_x8
+  init: xnn_init_f32_neg_avx_params
 - name: xnn_f32_vneg_ukernel__avx_x16
+  init: xnn_init_f32_neg_avx_params
 - name: xnn_f32_vneg_ukernel__avx512f_x16
+  init: xnn_init_f32_neg_avx512_params
 - name: xnn_f32_vneg_ukernel__avx512f_x32
+  init: xnn_init_f32_neg_avx512_params
 - name: xnn_f32_vneg_ukernel__wasmsimd_x4
+  init: xnn_init_f32_neg_wasmsimd_params
 - name: xnn_f32_vneg_ukernel__wasmsimd_x8
+  init: xnn_init_f32_neg_wasmsimd_params
 - name: xnn_f32_vneg_ukernel__scalar_x1
 - name: xnn_f32_vneg_ukernel__scalar_x2
 - name: xnn_f32_vneg_ukernel__scalar_x4
diff --git a/test/f32-vsqr.cc b/test/f32-vsqr.cc
index 168a2e7..c199ee8 100644
--- a/test/f32-vsqr.cc
+++ b/test/f32-vsqr.cc
@@ -22,7 +22,7 @@
     TEST_REQUIRES_ARM_NEON;
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vsqr_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__neon_x4);
   }
 
   TEST(F32_VSQR__NEON_X4, batch_div_4) {
@@ -30,7 +30,7 @@
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x4);
     }
   }
 
@@ -39,7 +39,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x4);
     }
   }
 
@@ -48,7 +48,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x4);
     }
   }
 
@@ -58,7 +58,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__neon_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x4);
     }
   }
 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
@@ -69,7 +69,7 @@
     TEST_REQUIRES_ARM_NEON;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vsqr_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__neon_x8);
   }
 
   TEST(F32_VSQR__NEON_X8, batch_div_8) {
@@ -77,7 +77,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x8);
     }
   }
 
@@ -86,7 +86,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x8);
     }
   }
 
@@ -95,7 +95,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x8);
     }
   }
 
@@ -105,7 +105,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__neon_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__neon_x8);
     }
   }
 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
@@ -116,7 +116,7 @@
     TEST_REQUIRES_X86_SSE;
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vsqr_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__sse_x4);
   }
 
   TEST(F32_VSQR__SSE_X4, batch_div_4) {
@@ -124,7 +124,7 @@
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x4);
     }
   }
 
@@ -133,7 +133,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x4);
     }
   }
 
@@ -142,7 +142,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x4);
     }
   }
 
@@ -152,7 +152,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__sse_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x4);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -163,7 +163,7 @@
     TEST_REQUIRES_X86_SSE;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vsqr_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__sse_x8);
   }
 
   TEST(F32_VSQR__SSE_X8, batch_div_8) {
@@ -171,7 +171,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x8);
     }
   }
 
@@ -180,7 +180,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x8);
     }
   }
 
@@ -189,7 +189,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x8);
     }
   }
 
@@ -199,7 +199,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__sse_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__sse_x8);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -210,7 +210,7 @@
     TEST_REQUIRES_X86_AVX;
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vsqr_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__avx_x8, xnn_init_f32_default_avx_params);
   }
 
   TEST(F32_VSQR__AVX_X8, batch_div_8) {
@@ -218,7 +218,7 @@
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x8, xnn_init_f32_default_avx_params);
     }
   }
 
@@ -227,7 +227,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x8, xnn_init_f32_default_avx_params);
     }
   }
 
@@ -236,7 +236,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x8, xnn_init_f32_default_avx_params);
     }
   }
 
@@ -246,7 +246,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__avx_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x8, xnn_init_f32_default_avx_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -257,7 +257,7 @@
     TEST_REQUIRES_X86_AVX;
     VUnaryMicrokernelTester()
       .batch_size(16)
-      .Test(xnn_f32_vsqr_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__avx_x16, xnn_init_f32_default_avx_params);
   }
 
   TEST(F32_VSQR__AVX_X16, batch_div_16) {
@@ -265,7 +265,7 @@
     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x16, xnn_init_f32_default_avx_params);
     }
   }
 
@@ -274,7 +274,7 @@
     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x16, xnn_init_f32_default_avx_params);
     }
   }
 
@@ -283,7 +283,7 @@
     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x16, xnn_init_f32_default_avx_params);
     }
   }
 
@@ -293,7 +293,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__avx_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx_x16, xnn_init_f32_default_avx_params);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -304,7 +304,7 @@
     TEST_REQUIRES_X86_AVX512F;
     VUnaryMicrokernelTester()
       .batch_size(16)
-      .Test(xnn_f32_vsqr_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__avx512f_x16);
   }
 
   TEST(F32_VSQR__AVX512F_X16, batch_div_16) {
@@ -312,7 +312,7 @@
     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x16);
     }
   }
 
@@ -321,7 +321,7 @@
     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x16);
     }
   }
 
@@ -330,7 +330,7 @@
     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x16);
     }
   }
 
@@ -340,7 +340,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x16, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x16);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -351,7 +351,7 @@
     TEST_REQUIRES_X86_AVX512F;
     VUnaryMicrokernelTester()
       .batch_size(32)
-      .Test(xnn_f32_vsqr_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__avx512f_x32);
   }
 
   TEST(F32_VSQR__AVX512F_X32, batch_div_32) {
@@ -359,7 +359,7 @@
     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x32);
     }
   }
 
@@ -368,7 +368,7 @@
     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x32);
     }
   }
 
@@ -377,7 +377,7 @@
     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x32);
     }
   }
 
@@ -387,7 +387,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__avx512f_x32, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__avx512f_x32);
     }
   }
 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
@@ -397,14 +397,14 @@
   TEST(F32_VSQR__WASMSIMD_X4, batch_eq_4) {
     VUnaryMicrokernelTester()
       .batch_size(4)
-      .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4);
   }
 
   TEST(F32_VSQR__WASMSIMD_X4, batch_div_4) {
     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4);
     }
   }
 
@@ -412,7 +412,7 @@
     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4);
     }
   }
 
@@ -420,7 +420,7 @@
     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4);
     }
   }
 
@@ -429,7 +429,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x4);
     }
   }
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
@@ -439,14 +439,14 @@
   TEST(F32_VSQR__WASMSIMD_X8, batch_eq_8) {
     VUnaryMicrokernelTester()
       .batch_size(8)
-      .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Square);
+      .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8);
   }
 
   TEST(F32_VSQR__WASMSIMD_X8, batch_div_8) {
     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8);
     }
   }
 
@@ -454,7 +454,7 @@
     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8);
     }
   }
 
@@ -462,7 +462,7 @@
     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8);
     }
   }
 
@@ -471,7 +471,7 @@
       VUnaryMicrokernelTester()
         .batch_size(batch_size)
         .inplace(true)
-        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8, VUnaryMicrokernelTester::OpType::Square);
+        .Test(xnn_f32_vsqr_ukernel__wasmsimd_x8);
     }
   }
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
@@ -480,14 +480,14 @@
 TEST(F32_VSQR__SCALAR_X1, batch_eq_1) {
   VUnaryMicrokernelTester()
     .batch_size(1)
-    .Test(xnn_f32_vsqr_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vsqr_ukernel__scalar_x1);
 }
 
 TEST(F32_VSQR__SCALAR_X1, batch_gt_1) {
   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x1);
   }
 }
 
@@ -496,7 +496,7 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x1, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x1);
   }
 }
 
@@ -504,14 +504,14 @@
 TEST(F32_VSQR__SCALAR_X2, batch_eq_2) {
   VUnaryMicrokernelTester()
     .batch_size(2)
-    .Test(xnn_f32_vsqr_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vsqr_ukernel__scalar_x2);
 }
 
 TEST(F32_VSQR__SCALAR_X2, batch_div_2) {
   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x2);
   }
 }
 
@@ -519,7 +519,7 @@
   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x2);
   }
 }
 
@@ -527,7 +527,7 @@
   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x2);
   }
 }
 
@@ -536,7 +536,7 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x2, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x2);
   }
 }
 
@@ -544,14 +544,14 @@
 TEST(F32_VSQR__SCALAR_X4, batch_eq_4) {
   VUnaryMicrokernelTester()
     .batch_size(4)
-    .Test(xnn_f32_vsqr_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+    .Test(xnn_f32_vsqr_ukernel__scalar_x4);
 }
 
 TEST(F32_VSQR__SCALAR_X4, batch_div_4) {
   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x4);
   }
 }
 
@@ -559,7 +559,7 @@
   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x4);
   }
 }
 
@@ -567,7 +567,7 @@
   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x4);
   }
 }
 
@@ -576,6 +576,6 @@
     VUnaryMicrokernelTester()
       .batch_size(batch_size)
       .inplace(true)
-      .Test(xnn_f32_vsqr_ukernel__scalar_x4, VUnaryMicrokernelTester::OpType::Square, VUnaryMicrokernelTester::Variant::Scalar);
+      .Test(xnn_f32_vsqr_ukernel__scalar_x4);
   }
 }
diff --git a/test/f32-vsqr.yaml b/test/f32-vsqr.yaml
index 2fb0eea..6a8a56b 100644
--- a/test/f32-vsqr.yaml
+++ b/test/f32-vsqr.yaml
@@ -7,7 +7,9 @@
 - name: xnn_f32_vsqr_ukernel__sse_x4
 - name: xnn_f32_vsqr_ukernel__sse_x8
 - name: xnn_f32_vsqr_ukernel__avx_x8
+  init: xnn_init_f32_default_avx_params
 - name: xnn_f32_vsqr_ukernel__avx_x16
+  init: xnn_init_f32_default_avx_params
 - name: xnn_f32_vsqr_ukernel__avx512f_x16
 - name: xnn_f32_vsqr_ukernel__avx512f_x32
 - name: xnn_f32_vsqr_ukernel__wasmsimd_x4
diff --git a/test/vunary-microkernel-tester.h b/test/vunary-microkernel-tester.h
index 496a6b4..efe2424 100644
--- a/test/vunary-microkernel-tester.h
+++ b/test/vunary-microkernel-tester.h
@@ -25,9 +25,7 @@
 class VUnaryMicrokernelTester {
  public:
   enum class OpType {
-    Abs,
     ELU,
-    Negate,
     ReLU,
     RoundToNearestEven,
     RoundTowardsZero,
@@ -152,17 +150,11 @@
       // Compute reference results.
       for (size_t i = 0; i < batch_size(); i++) {
         switch (op_type) {
-          case OpType::Abs:
-            y_ref[i] = std::abs(x_data[i]);
-            break;
           case OpType::ELU:
           {
             y_ref[i] = std::signbit(x_data[i]) ? alpha() * std::expm1(double(x_data[i]) * prescale()) : double(x_data[i]) * beta();
             break;
           }
-          case OpType::Negate:
-            y_ref[i] = -x_data[i];
-            break;
           case OpType::ReLU:
             y_ref[i] = std::max(x_data[i], 0.0f);
             break;
@@ -192,26 +184,12 @@
 
       // Prepare parameters.
       union {
-        union xnn_f32_abs_params abs;
         union xnn_f32_elu_params elu;
-        union xnn_f32_lrelu_params lrelu;
-        union xnn_f32_minmax_params minmax;
         union xnn_f32_neg_params neg;
         union xnn_f32_relu_params relu;
         union xnn_f32_rnd_params rnd;
-        union xnn_f32_sqrt_params sqrt;
       } params;
       switch (op_type) {
-        case OpType::Abs:
-          switch (variant) {
-            case Variant::Native:
-              xnn_init_f32_abs_params(&params.abs);
-              break;
-            case Variant::Scalar:
-              xnn_init_scalar_f32_abs_params(&params.abs);
-              break;
-          }
-          break;
         case OpType::ELU:
           switch (variant) {
             case Variant::Native:
@@ -222,16 +200,6 @@
               break;
           }
           break;
-        case OpType::Negate:
-          switch (variant) {
-            case Variant::Native:
-              xnn_init_f32_neg_params(&params.neg);
-              break;
-            case Variant::Scalar:
-              xnn_init_scalar_f32_neg_params(&params.neg);
-              break;
-          }
-          break;
         case OpType::RoundToNearestEven:
         case OpType::RoundTowardsZero:
         case OpType::RoundUp:
@@ -262,6 +230,45 @@
     }
   }
 
+  void Test(xnn_f32_vabs_ukernel_function vabs, xnn_init_f32_abs_params_fn init_params = nullptr) const {
+    std::random_device random_device;
+    auto rng = std::mt19937(random_device());
+    auto f32rng = std::bind(std::uniform_real_distribution<float>(-1.0f, 1.0f), std::ref(rng));
+
+    std::vector<float> x(batch_size() + XNN_EXTRA_BYTES / sizeof(float));
+    std::vector<float> y(batch_size() + (inplace() ? XNN_EXTRA_BYTES / sizeof(float) : 0));
+    std::vector<float> y_ref(batch_size());
+    for (size_t iteration = 0; iteration < iterations(); iteration++) {
+      if (inplace()) {
+        std::generate(y.begin(), y.end(), std::ref(f32rng));
+      } else {
+        std::generate(x.begin(), x.end(), std::ref(f32rng));
+        std::fill(y.begin(), y.end(), nanf(""));
+      }
+      const float* x_data = inplace() ? y.data() : x.data();
+
+      // Compute reference results.
+      for (size_t i = 0; i < batch_size(); i++) {
+        y_ref[i] = std::abs(x_data[i]);
+      }
+
+      // Prepare parameters.
+      union xnn_f32_abs_params params;
+      if (init_params != nullptr) {
+        init_params(&params);
+      }
+
+      // Call optimized micro-kernel.
+      vabs(batch_size() * sizeof(float), x_data, y.data(), &params);
+
+      // Verify results.
+      for (size_t i = 0; i < batch_size(); i++) {
+        ASSERT_EQ(y[i], y_ref[i])
+          << "at " << i << " / " << batch_size() << ", x[" << i << "] = " << x[i];
+      }
+    }
+  }
+
   void Test(xnn_f32_vclamp_ukernel_function vclamp, xnn_init_f32_minmax_params_fn init_params) const {
     std::random_device random_device;
     auto rng = std::mt19937(random_device());
@@ -373,6 +380,84 @@
     }
   }
 
+  void Test(xnn_f32_vneg_ukernel_function vneg, xnn_init_f32_neg_params_fn init_params = nullptr) const {
+    std::random_device random_device;
+    auto rng = std::mt19937(random_device());
+    auto f32rng = std::bind(std::uniform_real_distribution<float>(-1.0f, 1.0f), std::ref(rng));
+
+    std::vector<float> x(batch_size() + XNN_EXTRA_BYTES / sizeof(float));
+    std::vector<float> y(batch_size() + (inplace() ? XNN_EXTRA_BYTES / sizeof(float) : 0));
+    std::vector<float> y_ref(batch_size());
+    for (size_t iteration = 0; iteration < iterations(); iteration++) {
+      if (inplace()) {
+        std::generate(y.begin(), y.end(), std::ref(f32rng));
+      } else {
+        std::generate(x.begin(), x.end(), std::ref(f32rng));
+        std::fill(y.begin(), y.end(), nanf(""));
+      }
+      const float* x_data = inplace() ? y.data() : x.data();
+
+      // Compute reference results.
+      for (size_t i = 0; i < batch_size(); i++) {
+        y_ref[i] = -x_data[i];
+      }
+
+      // Prepare parameters.
+      union xnn_f32_neg_params params;
+      if (init_params != nullptr) {
+        init_params(&params);
+      }
+
+      // Call optimized micro-kernel.
+      vneg(batch_size() * sizeof(float), x_data, y.data(), &params);
+
+      // Verify results.
+      for (size_t i = 0; i < batch_size(); i++) {
+        ASSERT_EQ(y[i], y_ref[i])
+          << "at " << i << " / " << batch_size() << ", x[" << i << "] = " << x[i];
+      }
+    }
+  }
+
+  void Test(xnn_f32_vsqr_ukernel_function vsqr, xnn_init_f32_default_params_fn init_params = nullptr) const {
+    std::random_device random_device;
+    auto rng = std::mt19937(random_device());
+    auto f32rng = std::bind(std::uniform_real_distribution<float>(-10.0f, 10.0f), std::ref(rng));
+
+    std::vector<float> x(batch_size() + XNN_EXTRA_BYTES / sizeof(float));
+    std::vector<float> y(batch_size() + (inplace() ? XNN_EXTRA_BYTES / sizeof(float) : 0));
+    std::vector<float> y_ref(batch_size());
+    for (size_t iteration = 0; iteration < iterations(); iteration++) {
+      if (inplace()) {
+        std::generate(y.begin(), y.end(), std::ref(f32rng));
+      } else {
+        std::generate(x.begin(), x.end(), std::ref(f32rng));
+        std::fill(y.begin(), y.end(), nanf(""));
+      }
+      const float* x_data = inplace() ? y.data() : x.data();
+
+      // Compute reference results.
+      for (size_t i = 0; i < batch_size(); i++) {
+        y_ref[i] = x_data[i] * x_data[i];
+      }
+
+      // Prepare parameters.
+      union xnn_f32_default_params params;
+      if (init_params != nullptr) {
+        init_params(&params);
+      }
+
+      // Call optimized micro-kernel.
+      vsqr(batch_size() * sizeof(float), x_data, y.data(), &params);
+
+      // Verify results.
+      for (size_t i = 0; i < batch_size(); i++) {
+        ASSERT_EQ(y[i], y_ref[i])
+          << "at " << i << " / " << batch_size() << ", x[" << i << "] = " << x[i];
+      }
+    }
+  }
+
   void Test(xnn_f32_vsqrt_ukernel_function vsqrt, xnn_init_f32_sqrt_params_fn init_params = nullptr) const {
     std::random_device random_device;
     auto rng = std::mt19937(random_device());